Whamcloud - gitweb
LU-12125 mds: allow parallel regular file rename
authorAndreas Dilger <adilger@whamcloud.com>
Sat, 9 Jan 2021 09:08:06 +0000 (02:08 -0700)
committerLi Xi <lixi@ddn.com>
Wed, 10 Mar 2021 14:29:41 +0000 (14:29 +0000)
commitb32c85089d4ca988007f823c429173d6c07b78a5
tree11efe66c0463d3443cf9a04856ebd396a0842c61
parent5803e5261c4db26ef8c0340c6f6962a41f86117e
LU-12125 mds: allow parallel regular file rename

Allow rename of non-directory files in the same directory to be done
in parallel, by only taking the DLM lock on the parent FID, without
also locking the global LUSTRE_BFL_FID (Big Filesystem Lock).

Older clients may not send the renamed file mode in mds_rec_rename.
In this case, the LUSTRE_BFL_FID lock will still be taken, and is not
worse than before parallel rename was allowed.

Similarly, if (for whatever reason) there is a mix of MDS versions
running in the same filesystem, at worst older MDSes will continue to
unnecessarily lock LUSTRE_BFL_FID before doing the file rename.

If MDT0000 is on an older MDS, but newer MDSes are doing renames of
non-directories, the newer MDSes will *not* lock LUSTRE_BFL_FID first,
but there will still be proper serialization from the parent directory
FID lock for other renames affecting the parent and the source/target
entries.  That MDT0000 is unaware of the rename is the whole point.

In case of a race, where the file mode sent by the client is stale,
this is also not a concern, because the file mode is rechecked later
under lock and the rename fails if the source and target mode differ.

Lustre-change: https://review.whamcloud.com/41186
Lustre-commit: d76cc65d5d68ed3e04bfbd9b7527f64ab0ee0ca7

Test-Parameters: testlist=racer env=DURATION=3600
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: If330b53eb6db46e40f50fd7834a83e80db3ebbe5
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Reviewed-by: Yingjin Qian <qian@ddn.com>
Reviewed-on: https://review.whamcloud.com/41958
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/mdt/mdt_reint.c