projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make ffs_subr.c work with fsck(8) again
[unix-history]
/
usr
/
src
/
sys
/
nfs
/
nfs_node.c
diff --git
a/usr/src/sys/nfs/nfs_node.c
b/usr/src/sys/nfs/nfs_node.c
index
42275d6
..
6ac9e0c
100644
(file)
--- a/
usr/src/sys/nfs/nfs_node.c
+++ b/
usr/src/sys/nfs/nfs_node.c
@@
-7,22
+7,22
@@
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)nfs_node.c 7.
29
(Berkeley) %G%
+ * @(#)nfs_node.c 7.
34
(Berkeley) %G%
*/
#include "param.h"
#include "systm.h"
*/
#include "param.h"
#include "systm.h"
-#include "user.h"
#include "proc.h"
#include "mount.h"
#include "proc.h"
#include "mount.h"
+#include "namei.h"
#include "vnode.h"
#include "vnode.h"
-#include "errno.h"
+#include "kernel.h"
+#include "malloc.h"
+
#include "nfsv2.h"
#include "nfs.h"
#include "nfsnode.h"
#include "nfsmount.h"
#include "nfsv2.h"
#include "nfs.h"
#include "nfsnode.h"
#include "nfsmount.h"
-#include "kernel.h"
-#include "malloc.h"
/* The request list head */
extern struct nfsreq nfsreqh;
/* The request list head */
extern struct nfsreq nfsreqh;
@@
-137,11
+137,11
@@
loop:
return (0);
}
return (0);
}
-nfs_inactive(vp)
+nfs_inactive(vp
, p
)
struct vnode *vp;
struct vnode *vp;
+ struct proc *p;
{
register struct nfsnode *np;
{
register struct nfsnode *np;
- register struct nameidata *ndp;
register struct sillyrename *sp;
struct nfsnode *dnp;
extern int prtactive;
register struct sillyrename *sp;
struct nfsnode *dnp;
extern int prtactive;
@@
-156,14
+156,14
@@
nfs_inactive(vp)
/*
* Remove the silly file that was rename'd earlier
*/
/*
* Remove the silly file that was rename'd earlier
*/
- ndp = &sp->s_namei;
if (!nfs_nget(vp->v_mount, &sp->s_fh, &dnp)) {
if (!nfs_nget(vp->v_mount, &sp->s_fh, &dnp)) {
-
ndp->ni
_dvp = NFSTOV(dnp);
- nfs_removeit(
nd
p);
- nfs_nput(
ndp->ni
_dvp);
+
sp->s
_dvp = NFSTOV(dnp);
+ nfs_removeit(
sp,
p);
+ nfs_nput(
sp->s
_dvp);
}
}
- crfree(ndp->ni_cred);
- free((caddr_t)sp, M_TEMP);
+ crfree(sp->s_cred);
+ vrele(sp->s_dvp);
+ free((caddr_t)sp, M_NFSREQ);
}
nfs_unlock(vp);
np->n_flag &= NMODIFIED;
}
nfs_unlock(vp);
np->n_flag &= NMODIFIED;
@@
-213,24
+213,31
@@
nfs_reclaim(vp)
return (0);
}
return (0);
}
+/*
+ * In theory, NFS does not need locking, but we make provision
+ * for doing it just in case it is needed.
+ */
+int donfslocking = 0;
/*
* Lock an nfsnode
*/
/*
* Lock an nfsnode
*/
+
nfs_lock(vp)
struct vnode *vp;
{
register struct nfsnode *np = VTONFS(vp);
nfs_lock(vp)
struct vnode *vp;
{
register struct nfsnode *np = VTONFS(vp);
+ if (!donfslocking)
+ return;
while (np->n_flag & NLOCKED) {
np->n_flag |= NWANT;
while (np->n_flag & NLOCKED) {
np->n_flag |= NWANT;
- if (np->n_lockholder ==
u.u_procp
->p_pid)
+ if (np->n_lockholder ==
curproc
->p_pid)
panic("locking against myself");
panic("locking against myself");
- np->n_lockwaiter =
u.u_procp
->p_pid;
+ np->n_lockwaiter =
curproc
->p_pid;
(void) tsleep((caddr_t)np, PINOD, "nfslock", 0);
}
np->n_lockwaiter = 0;
(void) tsleep((caddr_t)np, PINOD, "nfslock", 0);
}
np->n_lockwaiter = 0;
- np->n_lockholder = u.u_procp->p_pid;
- u.u_spare[0]++;
+ np->n_lockholder = curproc->p_pid;
np->n_flag |= NLOCKED;
}
np->n_flag |= NLOCKED;
}
@@
-242,10
+249,7
@@
nfs_unlock(vp)
{
register struct nfsnode *np = VTONFS(vp);
{
register struct nfsnode *np = VTONFS(vp);
- if ((np->n_flag & NLOCKED) == 0)
- vprint("nfs_unlock: unlocked nfsnode", vp);
np->n_lockholder = 0;
np->n_lockholder = 0;
- u.u_spare[0]--;
np->n_flag &= ~NLOCKED;
if (np->n_flag & NWANT) {
np->n_flag &= ~NWANT;
np->n_flag &= ~NLOCKED;
if (np->n_flag & NWANT) {
np->n_flag &= ~NWANT;
@@
-289,5
+293,7
@@
nfs_abortop(ndp)
struct nameidata *ndp;
{
struct nameidata *ndp;
{
+ if ((ndp->ni_nameiop & (HASBUF | SAVESTART)) == HASBUF)
+ FREE(ndp->ni_pnbuf, M_NAMEI);
return (0);
}
return (0);
}