Details
-
Bug
-
Resolution: Fixed
-
Critical
-
Lustre 2.1.0, Lustre 1.8.6
-
None
-
3
-
23,780
-
5009
Description
The patch from Lustre Bugzilla 23780 attachment 31890 was added for RHEL6 support with git commit e550abd05cf7ffddaedbef996be1baaae0912b4a, but a better long term fix is needed.
Johann L. writes in Lustre Bugzilla 23780 comment #28:
> The drawback of this patch is a potential race with fiemap (i did not revert
> the git kernel commit fab3a549e204172236779f502eccb4f9bf0dc87d totally).
and follows up in Lustre Bugzilla 23780 comment #34:
> Please note that this patch is a short term solution.
> Girish, it would be great if you could come up with another patch which takes
> i_data_sem write reference where it is needed in ext4_walk_space().
b1_8 also still requires the fix for SLES 11 SP1.
Info required for matching: sanity-benchmark test_fsx fsx
Zhenyu Xu, I was referring to your patch.
> static int ext3_ext_new_extent_cb()
{ >... > return EXT_CONTINUE; > }>...
> if (bp->create == 0)
>
{ >... > }> down_write((&EXT4_I(inode)->i_data_sem));
>
> /* validate extent, make sure the extent tree does not changed */
> tmppath = ext4_ext_find_extent(inode, cex->ec_block, NULL);
> if (IS_ERR(tmppath))
> tmpex = tmppath[depth].p_ext;
> if (tmpex != ex) {>...> }
This patch seems to be expecting that the extent map may have changed during write (which I called allocation race earlier) . However, obdfilter takes i_mutex on writes and truncates and serializes extent map updates with it.
Which case/race is expected to be handled with your code that I quoted above?
Thanks.