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