nilfs2: simplify handling of active state of segments fix
This fixes a bug of ("nilfs2: simplify handling of active state of segments") patch. The patch did not take account that a base index is increased in nilfs_sufile_get_suinfo() function if requested entries go across block boundary on sufile. Due to this bug, the active flag sometimes appears on wrong segments and has induced malfunction of garbage collection. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
This commit is contained in:
@@ -625,7 +625,7 @@ ssize_t nilfs_sufile_get_suinfo(struct inode *sufile, __u64 segnum,
|
|||||||
si[i + j].sui_nblocks = le32_to_cpu(su->su_nblocks);
|
si[i + j].sui_nblocks = le32_to_cpu(su->su_nblocks);
|
||||||
si[i + j].sui_flags = le32_to_cpu(su->su_flags) &
|
si[i + j].sui_flags = le32_to_cpu(su->su_flags) &
|
||||||
~(1UL << NILFS_SEGMENT_USAGE_ACTIVE);
|
~(1UL << NILFS_SEGMENT_USAGE_ACTIVE);
|
||||||
if (nilfs_segment_is_active(nilfs, segnum + i + j))
|
if (nilfs_segment_is_active(nilfs, segnum + j))
|
||||||
si[i + j].sui_flags |=
|
si[i + j].sui_flags |=
|
||||||
(1UL << NILFS_SEGMENT_USAGE_ACTIVE);
|
(1UL << NILFS_SEGMENT_USAGE_ACTIVE);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user