At one time, nfsd could take the presence of struct export_operations to be an indicator that a filesystem was exportable via NFS. Since then, a lot of filesystems have grown export operations in order to provide filehandle support. Some of those (e.g. kernfs, pidfs, and nsfs) are not suitable for export via NFS since they lack filehandles that are stable across reboot. Add a new EXPORT_OP_STABLE_HANDLES flag that indicates that the filesystem supports perisistent filehandles, a requirement for nfs export. While in there, switch to the BIT() macro for defining these flags. For now, the flag is not checked anywhere. That will come later after we've added it to the existing filesystems that need to remain exportable. Signed-off-by: Jeff Layton --- include/linux/exportfs.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h index f0cf2714ec52dd942b8f1c455a25702bd7e412b3..159b679ef176dc710e9d0107ff9315534c44f715 100644 --- a/include/linux/exportfs.h +++ b/include/linux/exportfs.h @@ -3,6 +3,7 @@ #define LINUX_EXPORTFS_H 1 #include +#include #include struct dentry; @@ -277,15 +278,16 @@ struct export_operations { int nr_iomaps, struct iattr *iattr); int (*permission)(struct handle_to_path_ctx *ctx, unsigned int oflags); struct file * (*open)(const struct path *path, unsigned int oflags); -#define EXPORT_OP_NOWCC (0x1) /* don't collect v3 wcc data */ -#define EXPORT_OP_NOSUBTREECHK (0x2) /* no subtree checking */ -#define EXPORT_OP_CLOSE_BEFORE_UNLINK (0x4) /* close files before unlink */ -#define EXPORT_OP_REMOTE_FS (0x8) /* Filesystem is remote */ -#define EXPORT_OP_NOATOMIC_ATTR (0x10) /* Filesystem cannot supply +#define EXPORT_OP_NOWCC BIT(0) /* don't collect v3 wcc data */ +#define EXPORT_OP_NOSUBTREECHK BIT(1) /* no subtree checking */ +#define EXPORT_OP_CLOSE_BEFORE_UNLINK BIT(2) /* close files before unlink */ +#define EXPORT_OP_REMOTE_FS BIT(3) /* Filesystem is remote */ +#define EXPORT_OP_NOATOMIC_ATTR BIT(4) /* Filesystem cannot supply atomic attribute updates */ -#define EXPORT_OP_FLUSH_ON_CLOSE (0x20) /* fs flushes file data on close */ -#define EXPORT_OP_NOLOCKS (0x40) /* no file locking support */ +#define EXPORT_OP_FLUSH_ON_CLOSE BIT(5) /* fs flushes file data on close */ +#define EXPORT_OP_NOLOCKS BIT(6) /* no file locking support */ +#define EXPORT_OP_STABLE_HANDLES BIT(7) /* required for nfsd export */ unsigned long flags; }; -- 2.52.0