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

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

 



On Sat,  8 Mar 2014 08:22:44 -0500 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>

Did NFS mounts *ever* time out (when 'soft' isn't given)?

If so, there is probably a regression which maybe should be fixed.

If not, then this has always been a bug since sting-options were introduced
and the kernel started doing the mountd filehandle lookup...

So I'm probably OK with the patch but I wonder if there is more of a story
behind this that we should be sure we understand...

Thanks,
NeilBrown


> ---
>  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);
>  }

Attachment: signature.asc
Description: PGP signature


[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