]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
filelock: default to returning -EINVAL when ->setlease operation is NULL
authorJeff Layton <jlayton@kernel.org>
Thu, 8 Jan 2026 17:13:18 +0000 (12:13 -0500)
committerChristian Brauner <brauner@kernel.org>
Mon, 12 Jan 2026 09:55:48 +0000 (10:55 +0100)
Now that most filesystems where we expect to need lease support have
their ->setlease() operations explicitly set, change kernel_setlease()
to return -EINVAL when the setlease is a NULL pointer.

Also update the Documentation/ with info about this change.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Link: https://patch.msgid.link/20260108-setlease-6-20-v1-23-ea4dec9b67fa@kernel.org
Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Documentation/filesystems/porting.rst
Documentation/filesystems/vfs.rst
fs/locks.c

index 3397937ed838e5e7dfacc6379a9d71481cc30914..c0f7103628ab5ed70d142a5c7f6d95ca4734c741 100644 (file)
@@ -1334,3 +1334,12 @@ end_creating() and the parent will be unlocked precisely when necessary.
 
 kill_litter_super() is gone; convert to DCACHE_PERSISTENT use (as all
 in-tree filesystems have done).
+
+---
+
+**mandatory**
+
+The ->setlease() file_operation must now be explicitly set in order to provide
+support for leases. When set to NULL, the kernel will now return -EINVAL to
+attempts to set a lease. Filesystems that wish to use the kernel-internal lease
+implementation should set it to generic_setlease().
index 670ba66b60e4964927164a57e68adc0edfc681ee..21dc8921dd9ebedeafc4c108de7327f172138b6e 100644 (file)
@@ -1180,9 +1180,12 @@ otherwise noted.
        method is used by the splice(2) system call
 
 ``setlease``
-       called by the VFS to set or release a file lock lease.  setlease
-       implementations should call generic_setlease to record or remove
-       the lease in the inode after setting it.
+       called by the VFS to set or release a file lock lease.  Local
+       filesystems that wish to use the kernel-internal lease implementation
+       should set this to generic_setlease(). Other setlease implementations
+       should call generic_setlease() to record or remove the lease in the inode
+       after setting it. When set to NULL, attempts to set or remove a lease will
+       return -EINVAL.
 
 ``fallocate``
        called by the VFS to preallocate blocks or punch a hole.
index 7ea949d7ff451546c948855a63210abb38a04133..cf1968b01bcb363a149f7dcdb01bad1aa3181f04 100644 (file)
@@ -2019,8 +2019,7 @@ kernel_setlease(struct file *filp, int arg, struct file_lease **lease, void **pr
                setlease_notifier(arg, *lease);
        if (filp->f_op->setlease)
                return filp->f_op->setlease(filp, arg, lease, priv);
-       else
-               return generic_setlease(filp, arg, lease, priv);
+       return -EINVAL;
 }
 EXPORT_SYMBOL_GPL(kernel_setlease);