On 13/02/17(Mon) 12:21, Martin Pieuchot wrote:
> Network processing is not longer done in soft-interrupt context. That
> means that processes doing syscalls no longer need to raise the IPL
> level to guarantee consistency, the KERNEL_LOCK() is enough.
>
> Diff below kills two unnecessary splsoftnet()/splx(), ok?
Anyone?
> Index: nfs/nfs_syscalls.c
> ===================================================================
> RCS file: /cvs/src/sys/nfs/nfs_syscalls.c,v
> retrieving revision 1.106
> diff -u -p -r1.106 nfs_syscalls.c
> --- nfs/nfs_syscalls.c 15 Sep 2016 02:00:18 -0000 1.106
> +++ nfs/nfs_syscalls.c 13 Feb 2017 11:15:49 -0000
> @@ -221,7 +221,7 @@ nfssvc_addsock(struct file *fp, struct m
> struct nfssvc_sock *slp;
> struct socket *so;
> struct nfssvc_sock *tslp;
> - int error, s;
> + int error;
>
> so = (struct socket *)fp->f_data;
> tslp = NULL;
> @@ -278,12 +278,10 @@ nfssvc_addsock(struct file *fp, struct m
> slp->ns_nam = mynam;
> fp->f_count++;
> slp->ns_fp = fp;
> - s = splsoftnet();
> so->so_upcallarg = (caddr_t)slp;
> so->so_upcall = nfsrv_rcv;
> slp->ns_flag = (SLP_VALID | SLP_NEEDQ);
> nfsrv_wakenfsd(slp);
> - splx(s);
> return (0);
> }
>
> Index: nfs/nfs_vfsops.c
> ===================================================================
> RCS file: /cvs/src/sys/nfs/nfs_vfsops.c,v
> retrieving revision 1.112
> diff -u -p -r1.112 nfs_vfsops.c
> --- nfs/nfs_vfsops.c 15 Nov 2016 13:46:54 -0000 1.112
> +++ nfs/nfs_vfsops.c 13 Feb 2017 11:17:52 -0000
> @@ -74,6 +74,8 @@ extern u_int32_t nfs_procids[NFS_NPROCS]
> int nfs_sysctl(int *, u_int, void *, size_t *, void *, size_t,
> struct proc *);
> int nfs_checkexp(struct mount *, struct mbuf *, int *, struct ucred
> **);
> struct mount *nfs_mount_diskless(struct nfs_dlmount *, char *, int);
> +void nfs_decode_args(struct nfsmount *, struct nfs_args *,
> + struct nfs_args *);
>
> /*
> * nfs vfs operations.
> @@ -389,12 +391,9 @@ void
> nfs_decode_args(struct nfsmount *nmp, struct nfs_args *argp,
> struct nfs_args *nargp)
> {
> - int s;
> int adjsock = 0;
> int maxio;
>
> - s = splsoftnet();
> -
> #if 0
> /* Re-bind if rsrvd port requested and wasn't on one */
> adjsock = !(nmp->nm_flag & NFSMNT_RESVPORT)
> @@ -407,7 +406,6 @@ nfs_decode_args(struct nfsmount *nmp, st
> /* Update flags atomically. Don't change the lock bits. */
> nmp->nm_flag =
> (argp->flags & ~NFSMNT_INTERNAL) | (nmp->nm_flag & NFSMNT_INTERNAL);
> - splx(s);
>
> if ((argp->flags & NFSMNT_TIMEO) && argp->timeo > 0) {
> nmp->nm_timeo = (argp->timeo * NFS_HZ + 5) / 10;
> Index: nfs/nfsmount.h
> ===================================================================
> RCS file: /cvs/src/sys/nfs/nfsmount.h,v
> retrieving revision 1.26
> diff -u -p -r1.26 nfsmount.h
> --- nfs/nfsmount.h 27 Sep 2016 01:37:38 -0000 1.26
> +++ nfs/nfsmount.h 13 Feb 2017 11:17:02 -0000
> @@ -89,8 +89,6 @@ int nfs_mount(struct mount *, const char
> int mountnfs(struct nfs_args *, struct mount *, struct mbuf *,
> const char *, char *);
> int nfs_mountroot(void);
> -void nfs_decode_args(struct nfsmount *, struct nfs_args *,
> - struct nfs_args *);
> int nfs_start(struct mount *, int, struct proc *);
> int nfs_unmount(struct mount *, int, struct proc *);
> int nfs_root(struct mount *, struct vnode **);
>