diff options
author | Amir Goldstein <amir73il@gmail.com> | 2023-07-20 12:51:21 +0300 |
---|---|---|
committer | Amir Goldstein <amir73il@gmail.com> | 2023-10-31 00:12:57 +0200 |
commit | 162d06444070c12827d604a2cb6b6bd98d48cbb0 (patch) | |
tree | aa5ac2ffb3dce2d74c3fb7812b3ea37abca90a99 /fs/overlayfs/copy_up.c | |
parent | d08d3b3c2caf6c482703bbc5efaa7b9ae95dea20 (diff) | |
download | linux-162d06444070c12827d604a2cb6b6bd98d48cbb0.tar.gz linux-162d06444070c12827d604a2cb6b6bd98d48cbb0.tar.bz2 linux-162d06444070c12827d604a2cb6b6bd98d48cbb0.zip |
ovl: reorder ovl_want_write() after ovl_inode_lock()
Make the locking order of ovl_inode_lock() strictly between the two
vfs stacked layers, i.e.:
- ovl vfs locks: sb_writers, inode_lock, ...
- ovl_inode_lock
- upper vfs locks: sb_writers, inode_lock, ...
To that effect, move ovl_want_write() into the helpers ovl_nlink_start()
and ovl_copy_up_start which currently take the ovl_inode_lock() after
ovl_want_write().
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Diffstat (limited to 'fs/overlayfs/copy_up.c')
-rw-r--r-- | fs/overlayfs/copy_up.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c index ada3fcc9c6d5..a999ae207e74 100644 --- a/fs/overlayfs/copy_up.c +++ b/fs/overlayfs/copy_up.c @@ -1170,17 +1170,10 @@ static bool ovl_open_need_copy_up(struct dentry *dentry, int flags) int ovl_maybe_copy_up(struct dentry *dentry, int flags) { - int err = 0; - - if (ovl_open_need_copy_up(dentry, flags)) { - err = ovl_want_write(dentry); - if (!err) { - err = ovl_copy_up_flags(dentry, flags); - ovl_drop_write(dentry); - } - } + if (!ovl_open_need_copy_up(dentry, flags)) + return 0; - return err; + return ovl_copy_up_flags(dentry, flags); } int ovl_copy_up_with_data(struct dentry *dentry) |