见
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.