这几天在看赵炯的Linux内核完全注释版(修正版v1.9.5一书),其中很多知识较难理解,为加深理解且防止忘记,在这里将已理解部分记载下来,当然我自己理解的并一定就是正确的,甚至还有很多错误,如果有某位大神能看到我这篇博客并能指出其中的错误,我将十分感谢,废话不多说了,先上代码
int new_block(int dev)
76 {
77 struct buffer_head * bh;
78 struct super_block * sb;
79 int i,j;
80
81 if (!(sb = get_super(dev)))
82 panic("trying to get new block from nonexistant device");
83 j = 8192;
84 for (i=0 ; i<8 ; i++)
85 if (bh=sb->s_zmap[i])
86 if ((j=find_first_zero(bh->b_data))<8192)
87 break;
88 if (i>=8 || !bh || j>=8192)
89 return 0;
90 if (set_bit(j,bh->b_data))
91 panic("new_block: bit already set");
92 bh->b_dirt = 1;
93 j += i*8192 +