struct super_block { struct list_head s_list; /* Keep this first */ dev_t s_dev; /* search index; _not_ kdev_t */ unsigned char s_blocksize_bits; unsigned long s_blocksize; ...
从我读到的, s_blocksize 和 s_blocksize_bits 分别以字节和比特为单位包含块的大小。 比特数大于字节数,所以如果它们的类型相反,不是更有意义吗?这样地:
s_blocksize
s_blocksize_bits
unsigned char s_blocksize_bits; unsigned long s_blocksize;
s_blocksize_bits 不是块的大小(以比特为单位)。这是块大小中的比特数。如果你搜索代码看看它是如何使用的,它通常是位移的, e.g.
elen = (etype << 30) | (elen + (count << sb->s_blocksize_bits));
因此,给定一个块号,你将其移动这么多比特以获得相应的偏移量(他们假设块的大小总是2的幂)。