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 */