资源简介

linux 0.12 的源代码,配合赵炯的书看

资源截图

代码片段和文件信息

/*
 *  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 < sb->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“);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       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个文件信息

评论

共有 条评论