[PATCH 00/24] vfs: require filesystems to explicitly opt-in to lease support
Jan Kara
jack at suse.cz
Thu Jan 8 09:40:07 PST 2026
On Thu 08-01-26 12:12:55, Jeff Layton wrote:
> Yesterday, I sent patches to fix how directory delegation support is
> handled on filesystems where the should be disabled [1]. That set is
> appropriate for v6.19. For v7.0, I want to make lease support be more
> opt-in, rather than opt-out:
>
> For historical reasons, when ->setlease() file_operation is set to NULL,
> the default is to use the kernel-internal lease implementation. This
> means that if you want to disable them, you need to explicitly set the
> ->setlease() file_operation to simple_nosetlease() or the equivalent.
>
> This has caused a number of problems over the years as some filesystems
> have inadvertantly allowed leases to be acquired simply by having left
> it set to NULL. It would be better if filesystems had to opt-in to lease
> support, particularly with the advent of directory delegations.
>
> This series has sets the ->setlease() operation in a pile of existing
> local filesystems to generic_setlease() and then changes
> kernel_setlease() to return -EINVAL when the setlease() operation is not
> set.
>
> With this change, new filesystems will need to explicitly set the
> ->setlease() operations in order to provide lease and delegation
> support.
>
> I mainly focused on filesystems that are NFS exportable, since NFS and
> SMB are the main users of file leases, and they tend to end up exporting
> the same filesystem types. Let me know if I've missed any.
So, what about kernfs and fuse? They seem to be exportable and don't have
.setlease set...
Honza
>
> [1]: https://lore.kernel.org/linux-fsdevel/20260107-setlease-6-19-v1-0-85f034abcc57@kernel.org/
>
> Signed-off-by: Jeff Layton <jlayton at kernel.org>
> ---
> Jeff Layton (24):
> fs: add setlease to generic_ro_fops and read-only filesystem directory operations
> affs: add setlease file operation
> btrfs: add setlease file operation
> erofs: add setlease file operation
> ext2: add setlease file operation
> ext4: add setlease file operation
> exfat: add setlease file operation
> f2fs: add setlease file operation
> fat: add setlease file operation
> gfs2: add a setlease file operation
> jffs2: add setlease file operation
> jfs: add setlease file operation
> nilfs2: add setlease file operation
> ntfs3: add setlease file operation
> ocfs2: add setlease file operation
> orangefs: add setlease file operation
> overlayfs: add setlease file operation
> squashfs: add setlease file operation
> tmpfs: add setlease file operation
> udf: add setlease file operation
> ufs: add setlease file operation
> xfs: add setlease file operation
> filelock: default to returning -EINVAL when ->setlease operation is NULL
> fs: remove simple_nosetlease()
>
> Documentation/filesystems/porting.rst | 9 +++++++++
> Documentation/filesystems/vfs.rst | 9 ++++++---
> fs/9p/vfs_dir.c | 2 --
> fs/9p/vfs_file.c | 2 --
> fs/affs/dir.c | 2 ++
> fs/affs/file.c | 2 ++
> fs/befs/linuxvfs.c | 2 ++
> fs/btrfs/file.c | 2 ++
> fs/btrfs/inode.c | 2 ++
> fs/ceph/dir.c | 2 --
> fs/ceph/file.c | 1 -
> fs/cramfs/inode.c | 2 ++
> fs/efs/dir.c | 2 ++
> fs/erofs/data.c | 2 ++
> fs/erofs/dir.c | 2 ++
> fs/exfat/dir.c | 2 ++
> fs/exfat/file.c | 2 ++
> fs/ext2/dir.c | 2 ++
> fs/ext2/file.c | 2 ++
> fs/ext4/dir.c | 2 ++
> fs/ext4/file.c | 2 ++
> fs/f2fs/dir.c | 2 ++
> fs/f2fs/file.c | 2 ++
> fs/fat/dir.c | 2 ++
> fs/fat/file.c | 2 ++
> fs/freevxfs/vxfs_lookup.c | 2 ++
> fs/fuse/dir.c | 1 -
> fs/gfs2/file.c | 3 +--
> fs/isofs/dir.c | 2 ++
> fs/jffs2/dir.c | 2 ++
> fs/jffs2/file.c | 2 ++
> fs/jfs/file.c | 2 ++
> fs/jfs/namei.c | 2 ++
> fs/libfs.c | 20 ++------------------
> fs/locks.c | 3 +--
> fs/nfs/dir.c | 1 -
> fs/nfs/file.c | 1 -
> fs/nilfs2/dir.c | 3 ++-
> fs/nilfs2/file.c | 2 ++
> fs/ntfs3/dir.c | 3 +++
> fs/ntfs3/file.c | 3 +++
> fs/ocfs2/file.c | 5 +++++
> fs/orangefs/dir.c | 4 +++-
> fs/orangefs/file.c | 1 +
> fs/overlayfs/file.c | 2 ++
> fs/overlayfs/readdir.c | 2 ++
> fs/qnx4/dir.c | 2 ++
> fs/qnx6/dir.c | 2 ++
> fs/read_write.c | 2 ++
> fs/smb/client/cifsfs.c | 1 -
> fs/squashfs/dir.c | 2 ++
> fs/squashfs/file.c | 4 +++-
> fs/udf/dir.c | 2 ++
> fs/udf/file.c | 2 ++
> fs/ufs/dir.c | 2 ++
> fs/ufs/file.c | 2 ++
> fs/vboxsf/dir.c | 1 -
> fs/vboxsf/file.c | 1 -
> fs/xfs/xfs_file.c | 3 +++
> include/linux/fs.h | 1 -
> mm/shmem.c | 2 ++
> 61 files changed, 116 insertions(+), 42 deletions(-)
> ---
> base-commit: 731ce71a6c8adb8b8f873643beacaeedc1564500
> change-id: 20260107-setlease-6-20-299eb5695c5a
>
> Best regards,
> --
> Jeff Layton <jlayton at kernel.org>
>
--
Jan Kara <jack at suse.com>
SUSE Labs, CR
More information about the linux-mtd
mailing list