gfs2: use i_lock spin_lock for inode qadata
authorBob Peterson <rpeterso@redhat.com>
Fri, 11 Feb 2022 15:50:08 +0000 (10:50 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jun 2022 08:22:40 +0000 (10:22 +0200)
commitb897da780fd4ffa112ad191b73bf14b01f4479b4
treeb5b86ddcb8f25a4e92b24f147fce965b5782d271
parentda6b6b4eab55853096134872592764dc88c4261a
gfs2: use i_lock spin_lock for inode qadata

[ Upstream commit 5fcff61eea9efd1f4b60e89d2d686b5feaea100f ]

Before this patch, functions gfs2_qa_get and _put used the i_rw_mutex to
prevent simultaneous access to its i_qadata. But i_rw_mutex is now used
for many other things, including iomap_begin and end, which causes a
conflict according to lockdep. We cannot just remove the lock since
simultaneous opens (gfs2_open -> gfs2_open_common -> gfs2_qa_get) can
then stomp on each others values for i_qadata.

This patch solves the conflict by using the i_lock spin_lock in the inode
to prevent simultaneous access.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/gfs2/quota.c