PERFORCE change 123969 for review

Roman Divacky rdivacky at FreeBSD.org
Mon Jul 23 15:03:01 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=123969

Change 123969 by rdivacky at rdivacky_witten on 2007/07/23 15:02:42

	Move bwillwrite() to such places where its not covered by any locks. Thus
	restoring original behaviour.
	
	Suggested by: kib

Affected files ...

.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/vfs_syscalls.c#49 edit

Differences ...

==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/vfs_syscalls.c#49 (text+ko) ====

@@ -1270,16 +1270,17 @@
 	}
 	if (error)
 		return (error);
+	bwillwrite();
 restart:
 	if (dvp) {
 		vfslocked = VFS_NEEDSGIANT(dvp->v_mount); 
 		vrele(dvp);
 		VFS_UNLOCK_GIANT(vfslocked);
+		bwillwrite();
 	}
 	error = kern_get_at(td, fd, &dvp);
 	if (error && !kern_absolute_path(path, pathseg))
 		return (error);
-	bwillwrite();
 	NDINIT_AT(&nd, CREATE, ((error) ? ATBADF : 0) | LOCKPARENT |
 	    SAVENAME | MPSAFE | AUDITVNODE1, pathseg, path, td, dvp);
 	if ((error = namei(&nd)) != 0) {
@@ -1417,16 +1418,17 @@
 	struct vnode *dvp = NULL;
 
 	AUDIT_ARG(mode, mode);
+	bwillwrite();
 restart:
 	if (dvp) {
 		vfslocked = VFS_NEEDSGIANT(dvp->v_mount); 
 		vrele(dvp);
 		VFS_UNLOCK_GIANT(vfslocked);
+		bwillwrite();
 	}
 	error = kern_get_at(td, fd, &dvp);
 	if (error && !kern_absolute_path(path, pathseg))
 		return (error);
-	bwillwrite();
 	NDINIT_AT(&nd, CREATE, ((error) ? ATBADF : 0) | LOCKPARENT |
 	    SAVENAME | MPSAFE | AUDITVNODE1, pathseg, path, td, dvp);
 	if ((error = namei(&nd)) != 0) {
@@ -1596,6 +1598,7 @@
 	int lvfslocked;
 	int error;
 
+	bwillwrite();
 	error = kern_get_at(td, fd1, &pdvp);
 	if (error && !kern_absolute_path(path1, segflg))
 		return (error);
@@ -1616,7 +1619,6 @@
 	NDINIT_AT(&nd, CREATE, ((error) ? ATBADF : 0) | LOCKPARENT |
 	    SAVENAME | MPSAFE | AUDITVNODE1, segflg, path2, td, ldvp);
 
-	bwillwrite();
 	if ((error = namei(&nd)) != 0)
 		goto out;
 	vfslocked = NDHASGIANT(&nd);
@@ -1739,16 +1741,17 @@
 			goto out;
 	}
 	AUDIT_ARG(text, syspath);
+	bwillwrite();
 restart:
 	if (dvp) {
 		vfslocked = VFS_NEEDSGIANT(dvp->v_mount); 
 		vrele(dvp);
 		VFS_UNLOCK_GIANT(vfslocked);
+		bwillwrite();
 	}
 	error = kern_get_at(td, fd, &dvp);
 	if (error && !kern_absolute_path(path2, segflg))
 		return (error);
-	bwillwrite();
 	NDINIT_AT(&nd, CREATE, ((error) ? ATBADF : 0) | LOCKPARENT |
 	    SAVENAME | MPSAFE | AUDITVNODE1, segflg, path2, td, dvp);
 	if ((error = namei(&nd)) != 0)
@@ -1917,16 +1920,17 @@
 	struct nameidata nd;
 	int vfslocked;
 
+	bwillwrite();
 restart:
 	if (dvp) {
 		vfslocked = VFS_NEEDSGIANT(dvp->v_mount); 
 		vrele(dvp);
 		VFS_UNLOCK_GIANT(vfslocked);
+		bwillwrite();
 	}
 	error = kern_get_at(td, fd, &dvp);
 	if (error && !kern_absolute_path(path, pathseg))
 		return (error);
-	bwillwrite();
 	NDINIT_AT(&nd, DELETE, ((error) ? ATBADF : 0) | LOCKPARENT |
 	    LOCKLEAF | MPSAFE | AUDITVNODE1, pathseg, path, td, dvp);
 	if ((error = namei(&nd)) != 0) {
@@ -3881,6 +3885,7 @@
 	int fvfslocked;
 	int error;
 
+	bwillwrite();
 	error = kern_get_at(td, oldfd, &frdvp);
 	if (error && !kern_absolute_path(old, pathseg))
 		return (error);
@@ -3906,7 +3911,6 @@
 	    LOCKLEAF | NOCACHE | SAVESTART | MPSAFE | AUDITVNODE2,
 	    pathseg, new, td, todvp);
 
-	bwillwrite();
 	if ((error = namei(&fromnd)) != 0)
 		goto out2;
 	fvfslocked = NDHASGIANT(&fromnd);
@@ -4064,16 +4068,17 @@
 	int vfslocked;
 
 	AUDIT_ARG(mode, mode);
+	bwillwrite();
 restart:
 	if (dvp) {
 		vfslocked = VFS_NEEDSGIANT(dvp->v_mount); 
 		vrele(dvp);
 		VFS_UNLOCK_GIANT(vfslocked);
+		bwillwrite();
 	}
 	error = kern_get_at(td, fd, &dvp);
 	if (error && !kern_absolute_path(path, segflg))
 		return (error);
-	bwillwrite();
 	NDINIT_AT(&nd, CREATE, ((error) ? ATBADF : 0) | LOCKPARENT |
 	    SAVENAME | MPSAFE | AUDITVNODE1, segflg, path, td, dvp);
 	nd.ni_cnd.cn_flags |= WILLBEDIR;
@@ -4176,16 +4181,17 @@
 	struct nameidata nd;
 	int vfslocked;
 
+	bwillwrite();
 restart:
 	if (dvp) {
 		vfslocked = VFS_NEEDSGIANT(dvp->v_mount); 
 		vrele(dvp);
 		VFS_UNLOCK_GIANT(vfslocked);
+		bwillwrite();
 	}
 	error = kern_get_at(td, fd, &dvp);
 	if (error && !kern_absolute_path(path, pathseg))
 		return (error);
-	bwillwrite();
 	NDINIT_AT(&nd, DELETE, ((error) ? ATBADF : 0) | LOCKPARENT |
 	    LOCKLEAF | MPSAFE | AUDITVNODE1, pathseg, path, td, dvp);
 	if ((error = namei(&nd)) != 0)


More information about the p4-projects mailing list