linux/fs/gfs2
Christian Brauner 09ee2a670d
Merge patch series "Fixup NLM and kNFSD file lock callbacks"
Benjamin Coddington <bcodding@redhat.com> says:

Last year both GFS2 and OCFS2 had some work done to make their locking more
robust when exported over NFS.  Unfortunately, part of that work caused both
NLM (for NFS v3 exports) and kNFSD (for NFSv4.1+ exports) to no longer send
lock notifications to clients.

This in itself is not a huge problem because most NFS clients will still
poll the server in order to acquire a conflicted lock, but now that I've
noticed it I can't help but try to fix it because there are big advantages
for setups that might depend on timely lock notifications, and we've
supported that as a feature for a long time.

Its important for NLM and kNFSD that they do not block their kernel threads
inside filesystem's file_lock implementations because that can produce
deadlocks.  We used to make sure of this by only trusting that
posix_lock_file() can correctly handle blocking lock calls asynchronously,
so the lock managers would only setup their file_lock requests for async
callbacks if the filesystem did not define its own lock() file operation.

However, when GFS2 and OCFS2 grew the capability to correctly
handle blocking lock requests asynchronously, they started signalling this
behavior with EXPORT_OP_ASYNC_LOCK, and the check for also trusting
posix_lock_file() was inadvertently dropped, so now most filesystems no
longer produce lock notifications when exported over NFS.

I tried to fix this by simply including the old check for lock(), but the
resulting include mess and layering violations was more than I could accept.
There's a much cleaner way presented here using an fop_flag, which while
potentially flag-greedy, greatly simplifies the problem and grooms the
way for future uses by both filesystems and lock managers alike.

* patches from https://lore.kernel.org/r/cover.1726083391.git.bcodding@redhat.com:
  exportfs: Remove EXPORT_OP_ASYNC_LOCK
  NLM/NFSD: Fix lock notifications for async-capable filesystems
  gfs2/ocfs2: set FOP_ASYNC_LOCK
  fs: Introduce FOP_ASYNC_LOCK
  NFS: trace: show TIMEDOUT instead of 0x6e
  nfsd: use system_unbound_wq for nfsd_file_gc_worker()
  nfsd: count nfsd_file allocations
  nfsd: fix refcount leak when file is unhashed after being found
  nfsd: remove unneeded EEXIST error check in nfsd_do_file_acquire
  nfsd: add list_head nf_gc to struct nfsd_file

Link: https://lore.kernel.org/r/cover.1726083391.git.bcodding@redhat.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
2024-10-02 07:52:07 +02:00
..
acl.c gfs2: convert to ctime accessor functions 2023-07-24 10:29:59 +02:00
acl.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
aops.c gfs2: Remove gfs2_jdata_writepage() 2024-09-02 14:46:33 +02:00
aops.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
bmap.c gfs2 updates 2024-05-14 17:35:22 -07:00
bmap.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
dentry.c Revert "gfs2: Use GL_NOBLOCK flag for non-blocking lookups" 2024-02-02 17:21:44 +01:00
dir.c gfs2: Improve gfs2_consist_inode() usage 2024-04-09 18:35:57 +02:00
dir.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
export.c exportfs: Remove EXPORT_OP_ASYNC_LOCK 2024-10-01 17:01:08 +02:00
file.c Merge patch series "Fixup NLM and kNFSD file lock callbacks" 2024-10-02 07:52:07 +02:00
gfs2.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
glock.c gfs2: fix double destroy_workqueue error 2024-08-20 16:27:22 +02:00
glock.h gfs2: Revise glock reference counting model 2024-05-29 15:34:55 +02:00
glops.c gfs2: Get rid of demote_ok checks 2024-05-29 15:34:55 +02:00
glops.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
incore.h gfs2: Get rid of some unnecessary quota locking 2024-06-20 16:38:13 +02:00
inode.c Revert "gfs2: Use GL_NOBLOCK flag for non-blocking lookups" 2024-02-02 17:21:44 +01:00
inode.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
Kconfig fs: add CONFIG_BUFFER_HEAD 2023-08-02 09:13:09 -06:00
lock_dlm.c gfs2: Invert the GLF_INITIAL flag 2024-05-29 15:34:55 +02:00
log.c gfs2: Remove __gfs2_writepage() 2024-09-02 14:46:29 +02:00
log.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
lops.c gfs2: Remove use of error flag in journal reads 2023-12-20 21:29:41 +01:00
lops.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
main.c mm, slab: remove last vestiges of SLAB_MEM_SPREAD 2024-03-12 20:32:19 -07:00
Makefile
meta_io.c gfs2: Remove gfs2_aspace_writepage() 2024-09-02 14:46:37 +02:00
meta_io.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
ops_fstype.c gfs2: fix double destroy_workqueue error 2024-08-20 16:27:22 +02:00
quota.c gfs2: Revert "check for no eligible quota changes" 2024-06-20 16:38:15 +02:00
quota.h gfs2 fixes 2023-11-07 11:54:17 -08:00
recovery.c gfs2: Rename gfs2_withdrawn to gfs2_withdrawing_or_withdrawn 2023-12-20 21:29:40 +01:00
recovery.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
rgrp.c gfs2: Get rid of newlines in log messages 2024-04-09 18:35:57 +02:00
rgrp.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
super.c gfs2: Revise glock reference counting model 2024-05-29 15:34:55 +02:00
super.h gfs2 fixes 2023-11-07 11:54:17 -08:00
sys.c gfs2: Use [NO_]CREATE consistently for gfs2_glock_get 2024-04-09 18:35:57 +02:00
sys.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
trace_gfs2.h gfs2: Invert the GLF_INITIAL flag 2024-05-29 15:34:55 +02:00
trans.c gfs2: Rename gfs2_withdrawn to gfs2_withdrawing_or_withdrawn 2023-12-20 21:29:40 +01:00
trans.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00
util.c gfs2: Revert "Add quota_change type" 2024-06-08 02:35:09 +02:00
util.h gfs2: gfs2_freeze_unlock cleanup 2024-04-29 12:35:15 +02:00
xattr.c gfs2: Improve gfs2_consist_inode() usage 2024-04-09 18:35:57 +02:00
xattr.h gfs2: No longer use 'extern' in function declarations 2023-11-06 01:51:26 +01:00