Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Oct 1997 23:34:17 +0200
From:      Poul-Henning Kamp <phk@freebsd.org>
To:        current@freebsd.org
Subject:   ext2fs patch, please test!
Message-ID:  <5743.876519257@critter.freebsd.dk>

next in thread | raw e-mail | index | archive | help

If some EXT2FS filesystem users would please test this patch.

It takes us a fair step closer to having a LKM'able ext2fs.

Poul-Henning

Index: gnu/ext2fs/ext2_vfsops.c
===================================================================
RCS file: /home/ncvs/src/sys/gnu/ext2fs/ext2_vfsops.c,v
retrieving revision 1.19
diff -u -r1.19 ext2_vfsops.c
--- ext2_vfsops.c	1997/10/10 18:13:05	1.19
+++ ext2_vfsops.c	1997/10/10 21:00:17
@@ -663,6 +663,11 @@
 	ump->um_nindir = EXT2_ADDR_PER_BLOCK(fs);
 	ump->um_bptrtodb = fs->s_es->s_log_block_size + 1;
 	ump->um_seqinc = EXT2_FRAGS_PER_BLOCK(fs);
+	ump->um_dirremove = ext2_dirremove;
+	ump->um_dirempty = ext2_dirempty;
+	ump->um_direnter = ext2_direnter;
+	ump->um_checkpath = ext2_checkpath;
+	ump->um_dirrewrite = ext2_dirrewrite;
 	for (i = 0; i < MAXQUOTAS; i++)
 		ump->um_quotas[i] = NULLVP; 
 		devvp->v_specflags |= SI_MOUNTEDON; 
Index: ufs/ffs/ffs_vfsops.c
===================================================================
RCS file: /home/ncvs/src/sys/ufs/ffs/ffs_vfsops.c,v
retrieving revision 1.57
diff -u -r1.57 ffs_vfsops.c
--- ffs_vfsops.c	1997/10/10 18:16:59	1.57
+++ ffs_vfsops.c	1997/10/10 21:02:43
@@ -603,6 +603,11 @@
 	ump->um_nindir = fs->fs_nindir;
 	ump->um_bptrtodb = fs->fs_fsbtodb;
 	ump->um_seqinc = fs->fs_frag;
+	ump->um_dirremove = ufs_dirremove;
+	ump->um_dirempty = ufs_dirempty;
+	ump->um_direnter = ufs_direnter;
+	ump->um_checkpath = ufs_checkpath;
+	ump->um_dirrewrite = ufs_dirrewrite;
 	for (i = 0; i < MAXQUOTAS; i++)
 		ump->um_quotas[i] = NULLVP;
 	devvp->v_specflags |= SI_MOUNTEDON;
Index: ufs/lfs/lfs_vfsops.c
===================================================================
RCS file: /home/ncvs/src/sys/ufs/lfs/lfs_vfsops.c,v
retrieving revision 1.23
diff -u -r1.23 lfs_vfsops.c
--- lfs_vfsops.c	1997/10/10 18:17:21	1.23
+++ lfs_vfsops.c	1997/10/10 21:19:04
@@ -416,6 +416,11 @@
 	ump->um_bptrtodb = 0;
 	ump->um_seqinc = 1 << fs->lfs_fsbtodb;
 	ump->um_nindir = fs->lfs_nindir;
+	ump->um_dirremove = ufs_dirremove;
+	ump->um_dirempty = ufs_dirempty;
+	ump->um_direnter = ufs_direnter;
+	ump->um_checkpath = ufs_checkpath;
+	ump->um_dirrewrite = ufs_dirrewrite;
 	for (i = 0; i < MAXQUOTAS; i++)
 		ump->um_quotas[i] = NULLVP;
 	devvp->v_specflags |= SI_MOUNTEDON;
Index: ufs/ufs/ufs_vnops.c
===================================================================
RCS file: /home/ncvs/src/sys/ufs/ufs/ufs_vnops.c,v
retrieving revision 1.58
diff -u -r1.58 ufs_vnops.c
--- ufs_vnops.c	1997/09/21 04:24:14	1.58
+++ ufs_vnops.c	1997/10/10 21:17:05
@@ -655,15 +655,7 @@
 		error = EPERM;
 		goto out;
 	}
-#ifdef EXT2FS
-	if (IS_EXT2_VNODE(dvp)) {
-		error = ext2_dirremove(dvp, ap->a_cnp);
-	} else {
-		error = ufs_dirremove(dvp, ap->a_cnp);
-	}
-#else
-	error = ufs_dirremove(dvp, ap->a_cnp);
-#endif /* EXT2FS */
+	error = VFSTOUFS(dvp->v_mount)->um_dirremove(dvp, ap->a_cnp);
 	if (error == 0) {
 		ip->i_nlink--;
 		ip->i_flag |= IN_CHANGE;
@@ -725,15 +717,7 @@
 	gettime(&tv);
 	error = VOP_UPDATE(vp, &tv, &tv, 1);
 	if (!error) {
-#ifdef EXT2FS
-		if (IS_EXT2_VNODE(tdvp)) {
-			error = ext2_direnter(ip, tdvp, cnp);
-		} else {
-			error = ufs_direnter(ip, tdvp, cnp);
-		}
-#else
-		error = ufs_direnter(ip, tdvp, cnp);
-#endif /* EXT2FS */
+		error = VFSTOUFS(tdvp->v_mount)->um_direnter(ip, tdvp, cnp);
 	}
 
 	if (error) {
@@ -1006,15 +990,8 @@
 			goto bad;
 		if (xp != NULL)
 			vput(tvp);
-#ifdef EXT2FS
-		if (IS_EXT2_VNODE(tdvp)) {
-			error = ext2_checkpath(ip, dp, tcnp->cn_cred);
-		} else {
-			error = ufs_checkpath(ip, dp, tcnp->cn_cred);
-		}
-#else
-		error = ufs_checkpath(ip, dp, tcnp->cn_cred);
-#endif /* EXT2FS */
+		error = VFSTOUFS(tdvp->v_mount)->
+		    um_checkpath(ip, dp, tcnp->cn_cred);
 		if (error)
 			goto out;
 		if ((tcnp->cn_flags & SAVESTART) == 0)
@@ -1055,15 +1032,7 @@
 			if (error)
 				goto bad;
 		}
-#ifdef EXT2FS
-		if (IS_EXT2_VNODE(tdvp)) {
-			error = ext2_direnter(ip, tdvp, tcnp);
-		} else {
-			error = ufs_direnter(ip, tdvp, tcnp);
-		}
-#else
-		error = ufs_direnter(ip, tdvp, tcnp);
-#endif /* EXT2FS */
+		error = VFSTOUFS(tdvp->v_mount)->um_direnter(ip, tdvp, tcnp);
 		if (error) {
 			if (doingdirectory && newparent) {
 				dp->i_nlink--;
@@ -1099,13 +1068,8 @@
 		 * (both directories, or both not directories).
 		 */
 		if ((xp->i_mode&IFMT) == IFDIR) {
-#ifdef EXT2FS
-			if (! (IS_EXT2_VNODE(ITOV(xp)) ? 
-					ext2_dirempty : ufs_dirempty)
-#else
-			if (! ufs_dirempty
-#endif /* EXT2FS */
-					 (xp, dp->i_number, tcnp->cn_cred) || 
+			if (!VFSTOUFS(ITOV(xp)->v_mount)->
+			    um_dirempty(xp, dp->i_number, tcnp->cn_cred) || 
 			    xp->i_nlink > 2) {
 				error = ENOTEMPTY;
 				goto bad;
@@ -1119,15 +1083,8 @@
 			error = EISDIR;
 			goto bad;
 		}
-#ifdef EXT2FS
-		if (IS_EXT2_VNODE(ITOV(dp))) {
-			error = ext2_dirrewrite(dp, ip, tcnp);
-		} else {
-			error = ufs_dirrewrite(dp, ip, tcnp);
-		}
-#else
-		error = ufs_dirrewrite(dp, ip, tcnp);
-#endif /* EXT2FS */
+		error = VFSTOUFS(ITOV(dp)->v_mount)->
+		    um_dirrewrite(dp, ip, tcnp);
 		if (error)
 			goto bad;
 		/*
@@ -1245,15 +1202,7 @@
 				}
 			}
 		}
-#ifdef EXT2FS
-		if (IS_EXT2_VNODE(fdvp)) {
-			error = ext2_dirremove(fdvp, fcnp);
-		} else {
-			error = ufs_dirremove(fdvp, fcnp);
-		}
-#else
-		error = ufs_dirremove(fdvp, fcnp);
-#endif /* EXT2FS */
+		error = VFSTOUFS(fdvp->v_mount)->um_dirremove(fdvp, fcnp);
 		if (!error) {
 			xp->i_nlink--;
 			xp->i_flag |= IN_CHANGE;
@@ -1409,15 +1358,7 @@
 	}
 
 	/* Directory set up, now install it's entry in the parent directory. */
-#ifdef EXT2FS
-	if (IS_EXT2_VNODE(dvp)) {
-		error = ext2_direnter(ip, dvp, cnp);
-	} else {
-		error = ufs_direnter(ip, dvp, cnp);
-	}
-#else
-	error = ufs_direnter(ip, dvp, cnp);
-#endif /* EXT2FS */
+	error = VFSTOUFS(dvp->v_mount)->um_direnter(ip, dvp, cnp);
 	if (error) {
 		dp->i_nlink--;
 		dp->i_flag |= IN_CHANGE;
@@ -1472,12 +1413,8 @@
 	 */
 	error = 0;
 	if (ip->i_nlink != 2 ||
-#ifdef EXT2FS
-	    !(IS_EXT2_VNODE(ITOV(ip)) ? ext2_dirempty : ufs_dirempty)
-	    		 (ip, dp->i_number, cnp->cn_cred)) {
-#else
-	    !ufs_dirempty(ip, dp->i_number, cnp->cn_cred)) {
-#endif /* EXT2FS */
+	    !(VFSTOUFS(ITOV(ip)->v_mount)->
+	    um_dirempty(ip, dp->i_number, cnp->cn_cred))) {
 		error = ENOTEMPTY;
 		goto out;
 	}
@@ -1491,15 +1428,7 @@
 	 * inode.  If we crash in between, the directory
 	 * will be reattached to lost+found,
 	 */
-#ifdef EXT2FS
-	if (IS_EXT2_VNODE(dvp)) {
-		error = ext2_dirremove(dvp, cnp);
-	} else {
-		error = ufs_dirremove(dvp, cnp);
-	}
-#else
-	error = ufs_dirremove(dvp, cnp);
-#endif /* EXT2FS */
+	error = VFSTOUFS(dvp->v_mount)->um_dirremove(dvp, cnp);
 	if (error)
 		goto out;
 	dp->i_nlink--;
@@ -2128,15 +2057,7 @@
 	error = VOP_UPDATE(tvp, &tv, &tv, 1);
 	if (error)
 		goto bad;
-#ifdef EXT2FS
-	if (IS_EXT2_VNODE(dvp)) {
-		error = ext2_direnter(ip, dvp, cnp);
-	} else {
-		error = ufs_direnter(ip, dvp, cnp);
-	}
-#else
-	error = ufs_direnter(ip, dvp, cnp);
-#endif  /* EXT2FS */
+	error = VFSTOUFS(dvp->v_mount)->um_direnter(ip, dvp, cnp);
 	if (error)
 		goto bad;
 
Index: ufs/ufs/ufsmount.h
===================================================================
RCS file: /home/ncvs/src/sys/ufs/ufs/ufsmount.h,v
retrieving revision 1.9
diff -u -r1.9 ufsmount.h
--- ufsmount.h	1997/10/10 18:18:13	1.9
+++ ufsmount.h	1997/10/10 21:05:43
@@ -92,6 +92,11 @@
 	struct	netexport um_export;		/* export information */
 	int64_t	um_savedmaxfilesize;		/* XXX - limit maxfilesize */
 	struct malloc_type *um_malloctype;	/* The inodes malloctype */
+	int	(*um_dirremove) __P((struct vnode *, struct componentname *));
+	int	(*um_dirempty) __P((struct inode *, ino_t, struct ucred *));
+	int	(*um_direnter) __P((struct inode *, struct vnode *, struct componentname *));
+	int	(*um_dirrewrite) __P((struct inode *, struct inode *, struct componentname *));
+	int	(*um_checkpath) __P((struct inode *, struct inode *, struct ucred *));
 };
 
 /*
--
Poul-Henning Kamp             FreeBSD coreteam member
phk@FreeBSD.ORG               "Real hackers run -current on their laptop."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5743.876519257>