mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
fs: simplify check in mount_setattr_commit()
In order to determine whether we need to call mnt_unhold_writers() in mount_setattr_commit() we currently do not just check whether MNT_WRITE_HOLD is set but also if a read-only mount was requested. However, checking whether MNT_WRITE_HOLD is set is enough. Setting MNT_WRITE_HOLD requires lock_mount_hash() to be held and it must be unset before calling unlock_mount_hash(). This guarantees that if we see MNT_WRITE_HOLD we know that we were the ones who set it earlier. We don't need to care about why we set it. Plus, leaving this additional read-only check in makes the code more confusing because it implies that MNT_WRITE_HOLD could've been set by another thread when it really can't. Remove it and update the associated comment. Link: https://lore.kernel.org/r/20220203131411.3093040-6-brauner@kernel.org Cc: Seth Forshee <seth.forshee@digitalocean.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: linux-fsdevel@vger.kernel.org Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
a26f788b6e
commit
03b6abee9b
@ -4096,13 +4096,8 @@ static void mount_setattr_commit(struct mount_kattr *kattr,
|
||||
WRITE_ONCE(m->mnt.mnt_flags, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* We either set MNT_READONLY above so make it visible
|
||||
* before ~MNT_WRITE_HOLD or we failed to recursively
|
||||
* apply mount options.
|
||||
*/
|
||||
if ((kattr->attr_set & MNT_READONLY) &&
|
||||
(m->mnt.mnt_flags & MNT_WRITE_HOLD))
|
||||
/* If we had to hold writers unblock them. */
|
||||
if (m->mnt.mnt_flags & MNT_WRITE_HOLD)
|
||||
mnt_unhold_writers(m);
|
||||
|
||||
if (!err && kattr->propagation)
|
||||
|
Loading…
Reference in New Issue
Block a user