資源簡(jiǎn)介
linux 0.12 的源代碼,配合趙炯的書(shū)看
代碼片段和文件信息
/*
?*??linux/fs/bitmap.c
?*
?*??(C)?1991??Linus?Torvalds
?*/
/*?bitmap.c?contains?the?code?that?handles?the?inode?and?block?bitmaps?*/
#include?
#include?
#include?
#define?clear_block(addr)?\
__asm__(“cld\n\t“?\
“rep\n\t“?\
“stosl“?\
::“a“?(0)“c“?(BLOCK_SIZE/4)“D“?((long)?(addr)):“cx““di“)
#define?set_bit(nraddr)?({\
register?int?res?__asm__(“ax“);?\
__asm__?__volatile__(“btsl?%2%3\n\tsetb?%%al“:?\
“=a“?(res):“0“?(0)“r“?(nr)“m“?(*(addr)));?\
res;})
#define?clear_bit(nraddr)?({\
register?int?res?__asm__(“ax“);?\
__asm__?__volatile__(“btrl?%2%3\n\tsetnb?%%al“:?\
“=a“?(res):“0“?(0)“r“?(nr)“m“?(*(addr)));?\
res;})
#define?find_first_zero(addr)?({?\
int?__res;?\
__asm__(“cld\n“?\
“1:\tlodsl\n\t“?\
“notl?%%eax\n\t“?\
“bsfl?%%eax%%edx\n\t“?\
“je?2f\n\t“?\
“addl?%%edx%%ecx\n\t“?\
“jmp?3f\n“?\
“2:\taddl?$32%%ecx\n\t“?\
“cmpl?$8192%%ecx\n\t“?\
“jl?1b\n“?\
“3:“?\
:“=c“?(__res):“c“?(0)“S“?(addr):“ax““dx““si“);?\
__res;})
int?free_block(int?dev?int?block)
{
struct?super_block?*?sb;
struct?buffer_head?*?bh;
if?(!(sb?=?get_super(dev)))
panic(“trying?to?free?block?on?nonexistent?device“);
if?(block?s_firstdatazone?||?block?>=?sb->s_nzones)
panic(“trying?to?free?block?not?in?datazone“);
bh?=?get_hash_table(devblock);
if?(bh)?{
if?(bh->b_count?>?1)?{
brelse(bh);
return?0;
}
bh->b_dirt=0;
bh->b_uptodate=0;
if?(bh->b_count)
brelse(bh);
}
block?-=?sb->s_firstdatazone?-?1?;
if?(clear_bit(block&8191sb->s_zmap[block/8192]->b_data))?{
printk(“block?(%04x:%d)?“devblock+sb->s_firstdatazone-1);
printk(“free_block:?bit?already?cleared\n“);
}
sb->s_zmap[block/8192]->b_dirt?=?1;
return?1;
}
int?new_block(int?dev)
{
struct?buffer_head?*?bh;
struct?super_block?*?sb;
int?ij;
if?(!(sb?=?get_super(dev)))
panic(“trying?to?get?new?block?from?nonexistant?device“);
j?=?8192;
for?(i=0?;?i<8?;?i++)
if?(bh=sb->s_zmap[i])
if?((j=find_first_zero(bh->b_data))<8192)
break;
if?(i>=8?||?!bh?||?j>=8192)
return?0;
if?(set_bit(jbh->b_data))
panic(“new_block:?bit?already?set“);
bh->b_dirt?=?1;
j?+=?i*8192?+?sb->s_firstdatazone-1;
if?(j?>=?sb->s_nzones)
return?0;
if?(!(bh=getblk(devj)))
panic(“new_block:?cannot?get?block“);
if?(bh->b_count?!=?1)
panic(“new?block:?count?is?!=?1“);
clear_block(bh->b_data);
bh->b_uptodate?=?1;
bh->b_dirt?=?1;
brelse(bh);
return?j;
}
void?free_inode(struct?m_inode?*?inode)
{
struct?super_block?*?sb;
struct?buffer_head?*?bh;
if?(!inode)
return;
if?(!inode->i_dev)?{
memset(inode0sizeof(*inode));
return;
}
if?(inode->i_count>1)?{
printk(“trying?to?free?inode?with?count=%d\n“inode->i_count);
panic(“free_inode“);
}
if?(inode->i_nlinks)
panic(“trying?to?free?inode?with?links“);
if?(!(sb?=?get_super(inode->i_dev)))
panic(“trying?to?free?inode?on?nonexistent?device“);
if?(inode->i_num?1?||?inode->i_num?>?sb->s_ninodes)
panic(“trying?to?free?inode?0?or?nonexistant?inode“);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????7574??1992-01-14?23:45??linux-0.12\linux-0.12\boot\bootsect.S
?????文件???????5938??1992-01-11?12:50??linux-0.12\linux-0.12\boot\head.s
?????文件??????12144??1992-01-12?02:10??linux-0.12\linux-0.12\boot\setup.S
?????文件???????4007??1992-01-12?03:57??linux-0.12\linux-0.12\fs\bitmap.c
?????文件???????1763??1991-12-10?05:11??linux-0.12\linux-0.12\fs\block_dev.c
?????文件???????9072??1991-12-07?04:21??linux-0.12\linux-0.12\fs\buffer.c
?????文件???????2103??1991-11-19?17:10??linux-0.12\linux-0.12\fs\char_dev.c
?????文件???????9908??1992-01-14?07:36??linux-0.12\linux-0.12\fs\exec.c
?????文件???????1455??1991-10-02?22:16??linux-0.12\linux-0.12\fs\fcntl.c
?????文件???????1852??1991-12-02?03:02??linux-0.12\linux-0.12\fs\file_dev.c
?????文件????????122??1991-10-02?22:16??linux-0.12\linux-0.12\fs\file_table.c
?????文件???????7166??1992-01-11?06:27??linux-0.12\linux-0.12\fs\inode.c
?????文件???????1136??1991-12-21?09:58??linux-0.12\linux-0.12\fs\ioctl.c
?????文件???????7176??1992-01-13?03:49??linux-0.12\linux-0.12\fs\Makefile.c
?????文件??????18958??1992-01-12?12:09??linux-0.12\linux-0.12\fs\namei.c
?????文件???????4862??1992-01-09?04:01??linux-0.12\linux-0.12\fs\open.c
?????文件???????2834??1992-01-11?06:18??linux-0.12\linux-0.12\fs\pipe.c
?????文件???????2802??1991-11-25?23:47??linux-0.12\linux-0.12\fs\read_write.c
?????文件???????6381??1992-01-14?06:25??linux-0.12\linux-0.12\fs\select.c
?????文件???????1875??1992-01-12?04:39??linux-0.12\linux-0.12\fs\stat.c
?????文件???????5603??1991-12-10?05:11??linux-0.12\linux-0.12\fs\super.c
?????文件???????1692??1992-01-12?03:47??linux-0.12\linux-0.12\fs\truncate.c
?????文件???????6047??1991-09-17?23:10??linux-0.12\linux-0.12\include\a.out.h
?????文件????????477??1991-08-07?18:17??linux-0.12\linux-0.12\include\asm\io.h
?????文件????????507??1991-06-16?04:54??linux-0.12\linux-0.12\include\asm\memory.h
?????文件???????1366??1991-11-26?02:48??linux-0.12\linux-0.12\include\asm\segment.h
?????文件???????1707??1992-01-13?21:02??linux-0.12\linux-0.12\include\asm\system.h
?????文件????????321??1991-09-17?23:12??linux-0.12\linux-0.12\include\const.h
?????文件???????1049??1991-11-08?01:30??linux-0.12\linux-0.12\include\ctype.h
?????文件???????1364??1992-01-04?02:52??linux-0.12\linux-0.12\include\errno.h
............此處省略117個(gè)文件信息
評(píng)論
共有 條評(píng)論