Fix nfs4 umount to not used umount procedure
Subsystems (2)
PATCH 2/4 Fix nfs4 umount to not used umount procedure
This fix umount.nfs4's BUG, patch cleanup some useless code.
1. Combine nfs3_umount() and nfs2_umount() to nfs_umount()
2. If it is a nfs4 remote file system or unkown mount version, do not probe remote mount port and not send UMNT request wich is not necessary
mount/nfsumount.c renamed from mount/nfsumount.c.orig +12 -27
@@ -55,24 +55,11 @@extern int nfs_gethostbyname (const char *,struct sockaddr_in *);static inline enum clnt_stat -nfs3_umount (dirpath *argp,CLIENT *clnt) +nfs_umount (dirpath *argp,CLIENT *clnt) { -static char clnt_res; -memset (&clnt_res,0 ,sizeof (clnt_res));return clnt_call (clnt,MOUNTPROC_UMNT , (xdrproc_t ) xdr_dirpath, (caddr_t )argp, - (xdrproc_t ) xdr_void, (caddr_t) &clnt_res, -TIMEOUT ); -} - -static inline enum clnt_stat -nfs2_umount (dirpath *argp,CLIENT *clnt) -{ -static char clnt_res; -memset (&clnt_res,0 ,sizeof (clnt_res)); -return clnt_call (clnt,MOUNTPROC_UMNT , - (xdrproc_t ) xdr_dirpath, (caddr_t )argp, - (xdrproc_t ) xdr_void, (caddr_t) &clnt_res, + (xdrproc_t ) xdr_void,NULL ,TIMEOUT ); }
@@ -82,25 +69,25 @@enum clnt_stat res =0 ;int msock; - clnt =mnt_openclnt (mnt_server, &msock); -if (!clnt) - goto out_bad;switch (mnt_server->pmap.pm_vers) {case 3 : - res =nfs3_umount (argp, clnt); -break ;case 2 :case 1 : - res =nfs2_umount (argp, clnt); +if (!probe_mntport (mnt_server)) + goto out_bad; + clnt =mnt_openclnt (mnt_server, &msock); +if (!clnt) + goto out_bad; + res =nfs_umount (argp, clnt); +mnt_closeclnt (clnt, msock); +if (res ==RPC_SUCCESS ) +return 1 ;break ;default :break ; } -mnt_closeclnt (clnt, msock); -if (res ==RPC_SUCCESS ) -return 1 ; out_bad: -return 0 ; +return res; }u_int get_mntproto (const char *);
@@ -303,8 +290,6 @@if (!nfs_gethostbyname (hostname, &mnt_server.saddr)) goto out_bad; -if (!probe_mntport (&mnt_server)) - goto out_bad;return nfs_call_umount (&mnt_server, &dirname); out_bad:printf ("%s: %s: not found or not mounted\n" , progname, spec);
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs
Fix a BUG of this patch, if mnt_server->pmap.pm_vers is not 1,2 and 3, return 1 to do actual umount.
Quoted 6 lines
This fix umount.nfs4's BUG, patch cleanup some useless code.
1. Combine
nfs3_umount()andnfs2_umount()tonfs_umount()
2. If it is a nfs4 remote file system or unkown mount version, do not probe remote mount port and not send UMNT request wich is not necessary
mount/nfsumount.c renamed from mount/nfsumount.c.orig +13 -27
@@ -55,24 +55,11 @@extern int nfs_gethostbyname (const char *,struct sockaddr_in *);static inline enum clnt_stat -nfs3_umount (dirpath *argp,CLIENT *clnt) +nfs_umount (dirpath *argp,CLIENT *clnt) { -static char clnt_res; -memset (&clnt_res,0 ,sizeof (clnt_res));return clnt_call (clnt,MOUNTPROC_UMNT , (xdrproc_t ) xdr_dirpath, (caddr_t )argp, - (xdrproc_t ) xdr_void, (caddr_t) &clnt_res, -TIMEOUT ); -} - -static inline enum clnt_stat -nfs2_umount (dirpath *argp,CLIENT *clnt) -{ -static char clnt_res; -memset (&clnt_res,0 ,sizeof (clnt_res)); -return clnt_call (clnt,MOUNTPROC_UMNT , - (xdrproc_t ) xdr_dirpath, (caddr_t )argp, - (xdrproc_t ) xdr_void, (caddr_t) &clnt_res, + (xdrproc_t ) xdr_void,NULL ,TIMEOUT ); }
@@ -82,25 +69,26 @@enum clnt_stat res =0 ;int msock; - clnt =mnt_openclnt (mnt_server, &msock); -if (!clnt) - goto out_bad;switch (mnt_server->pmap.pm_vers) {case 3 : - res =nfs3_umount (argp, clnt); -break ;case 2 :case 1 : - res =nfs2_umount (argp, clnt); +if (!probe_mntport (mnt_server)) + goto out_bad; + clnt =mnt_openclnt (mnt_server, &msock); +if (!clnt) + goto out_bad; + res =nfs_umount (argp, clnt); +mnt_closeclnt (clnt, msock); +if (res ==RPC_SUCCESS ) +return 1 ;break ;default : + res =1 ;break ; } -mnt_closeclnt (clnt, msock); -if (res ==RPC_SUCCESS ) -return 1 ; out_bad: -return 0 ; +return res; }u_int get_mntproto (const char *);
@@ -303,8 +291,6 @@if (!nfs_gethostbyname (hostname, &mnt_server.saddr)) goto out_bad; -if (!probe_mntport (&mnt_server)) - goto out_bad;return nfs_call_umount (&mnt_server, &dirname); out_bad:printf ("%s: %s: not found or not mounted\n" , progname, spec);
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs