exports: add allow_umount option for user un-mounting cached exports
Subsystems (2)
PATCH 1/1 exports: add allow_umount option for user un-mounting cached exports
After nfsd get exports cache, user cannot umounts the filesystem which base on for a reference of the vfsmnt.
This patch introduces a new option "allow_umount" for nfsd pining to the vfsmnt, not get a refernce. At all, user can umount now.
Signed-off-by Kinglong Mee <[email protected]>
--- support/include/nfs/export.h | 3 ++- support/nfs/exports.c | 6 ++++++ utils/exportfs/exports.man | 8 ++++++++ 3 files changed, 16 insertions(+), 1 deletion(-)
support/include/nfs/export.h +2 -1
@@ -26,7 +26,8 @@#define NFSEXP_CROSSMOUNT 0x4000#define NFSEXP_NOACL 0x8000/* reserved for possible ACL related use */ #define NFSEXP_V4ROOT 0x10000 -#define NFSEXP_PNFS 0x20000 +#define NFSEXP_PNFS 0x20000 +#define NFSEXP_ALLOW_UMOUNT 0x40000/* * All flags supported by the kernel before addition of the * export_features interface:
support/nfs/exports.c +6 -0
@@ -276,6 +276,8 @@ putexportent(struct exportent *ep)if (ep->e_flags &NFSEXP_NOREADDIRPLUS )fprintf (fp,"nordirplus," );fprintf (fp,"%spnfs," , (ep->e_flags &NFSEXP_PNFS )?"" :"no_" ); +if (ep->e_flags &NFSEXP_ALLOW_UMOUNT ) +fprintf (fp,"allow_umount," );if (ep->e_flags &NFSEXP_FSID ) {fprintf (fp,"fsid=%d," , ep->e_fsid); }
@@ -586,6 +588,10 @@ parseopts(char *cp, struct exportent *ep, int warn, int *had_subtree_opt_ptr)setflags (NFSEXP_PNFS , active, ep); else if (!strcmp(opt, "no_pnfs"))clearflags (NFSEXP_PNFS , active, ep); + else if (!strcmp(opt, "allow_umount")) +setflags (NFSEXP_ALLOW_UMOUNT , active, ep); + else if (!strcmp(opt, "no_allow_umount")) +clearflags (NFSEXP_ALLOW_UMOUNT , active, ep); else if (strncmp(opt, "anonuid=", 8) == 0) {char *oe; ep->e_anonuid =strtol (opt+8 , &oe,10 );
utils/exportfs/exports.man +8 -0
@@ -417,6 +417,14 @@ devices. The default can be explicitly requested with the .I no_pnfs option. +.TP +.IR allow_umount +This option allows user un-mounting the filesystem where cached nfsd exports +is based on. Otherwise, the kernel may returns -EBUSY and un-mounting fail. +The default is without the +.I allow_umount +option. + .SS User ID Mapping .PP .B nfsd
Signature · 1 line
2.4.1
Please ignore this patch. Sorry for the noise.
thanks,
Kinglong Mee
Quoted 71 lines · Kinglong Mee
After nfsd get exports cache, user cannot umounts the filesystem which base on for a reference of the vfsmnt.
This patch introduces a new option "
allow_umount" for nfsd pining to the vfsmnt, not get a refernce. At all, user can umount now.Signed-off-by Kinglong Mee <[email protected]>--- support/include/nfs/export.h | 3 ++- support/nfs/exports.c | 6 ++++++ utils/exportfs/exports.man | 8 ++++++++ 3 files changed, 16 insertions(+), 1 deletion(-)support/include/nfs/export.h +2
-1@@ -26,7 +26,8 @@#define NFSEXP_CROSSMOUNT 0x4000#define NFSEXP_NOACL 0x8000/* reserved for possible ACL related use */ #define NFSEXP_V4ROOT 0x10000 -#define NFSEXP_PNFS 0x20000 +#define NFSEXP_PNFS 0x20000 +#define NFSEXP_ALLOW_UMOUNT 0x40000/* * All flags supported by the kernel before addition of the * export_features interface: support/nfs/exports.c +6
-0@@ -276,6 +276,8 @@ putexportent(struct exportent *ep)if (ep->e_flags &NFSEXP_NOREADDIRPLUS )fprintf (fp,"nordirplus," );fprintf (fp,"%spnfs," , (ep->e_flags &NFSEXP_PNFS )?"" :"no_" ); +if (ep->e_flags &NFSEXP_ALLOW_UMOUNT ) +fprintf (fp,"allow_umount," );if (ep->e_flags &NFSEXP_FSID ) {fprintf (fp,"fsid=%d," , ep->e_fsid); }@@ -586,6 +588,10 @@ parseopts(char *cp, struct exportent *ep, int warn, int *had_subtree_opt_ptr)setflags (NFSEXP_PNFS , active, ep); else if (!strcmp(opt, "no_pnfs"))clearflags (NFSEXP_PNFS , active, ep); + else if (!strcmp(opt, "allow_umount")) +setflags (NFSEXP_ALLOW_UMOUNT , active, ep); + else if (!strcmp(opt, "no_allow_umount")) +clearflags (NFSEXP_ALLOW_UMOUNT , active, ep); else if (strncmp(opt, "anonuid=", 8) == 0) {char *oe; ep->e_anonuid =strtol (opt+8 , &oe,10 );utils/exportfs/exports.man +8
-0@@ -417,6 +417,14 @@ devices. The default can be explicitly requested with the .I no_pnfs option. +.TP +.IR allow_umount +This option allows user un-mounting the filesystem where cached nfsd exports +is based on. Otherwise, the kernel may returns -EBUSY and un-mounting fail. +The default is without the +.I allow_umount +option. + .SS User ID Mapping .PP .B nfsd