见
this link(懒惰的相关功能粘贴在下面).
- /*
- * Check that all of the backup GDT blocks are held in the primary GDT block.
- * It is assumed that they are stored in group order. Returns the number of
- * groups in current filesystem that have BACKUPS,or -ve error code.
- */
- static int verify_reserved_gdb(struct super_block *sb,ext4_group_t end,struct buffer_head *primary)
- {
- const ext4_fsblk_t blk = primary->b_blocknr;
- unsigned three = 1;
- unsigned five = 5;
- unsigned seven = 7;
- unsigned grp;
- __le32 *p = (__le32 *)primary->b_data;
- int gdbackups = 0;
- while ((grp = ext4_list_backups(sb,&three,&five,&seven)) < end) {
- if (le32_to_cpu(*p++) !=
- grp * EXT4_BLOCKS_PER_GROUP(sb) + blk){
- ext4_warning(sb,"reserved GDT %llu"
- " missing grp %d (%llu)",blk,grp,grp *
- (ext4_fsblk_t)EXT4_BLOCKS_PER_GROUP(sb) +
- blk);
- return -EINVAL;
- }
- if (++gdbackups > EXT4_ADDR_PER_BLOCK(sb))
- return -EFBIG;
- }
- return gdbackups;
- }
有人可以向我解释为什么这个变量是这样初始化的,这个函数在做什么?
解决方法
见00296
here行.评论说:
- 00295 /*
- 00296 * Iterate through the groups which hold BACKUP superblock/GDT copies in an
- 00297 * ext4 filesystem. The counters should be initialized to 1,5,and 7 before
- 00298 * calling this for the first time. In a sparse filesystem it will be the
- 00299 * sequence of powers of 3,and 7: 1,3,7,9,25,27,49,81,...
- 00300 * For a non-sparse filesystem it will be every group: 1,2,4,...
- 00301 */
总之,在我看来应该将三个初始化为1来启用函数ext4_list_backups返回1.