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