Date: Sun, 13 Apr 2014 22:16:18 +0000 (UTC) From: Devin Teske <dteske@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r264426 - stable/8/sys/netsmb Message-ID: <201404132216.s3DMGIti069601@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dteske Date: Sun Apr 13 22:16:18 2014 New Revision: 264426 URL: http://svnweb.freebsd.org/changeset/base/264426 Log: MFC r250243: If the kernel is compiled with VMIMAGE support, the first attempt of mounting smbfs share will cause a panic. Fix setting/restoring vnet context when needed. PR: kern/168077 Submitted by: dteske Modified: stable/8/sys/netsmb/smb_trantcp.c Directory Properties: stable/8/ (props changed) stable/8/sys/ (props changed) stable/8/sys/netsmb/ (props changed) Modified: stable/8/sys/netsmb/smb_trantcp.c ============================================================================== --- stable/8/sys/netsmb/smb_trantcp.c Sun Apr 13 22:00:50 2014 (r264425) +++ stable/8/sys/netsmb/smb_trantcp.c Sun Apr 13 22:16:18 2014 (r264426) @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/route.h> +#include <net/vnet.h> #include <netinet/in.h> #include <netinet/tcp.h> @@ -85,13 +86,17 @@ static int nb_setsockopt_int(struct socket *so, int level, int name, int val) { struct sockopt sopt; + int error; bzero(&sopt, sizeof(sopt)); sopt.sopt_level = level; sopt.sopt_name = name; sopt.sopt_val = &val; sopt.sopt_valsize = sizeof(val); - return sosetopt(so, &sopt); + CURVNET_SET(so->so_vnet); + error = sosetopt(so, &sopt); + CURVNET_RESTORE(); + return error; } static int @@ -292,8 +297,10 @@ nbssn_recvhdr(struct nbpcb *nbp, int *le auio.uio_offset = 0; auio.uio_resid = sizeof(len); auio.uio_td = td; + CURVNET_SET(so->so_vnet); error = soreceive(so, (struct sockaddr **)NULL, &auio, (struct mbuf **)NULL, (struct mbuf **)NULL, &flags); + CURVNET_RESTORE(); if (error) return error; if (auio.uio_resid > 0) { @@ -377,8 +384,10 @@ nbssn_recv(struct nbpcb *nbp, struct mbu */ do { rcvflg = MSG_WAITALL; + CURVNET_SET(so->so_vnet); error = soreceive(so, (struct sockaddr **)NULL, &auio, &tm, (struct mbuf **)NULL, &rcvflg); + CURVNET_RESTORE(); } while (error == EWOULDBLOCK || error == EINTR || error == ERESTART); if (error)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201404132216.s3DMGIti069601>