Re: [PATCH] mount.nfs: background mount now do directly into background

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mar 8, 2014, at 8:22, Steve Dickson <SteveD@xxxxxxxxxx> wrote:

> Modern day kernel will no longer return all timeout
> errors instead the process spins endlessly in the kernel.
> This behavior will cause the foreground mount to hang, never
> allowing the mount to go into background.
> 
> So this patch eliminates the foreground mount cause
> background mounts to go directly into background
> 
> Signed-off-by: Steve Dickson <steved@xxxxxxxxxx>
> ---
> utils/mount/stropts.c |   31 ++++++++-----------------------
> 1 files changed, 8 insertions(+), 23 deletions(-)
> 
> diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
> index a642394..92a7245 100644
> --- a/utils/mount/stropts.c
> +++ b/utils/mount/stropts.c
> @@ -913,28 +913,6 @@ static int nfsmount_fg(struct nfsmount_info *mi)
> }
> 
> /*
> - * Handle "background" NFS mount [first try]
> - *
> - * Returns a valid mount command exit code.
> - *
> - * EX_BG should cause the caller to fork and invoke nfsmount_child.
> - */
> -static int nfsmount_parent(struct nfsmount_info *mi)
> -{
> -	if (nfs_try_mount(mi))
> -		return EX_SUCCESS;
> -
> -	/* retry background mounts when the server is not up */
> -	if (nfs_is_permanent_error(errno) && errno != EOPNOTSUPP) {
> -		mount_error(mi->spec, mi->node, errno);
> -		return EX_FAIL;
> -	}
> -
> -	sys_mount_errors(mi->hostname, errno, 1, 1);
> -	return EX_BG;
> -}
> -
> -/*
>  * Handle "background" NFS mount [retry daemon]
>  *
>  * Returns a valid mount command exit code: EX_SUCCESS if successful,
> @@ -982,7 +960,14 @@ static int nfsmount_child(struct nfsmount_info *mi)
> static int nfsmount_bg(struct nfsmount_info *mi)
> {
> 	if (!mi->child)
> -		return nfsmount_parent(mi);
> +		/* 
> +		 * Modern day kernels no longer return all 
> +		 * timeouts errors in all cases, instead 
> +		 * the process spins in the kernel, which 
> +		 * will hang a foreground mount. So background
> +		 * mounts have to go directly into background
> +		 */
> +		return EX_BG;
> 	else
> 		return nfsmount_child(mi);
> }

Hi Steve,

Doesn’t this mean that ‘mount.nfs’ will no longer attempt to wait for the mount to complete? That’s why I suggested having the parent set a timer, and then waiting for whichever comes first out of SIGCHLD or SIGALRM (indicating either that the child mount process is done mounting or that the timeout occurred).

Cheers
  Trond
_________________________________
Trond Myklebust
Linux NFS client maintainer, PrimaryData
trond.myklebust@xxxxxxxxxxxxxxx

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux