OpenCloudOS-Kernel/fs/gfs2
Bob Peterson c412a97cf6 gfs2: Use TRY lock in gfs2_inode_lookup for UNLINKED inodes
Before this patch, delete_work_func() would check for the GLF_DEMOTE
flag on the iopen glock and if set, it would perform special processing.
However, there was a race whereby the GLF_DEMOTE flag could be set by
another process after the check. Then when it called
gfs2_lookup_by_inum() which calls gfs2_inode_lookup(), it tried to lock
the iopen glock in SH mode, but the GLF_DEMOTE flag prevented the
request from being granted. But the iopen glock could never be demoted
because that happens when the inode is evicted, and the evict was never
completed because of the failed lookup.

To fix that, change function gfs2_inode_lookup() so that when
GFS2_BLKST_UNLINKED inodes are searched, it uses the LM_FLAG_TRY flag
for the iopen glock.  If the locking request fails, fail
gfs2_inode_lookup() with -EAGAIN so that delete_work_func() can retry
the operation later.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
2022-08-25 15:25:16 +02:00
..
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
acl.c vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
acl.h vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
aops.c New code for 6.0: 2022-08-11 13:11:49 -07:00
aops.h gfs2: mark stuffed_readpage static 2019-07-03 14:45:18 +02:00
bmap.c fs/buffer: Combine two submit_bh() and ll_rw_block() arguments 2022-07-14 12:14:32 -06:00
bmap.h gfs2: Clean up gfs2_unstuff_dinode 2021-06-29 10:56:51 +02:00
dentry.c gfs2: untangle the logic in gfs2_drevalidate 2019-09-03 09:42:41 +02:00
dir.c gfs2 fixes 2022-08-06 14:44:49 -07:00
dir.h gfs2: Delete an unnecessary check before brelse() 2019-09-04 20:22:17 +02:00
export.c gfs2: Minor gfs2_lookup_by_inum cleanup 2020-06-05 20:19:21 +02:00
file.c iov_iter stuff, part 2, rebased 2022-08-08 20:04:35 -07:00
gfs2.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
glock.c gfs2: Use TRY lock in gfs2_inode_lookup for UNLINKED inodes 2022-08-25 15:25:16 +02:00
glock.h gfs2: Revert 'Fix "truncate in progress" hang' 2022-06-29 16:54:59 +02:00
glops.c gfs2: Make go_instantiate take a glock 2022-06-29 16:59:07 +02:00
glops.h gfs2: Split up gfs2_meta_sync into inode and rgrp versions 2020-10-29 22:16:46 +01:00
incore.h gfs2: Make go_instantiate take a glock 2022-06-29 16:59:07 +02:00
inode.c gfs2: Use TRY lock in gfs2_inode_lookup for UNLINKED inodes 2022-08-25 15:25:16 +02:00
inode.h gfs2: Convert to release_folio 2022-05-09 23:12:33 -04:00
lock_dlm.c gfs2: Fix spelling mistake in comment 2022-06-24 01:49:50 +02:00
log.c New code for 6.0: 2022-08-11 13:11:49 -07:00
log.h fs/gfs2: Use the enum req_op and blk_opf_t types 2022-07-14 12:14:32 -06:00
lops.c Folio changes for 6.0 2022-08-03 10:35:43 -07:00
lops.h fs/gfs2: Use the enum req_op and blk_opf_t types 2022-07-14 12:14:32 -06:00
main.c gfs2 fixes 2022-08-06 14:44:49 -07:00
meta_io.c fs/gfs2: Use the enum req_op and blk_opf_t types 2022-07-14 12:14:32 -06:00
meta_io.h gfs2: Use container_of() for gfs2_glock(aspace) 2022-05-24 21:29:14 +02:00
ops_fstype.c gfs2: Revert 'Fix "truncate in progress" hang' 2022-06-29 16:54:59 +02:00
quota.c gfs2 fixes 2022-08-06 14:44:49 -07:00
quota.h gfs2: move privileged user check to gfs2_quota_lock_check 2020-05-08 18:47:58 +02:00
recovery.c gfs2: replace 'found' with dedicated list iterator variable 2022-05-14 03:05:55 +02:00
recovery.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
rgrp.c Merge part of branch 'for-next.instantiate' into for-next 2022-08-05 18:37:03 +02:00
rgrp.h Merge part of branch 'for-next.instantiate' into for-next 2022-08-05 18:37:03 +02:00
super.c gfs2: Instantiate glocks ouside of glock state engine 2022-06-29 16:53:22 +02:00
super.h gfs2: Don't release and reacquire local statfs bh 2021-08-20 09:03:46 -05:00
sys.c block: remove genhd.h 2022-02-02 07:49:59 -07:00
sys.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
trace_gfs2.h gfs2: Remove 'first' trace_gfs2_promote argument 2021-10-25 08:42:19 +02:00
trans.c gfs2: fix use-after-free in trans_drain 2021-03-07 17:04:55 +01:00
trans.h Merge branches 'rgrp-glock-sharing' and 'gfs2-revoke' from https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git 2021-02-23 18:54:22 +01:00
util.c gfs2: dump glocks from gfs2_consist_OBJ_i 2021-10-25 08:42:18 +02:00
util.h gfs2: don't stop reads while withdraw in progress 2021-08-20 09:03:46 -05:00
xattr.c gfs2: Minor gfs2_glock_nq_m cleanup 2022-06-28 20:38:15 +02:00
xattr.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00