]> git.baikalelectronics.ru Git - kernel.git/commit
fs: unset MNT_WRITE_HOLD on failure
authorChristian Brauner <brauner@kernel.org>
Wed, 20 Apr 2022 13:19:25 +0000 (15:19 +0200)
committerChristian Brauner (Microsoft) <brauner@kernel.org>
Thu, 21 Apr 2022 15:57:37 +0000 (17:57 +0200)
commit942dcf19051af3a9fae9669c3e9abf500f50179a
treebf07760ffe166cfeaacbbd45281f51242af3d796
parent0e63df2d0d54b39e7363398ea63d214be3dfe228
fs: unset MNT_WRITE_HOLD on failure

After mnt_hold_writers() has been called we will always have set MNT_WRITE_HOLD
and consequently we always need to pair mnt_hold_writers() with
mnt_unhold_writers(). After the recent cleanup in [1] where Al switched from a
do-while to a for loop the cleanup currently fails to unset MNT_WRITE_HOLD for
the first mount that was changed. Fix this and make sure that the first mount
will be cleaned up and add some comments to make it more obvious.

Link: https://lore.kernel.org/lkml/0000000000007cc21d05dd0432b8@google.com
Link: https://lore.kernel.org/lkml/00000000000080e10e05dd043247@google.com
Link: https://lore.kernel.org/r/20220420131925.2464685-1-brauner@kernel.org
Fixes: 1f29f2ca7c71 ("mount_setattr(): clean the control flow and calling conventions") [1]
Cc: Hillf Danton <hdanton@sina.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Reported-by: syzbot+10a16d1c43580983f6a2@syzkaller.appspotmail.com
Reported-by: syzbot+306090cfa3294f0bbfb3@syzkaller.appspotmail.com
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
fs/namespace.c