Module Name:    src
Committed By:   dholland
Date:           Thu Oct 15 06:15:48 UTC 2015

Modified Files:
        src/sys/ufs/lfs: lfs.h lfs_syscalls.c lfs_vfsops.c ulfsmount.h

Log Message:
Move stuff from struct ulfsmount to struct lfs.


To generate a diff of this commit:
cvs rdiff -u -r1.194 -r1.195 src/sys/ufs/lfs/lfs.h
cvs rdiff -u -r1.171 -r1.172 src/sys/ufs/lfs/lfs_syscalls.c
cvs rdiff -u -r1.346 -r1.347 src/sys/ufs/lfs/lfs_vfsops.c
cvs rdiff -u -r1.13 -r1.14 src/sys/ufs/lfs/ulfsmount.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/ufs/lfs/lfs.h
diff -u src/sys/ufs/lfs/lfs.h:1.194 src/sys/ufs/lfs/lfs.h:1.195
--- src/sys/ufs/lfs/lfs.h:1.194	Sat Oct  3 08:29:34 2015
+++ src/sys/ufs/lfs/lfs.h	Thu Oct 15 06:15:48 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs.h,v 1.194 2015/10/03 08:29:34 dholland Exp $	*/
+/*	$NetBSD: lfs.h,v 1.195 2015/10/15 06:15:48 dholland Exp $	*/
 
 /*  from NetBSD: dinode.h,v 1.22 2013/01/22 09:39:18 dholland Exp  */
 /*  from NetBSD: dir.h,v 1.21 2009/07/22 04:49:19 dholland Exp  */
@@ -1028,6 +1028,10 @@ struct lfs {
 	LIST_HEAD(, segdelta) lfs_segdhd;	/* List of pending trunc accounting events */
 
 #ifdef _KERNEL
+	/* The block device we're mounted on. */
+	dev_t lfs_dev;
+	struct vnode *lfs_devvp;
+
 	/* ULFS-level information */
 	u_int32_t um_flags;			/* ULFS flags (below) */
 	u_long	um_nindir;			/* indirect ptrs per block */
@@ -1049,6 +1053,13 @@ struct lfs {
 	int lfs_availsleep;
 	/* This one replaces &lfs_nextseg... all ditto */
 	int lfs_nextsegsleep;
+
+	/* Cleaner lwp, set on first bmapv syscall. */
+	struct lwp *lfs_cleaner_thread;
+
+	/* Hint from cleaner, only valid if curlwp == um_cleaner_thread. */
+	/* XXX change this to BLOCK_INFO after resorting this file */
+	struct block_info *lfs_cleaner_hint;
 #endif
 };
 

Index: src/sys/ufs/lfs/lfs_syscalls.c
diff -u src/sys/ufs/lfs/lfs_syscalls.c:1.171 src/sys/ufs/lfs/lfs_syscalls.c:1.172
--- src/sys/ufs/lfs/lfs_syscalls.c:1.171	Sat Oct 10 22:34:33 2015
+++ src/sys/ufs/lfs/lfs_syscalls.c	Thu Oct 15 06:15:48 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_syscalls.c,v 1.171 2015/10/10 22:34:33 dholland Exp $	*/
+/*	$NetBSD: lfs_syscalls.c,v 1.172 2015/10/15 06:15:48 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007, 2008
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.171 2015/10/10 22:34:33 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.172 2015/10/15 06:15:48 dholland Exp $");
 
 #ifndef LFS
 # define LFS		/* for prototypes in syscallargs.h */
@@ -657,17 +657,17 @@ lfs_bmapv(struct lwp *l, fsid_t *fsidp, 
 	if ((mntp = vfs_getvfs(fsidp)) == NULL)
 		return (ENOENT);
 
-	ump = VFSTOULFS(mntp);
 	if ((error = vfs_busy(mntp, NULL)) != 0)
 		return (error);
 
-	if (ump->um_cleaner_thread == NULL)
-		ump->um_cleaner_thread = curlwp;
-	KASSERT(ump->um_cleaner_thread == curlwp);
+	ump = VFSTOULFS(mntp);
+	fs = ump->um_lfs;
 
-	cnt = blkcnt;
+	if (fs->lfs_cleaner_thread == NULL)
+		fs->lfs_cleaner_thread = curlwp;
+	KASSERT(fs->lfs_cleaner_thread == curlwp);
 
-	fs = VFSTOULFS(mntp)->um_lfs;
+	cnt = blkcnt;
 
 	error = 0;
 
@@ -976,12 +976,14 @@ lfs_fastvget(struct mount *mp, ino_t ino
     struct vnode **vpp)
 {
 	struct ulfsmount *ump;
+	struct lfs *fs;
 	int error;
 
 	ump = VFSTOULFS(mp);
-	ump->um_cleaner_hint = blkp;
+	fs = ump->um_lfs;
+	fs->lfs_cleaner_hint = blkp;
 	error = vcache_get(mp, &ino, sizeof(ino), vpp);
-	ump->um_cleaner_hint = NULL;
+	fs->lfs_cleaner_hint = NULL;
 	if (error)
 		return error;
 	error = vn_lock(*vpp, lk_flags);

Index: src/sys/ufs/lfs/lfs_vfsops.c
diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.346 src/sys/ufs/lfs/lfs_vfsops.c:1.347
--- src/sys/ufs/lfs/lfs_vfsops.c:1.346	Sat Oct 10 22:33:57 2015
+++ src/sys/ufs/lfs/lfs_vfsops.c	Thu Oct 15 06:15:48 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vfsops.c,v 1.346 2015/10/10 22:33:57 dholland Exp $	*/
+/*	$NetBSD: lfs_vfsops.c,v 1.347 2015/10/15 06:15:48 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.346 2015/10/10 22:33:57 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.347 2015/10/15 06:15:48 dholland Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -672,14 +672,21 @@ lfs_mount(struct mount *mp, const char *
 			/*
 			 * Be sure we're still naming the same device
 			 * used for our initial mount
+			 *
+			 * XXX dholland 20151010: if namei gives us a
+			 * different vnode for the same device,
+			 * wouldn't it be better to use it going
+			 * forward rather than ignore it in favor of
+			 * the old one?
 			 */
 			ump = VFSTOULFS(mp);
-			if (devvp != ump->um_devvp) {
-				if (devvp->v_rdev != ump->um_devvp->v_rdev)
+			fs = ump->um_lfs;
+			if (devvp != fs->lfs_devvp) {
+				if (devvp->v_rdev != fs->lfs_devvp->v_rdev)
 					error = EINVAL;
 				else {
 					vrele(devvp);
-					devvp = ump->um_devvp;
+					devvp = fs->lfs_devvp;
 					vref(devvp);
 				}
 			}
@@ -691,7 +698,8 @@ lfs_mount(struct mount *mp, const char *
 		} else {
 			/* Use the extant mount */
 			ump = VFSTOULFS(mp);
-			devvp = ump->um_devvp;
+			fs = ump->um_lfs;
+			devvp = fs->lfs_devvp;
 			vref(devvp);
 		}
 	}
@@ -1036,6 +1044,11 @@ lfs_mountfs(struct vnode *devvp, struct 
 	if (ronly == 0)
 		fs->lfs_fmod = 1;
 
+	/* Device we're using */
+	dev = devvp->v_rdev;
+	fs->lfs_dev = dev;
+	fs->lfs_devvp = devvp;
+
 	/* ulfs-level information */
 	fs->um_flags = 0;
 	fs->um_bptrtodb = lfs_sb_getffshift(fs) - DEV_BSHIFT;
@@ -1055,7 +1068,6 @@ lfs_mountfs(struct vnode *devvp, struct 
 	fs->lfs_quotaino[1] = 0;
 
 	/* Initialize the mount structure. */
-	dev = devvp->v_rdev;
 	mp->mnt_data = ump;
 	mp->mnt_stat.f_fsidx.__fsid_val[0] = (long)dev;
 	mp->mnt_stat.f_fsidx.__fsid_val[1] = makefstype(MOUNT_LFS);
@@ -1070,8 +1082,6 @@ lfs_mountfs(struct vnode *devvp, struct 
 		fs->lfs_hasolddirfmt = true;
 
 	ump->um_mountp = mp;
-	ump->um_dev = dev;
-	ump->um_devvp = devvp;
 	for (i = 0; i < ULFS_MAXQUOTAS; i++)
 		ump->um_quotas[i] = NULLVP;
 	spec_node_setmountedfs(devvp, mp);
@@ -1328,12 +1338,12 @@ lfs_unmount(struct mount *mp, int mntfla
 	vgone(fs->lfs_ivnode);
 
 	ronly = !fs->lfs_ronly;
-	if (ump->um_devvp->v_type != VBAD)
-		spec_node_setmountedfs(ump->um_devvp, NULL);
-	vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY);
-	error = VOP_CLOSE(ump->um_devvp,
+	if (fs->lfs_devvp->v_type != VBAD)
+		spec_node_setmountedfs(fs->lfs_devvp, NULL);
+	vn_lock(fs->lfs_devvp, LK_EXCLUSIVE | LK_RETRY);
+	error = VOP_CLOSE(fs->lfs_devvp,
 	    ronly ? FREAD : FREAD|FWRITE, NOCRED);
-	vput(ump->um_devvp);
+	vput(fs->lfs_devvp);
 
 	/* Complain about page leakage */
 	if (fs->lfs_pages > 0)
@@ -1486,7 +1496,7 @@ lfs_init_vnode(struct ulfsmount *ump, in
 	struct inode *ip;
 	union lfs_dinode *dp;
 
-	ASSERT_NO_SEGLOCK(ump->um_lfs);
+	ASSERT_NO_SEGLOCK(fs);
 
 	/* Initialize the inode. */
 	ip = pool_get(&lfs_inode_pool, PR_WAITOK);
@@ -1498,10 +1508,10 @@ lfs_init_vnode(struct ulfsmount *ump, in
 	ip->i_din = dp;
 	ip->i_ump = ump;
 	ip->i_vnode = vp;
-	ip->i_dev = ump->um_dev;
+	ip->i_dev = fs->lfs_dev;
 	lfs_dino_setinumber(fs, dp, ino);
 	ip->i_number = ino;
-	ip->i_lfs = ump->um_lfs;
+	ip->i_lfs = fs;
 	ip->i_lfs_effnblks = 0;
 	SPLAY_INIT(&ip->i_lfs_lbtree);
 	ip->i_lfs_nbtree = 0;
@@ -1585,9 +1595,9 @@ lfs_loadvnode(struct mount *mp, struct v
 	ip = VTOI(vp);
 
 	/* If the cleaner supplied the inode, use it. */
-	if (curlwp == ump->um_cleaner_thread && ump->um_cleaner_hint != NULL &&
-	    ump->um_cleaner_hint->bi_lbn == LFS_UNUSED_LBN) {
-		dip = ump->um_cleaner_hint->bi_bp;
+	if (curlwp == fs->lfs_cleaner_thread && fs->lfs_cleaner_hint != NULL &&
+	    fs->lfs_cleaner_hint->bi_lbn == LFS_UNUSED_LBN) {
+		dip = fs->lfs_cleaner_hint->bi_bp;
 		if (fs->lfs_is64) {
 			error = copyin(dip, &ip->i_din->u_64,
 				       sizeof(struct lfs64_dinode));
@@ -1606,7 +1616,7 @@ lfs_loadvnode(struct mount *mp, struct v
 	/* Read in the disk contents for the inode, copy into the inode. */
 	retries = 0;
 again:
-	error = bread(ump->um_devvp, LFS_FSBTODB(fs, daddr),
+	error = bread(fs->lfs_devvp, LFS_FSBTODB(fs, daddr),
 		(lfs_sb_getversion(fs) == 1 ? lfs_sb_getbsize(fs) : lfs_sb_getibsize(fs)),
 		0, &bp);
 	if (error) {
@@ -2266,7 +2276,7 @@ lfs_vinit(struct mount *mp, struct vnode
 	 * Finish inode initialization now that aliasing has been resolved.
 	 */
 
-	ip->i_devvp = ump->um_devvp;
+	ip->i_devvp = fs->lfs_devvp;
 	vref(ip->i_devvp);
 #if defined(LFS_QUOTA) || defined(LFS_QUOTA2)
 	ulfsquota_init(ip);

Index: src/sys/ufs/lfs/ulfsmount.h
diff -u src/sys/ufs/lfs/ulfsmount.h:1.13 src/sys/ufs/lfs/ulfsmount.h:1.14
--- src/sys/ufs/lfs/ulfsmount.h:1.13	Sun May 31 15:48:03 2015
+++ src/sys/ufs/lfs/ulfsmount.h	Thu Oct 15 06:15:48 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfsmount.h,v 1.13 2015/05/31 15:48:03 hannken Exp $	*/
+/*	$NetBSD: ulfsmount.h,v 1.14 2015/10/15 06:15:48 dholland Exp $	*/
 /*  from NetBSD: ufsmount.h,v 1.39 2012/10/19 17:09:08 drochner Exp  */
 
 /*
@@ -60,10 +60,6 @@ struct ulfsmount {
 	/* Abstract vfs-level filesystem structure. */
 	struct mount *um_mountp;
 
-	/* The block device we're mounted on. */
-	dev_t um_dev;
-	struct vnode *um_devvp;
-
 	/* type of fs; currently always ULFS1, theoretically also ULFS2 */
 	u_long um_fstype;
 
@@ -73,11 +69,6 @@ struct ulfsmount {
 	/* Extended attribute information. */
 	struct ulfs_extattr_per_mount um_extattr;
 
-	/* Cleaner lwp, set on first bmapv syscall. */
-	struct lwp *um_cleaner_thread;
-
-	/* Hint from cleaner, only valid if curlwp == um_cleaner_thread. */
-	BLOCK_INFO *um_cleaner_hint;
 	/* Quota-related material. */
 	struct vnode *um_quotas[ULFS_MAXQUOTAS]; /* quota files */
 	kauth_cred_t um_cred[ULFS_MAXQUOTAS];	/* quota file access cred */

Reply via email to