man: document io-wq handling of file system managed locks The kernel side no longer fails lock requests on files with their own ->flock()/->lock() handling (NFS, FUSE, etc) with -EOPNOTSUPP, instead they are handled via the io_uring async worker pool. Update the io_uring_prep_flock and io_uring_prep_ofd_lock man pages accordingly: document the worker occupancy caveat for contended waits, replace the -EOPNOTSUPP error with -EINTR for signal-interrupted waits, and scope the "no deadlock detection" statement to generic VFS locks, as a file system may implement its own. Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/man/io_uring_prep_flock.3 b/man/io_uring_prep_flock.3 index 543f715..b5dabb8 100644 --- a/man/io_uring_prep_flock.3 +++ b/man/io_uring_prep_flock.3
@@ -71,10 +71,14 @@ or once every file descriptor referring to the open file description has been closed. .PP -Only locks managed by the generic VFS locking code are supported. If the -file resides on a file system that implements its own flock handling, such -as NFS, the request fails with -.BR -EOPNOTSUPP . +If the file resides on a file system that implements its own flock +handling, such as NFS or FUSE, the request is handled by the io_uring +async worker pool instead, as even a non-blocking attempt may have to +communicate with a lock server. Such requests behave identically, with +the caveat that each pending request occupies a worker thread for as long +as it waits for a contended lock. If the wait is interrupted by a signal, +the request completes with +.BR -EINTR . .PP Available since kernel 7.3. @@ -108,16 +112,15 @@ .B -ECANCELED The request was cancelled before the lock was acquired. .TP +.B -EINTR +The wait for a file system managed lock was interrupted by a signal. +.TP .B -EINVAL .I flock_op is not valid, or stray submission queue entry fields were set. .TP .B -ENOLCK The kernel ran out of memory for allocating lock records. -.TP -.B -EOPNOTSUPP -The file has a file system specific flock implementation, which is not -supported. .SH NOTES io_uring does not support passing in a timeout for the request. Instead, applications are encouraged to use a linked timeout to abort the lock
diff --git a/man/io_uring_prep_ofd_lock.3 b/man/io_uring_prep_ofd_lock.3 index 20ed289..23d8ec9 100644 --- a/man/io_uring_prep_ofd_lock.3 +++ b/man/io_uring_prep_ofd_lock.3
@@ -100,15 +100,21 @@ .PP As with .BR F_OFD_SETLKW , -lock acquisitions are not subject to deadlock detection, a request will -never fail with +lock acquisitions on locks managed by the generic VFS locking code are not +subject to deadlock detection, a request will never fail with .BR -EDEADLK . A request that can never be satisfied remains pending until cancelled. .PP -Only locks managed by the generic VFS locking code are supported. If the -file resides on a file system that implements its own locking, such as NFS, -the request fails with -.BR -EOPNOTSUPP . +If the file resides on a file system that implements its own locking, such +as NFS or FUSE, the request is handled by the io_uring async worker pool +instead, as even a non-blocking attempt may have to communicate with a +lock server. Such requests behave like the file system's +.BR fcntl (2) +locking does - including any deadlock detection it may implement - with +the caveat that each pending request occupies a worker thread for as long +as it waits for a contended lock. If the wait is interrupted by a signal, +the request completes with +.BR -EINTR . .PP Available since kernel 7.3. @@ -145,6 +151,9 @@ .B -ECANCELED The request was cancelled before the lock was acquired. .TP +.B -EINTR +The wait for a file system managed lock was interrupted by a signal. +.TP .B -EINVAL .I type or @@ -156,10 +165,6 @@ .B -ENOLCK The kernel ran out of memory for allocating lock records. .TP -.B -EOPNOTSUPP -The file has a file system specific lock implementation, which is not -supported. -.TP .B -EOVERFLOW .I start plus