nfs_nfsdserv.c (216693) | nfs_nfsdserv.c (216700) |
---|---|
1/*- 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 18 unchanged lines hidden (view full) --- 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * 32 */ 33 34#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 18 unchanged lines hidden (view full) --- 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: head/sys/fs/nfsserver/nfs_nfsdserv.c 216693 2010-12-24 21:31:18Z rmacklem $"); | 35__FBSDID("$FreeBSD: head/sys/fs/nfsserver/nfs_nfsdserv.c 216700 2010-12-25 21:56:25Z rmacklem $"); |
36 37/* 38 * nfs version 2, 3 and 4 server calls to vnode ops 39 * - these routines generally have 3 phases 40 * 1 - break down and validate rpc request in mbuf list 41 * 2 - do the vnode ops for the request, usually by calling a nfsvno_XXX() 42 * function in nfsd_port.c 43 * 3 - build the rpc reply in an mbuf list --- 1343 unchanged lines hidden (view full) --- 1387 vput(dp); 1388 /* todp is always NULL except NFSv4 */ 1389 nfsvno_relpathbuf(&fromnd); 1390 return (error); 1391 } 1392 nd->nd_cred->cr_uid = nd->nd_saveduid; 1393 /* Won't lock vfs if already locked, mp == NULL */ 1394 tnes.nes_vfslocked = exp->nes_vfslocked; | 36 37/* 38 * nfs version 2, 3 and 4 server calls to vnode ops 39 * - these routines generally have 3 phases 40 * 1 - break down and validate rpc request in mbuf list 41 * 2 - do the vnode ops for the request, usually by calling a nfsvno_XXX() 42 * function in nfsd_port.c 43 * 3 - build the rpc reply in an mbuf list --- 1343 unchanged lines hidden (view full) --- 1387 vput(dp); 1388 /* todp is always NULL except NFSv4 */ 1389 nfsvno_relpathbuf(&fromnd); 1390 return (error); 1391 } 1392 nd->nd_cred->cr_uid = nd->nd_saveduid; 1393 /* Won't lock vfs if already locked, mp == NULL */ 1394 tnes.nes_vfslocked = exp->nes_vfslocked; |
1395 nfsd_fhtovp(nd, &tfh, &tdp, &tnes, &mp, 0, p); | 1395 nfsd_fhtovp(nd, &tfh, LK_EXCLUSIVE, &tdp, &tnes, &mp, 0, p); |
1396 if (tdp) { 1397 tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd->nd_cred, 1398 p, 1); 1399 NFSVOPUNLOCK(tdp, 0, p); 1400 } 1401 } 1402 NFSNAMEICNDSET(&tond.ni_cnd, nd->nd_cred, RENAME, LOCKPARENT | LOCKLEAF | NOCACHE | SAVESTART); 1403 nfsvno_setpathbuf(&tond, &tbufp, &hashp); --- 137 unchanged lines hidden (view full) --- 1541 error = nfsrv_mtofh(nd, &dfh); 1542 if (error) { 1543 vrele(vp); 1544 /* tovp is always NULL unless NFSv4 */ 1545 return (error); 1546 } 1547 /* Won't lock vfs if already locked, mp == NULL */ 1548 tnes.nes_vfslocked = exp->nes_vfslocked; | 1396 if (tdp) { 1397 tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd->nd_cred, 1398 p, 1); 1399 NFSVOPUNLOCK(tdp, 0, p); 1400 } 1401 } 1402 NFSNAMEICNDSET(&tond.ni_cnd, nd->nd_cred, RENAME, LOCKPARENT | LOCKLEAF | NOCACHE | SAVESTART); 1403 nfsvno_setpathbuf(&tond, &tbufp, &hashp); --- 137 unchanged lines hidden (view full) --- 1541 error = nfsrv_mtofh(nd, &dfh); 1542 if (error) { 1543 vrele(vp); 1544 /* tovp is always NULL unless NFSv4 */ 1545 return (error); 1546 } 1547 /* Won't lock vfs if already locked, mp == NULL */ 1548 tnes.nes_vfslocked = exp->nes_vfslocked; |
1549 nfsd_fhtovp(nd, &dfh, &dp, &tnes, &mp, 0, p); | 1549 nfsd_fhtovp(nd, &dfh, LK_EXCLUSIVE, &dp, &tnes, &mp, 0, 1550 p); |
1550 if (dp) 1551 NFSVOPUNLOCK(dp, 0, p); 1552 } 1553 } 1554 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, 1555 LOCKPARENT | SAVENAME); 1556 if (!nd->nd_repstat) { 1557 nfsvno_setpathbuf(&named, &bufp, &hashp); --- 1578 unchanged lines hidden (view full) --- 3136 fh.nfsrvfh_len = NFSX_MYFH; 3137 vp = named.ni_vp; 3138 nd->nd_repstat = nfsvno_getfh(vp, (fhandle_t *)fh.nfsrvfh_data, p); 3139 mp = vnode_mount(vp); /* so it won't try to re-lock filesys */ 3140 retnes.nes_vfslocked = exp->nes_vfslocked; 3141 vput(vp); 3142 savflag = nd->nd_flag; 3143 if (!nd->nd_repstat) { | 1551 if (dp) 1552 NFSVOPUNLOCK(dp, 0, p); 1553 } 1554 } 1555 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, 1556 LOCKPARENT | SAVENAME); 1557 if (!nd->nd_repstat) { 1558 nfsvno_setpathbuf(&named, &bufp, &hashp); --- 1578 unchanged lines hidden (view full) --- 3137 fh.nfsrvfh_len = NFSX_MYFH; 3138 vp = named.ni_vp; 3139 nd->nd_repstat = nfsvno_getfh(vp, (fhandle_t *)fh.nfsrvfh_data, p); 3140 mp = vnode_mount(vp); /* so it won't try to re-lock filesys */ 3141 retnes.nes_vfslocked = exp->nes_vfslocked; 3142 vput(vp); 3143 savflag = nd->nd_flag; 3144 if (!nd->nd_repstat) { |
3144 nfsd_fhtovp(nd, &fh, &vp, &retnes, &mp, 0, p); | 3145 nfsd_fhtovp(nd, &fh, LK_SHARED, &vp, &retnes, &mp, 0, p); |
3145 if (vp) 3146 vput(vp); 3147 } 3148 nd->nd_flag = savflag; 3149 if (nd->nd_repstat) 3150 return (0); 3151 3152 /* --- 292 unchanged lines hidden --- | 3146 if (vp) 3147 vput(vp); 3148 } 3149 nd->nd_flag = savflag; 3150 if (nd->nd_repstat) 3151 return (0); 3152 3153 /* --- 292 unchanged lines hidden --- |