summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2004-07-12 08:14:09 +0000
committeralfred <alfred@FreeBSD.org>2004-07-12 08:14:09 +0000
commit8a1713aada9c142d3c2096e4857ff30970d9b1d0 (patch)
tree8fe425c682e229149daf17e6533c0f750ba308d3
parentb436785ed498fa322c5ccd228770c6053e4b487b (diff)
downloadFreeBSD-src-8a1713aada9c142d3c2096e4857ff30970d9b1d0.zip
FreeBSD-src-8a1713aada9c142d3c2096e4857ff30970d9b1d0.tar.gz
Make VFS_ROOT() and vflush() take a thread argument.
This is to allow filesystems to decide based on the passed thread which vnode to return. Several filesystems used curthread, they now use the passed thread.
-rw-r--r--sys/coda/coda_vfsops.c5
-rw-r--r--sys/fs/cd9660/cd9660_vfsops.c5
-rw-r--r--sys/fs/coda/coda_vfsops.c5
-rw-r--r--sys/fs/devfs/devfs_vfsops.c9
-rw-r--r--sys/fs/fdescfs/fdesc.h4
-rw-r--r--sys/fs/fdescfs/fdesc_vfsops.c5
-rw-r--r--sys/fs/hpfs/hpfs_vfsops.c7
-rw-r--r--sys/fs/msdosfs/msdosfs_vfsops.c17
-rw-r--r--sys/fs/ntfs/ntfs_vfsops.c9
-rw-r--r--sys/fs/nullfs/null_vfsops.c6
-rw-r--r--sys/fs/nwfs/nwfs_vfsops.c7
-rw-r--r--sys/fs/portalfs/portal_vfsops.c5
-rw-r--r--sys/fs/pseudofs/pseudofs.c4
-rw-r--r--sys/fs/pseudofs/pseudofs.h3
-rw-r--r--sys/fs/smbfs/smbfs_vfsops.c6
-rw-r--r--sys/fs/udf/udf_vfsops.c4
-rw-r--r--sys/fs/umapfs/umap_vfsops.c5
-rw-r--r--sys/fs/unionfs/union_vfsops.c5
-rw-r--r--sys/fs/unionfs/union_vnops.c2
-rw-r--r--sys/gnu/ext2fs/ext2_vfsops.c5
-rw-r--r--sys/gnu/fs/ext2fs/ext2_vfsops.c5
-rw-r--r--sys/isofs/cd9660/cd9660_vfsops.c5
-rw-r--r--sys/kern/init_main.c2
-rw-r--r--sys/kern/vfs_default.c3
-rw-r--r--sys/kern/vfs_export.c2
-rw-r--r--sys/kern/vfs_extattr.c2
-rw-r--r--sys/kern/vfs_lookup.c2
-rw-r--r--sys/kern/vfs_mount.c8
-rw-r--r--sys/kern/vfs_subr.c8
-rw-r--r--sys/kern/vfs_syscalls.c2
-rw-r--r--sys/nfs4client/nfs4_vfsops.c6
-rw-r--r--sys/nfsclient/nfs_vfsops.c4
-rw-r--r--sys/sys/mount.h4
-rw-r--r--sys/sys/vnode.h2
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c6
-rw-r--r--sys/ufs/ufs/ufs_extattr.c2
-rw-r--r--sys/ufs/ufs/ufs_vfsops.c3
37 files changed, 100 insertions, 84 deletions
diff --git a/sys/coda/coda_vfsops.c b/sys/coda/coda_vfsops.c
index e7290e7..09025d5 100644
--- a/sys/coda/coda_vfsops.c
+++ b/sys/coda/coda_vfsops.c
@@ -252,7 +252,7 @@ coda_unmount(vfsp, mntflags, td)
active = coda_kill(vfsp, NOT_DOWNCALL);
ASSERT_VOP_LOCKED(mi->mi_rootvp, "coda_unmount");
mi->mi_rootvp->v_vflag &= ~VV_ROOT;
- error = vflush(mi->mi_vfsp, 0, FORCECLOSE);
+ error = vflush(mi->mi_vfsp, 0, FORCECLOSE, td);
#ifdef CODA_VERBOSE
printf("coda_unmount: active = %d, vflush active %d\n", active, error);
#endif
@@ -280,9 +280,10 @@ coda_unmount(vfsp, mntflags, td)
* find root of cfs
*/
int
-coda_root(vfsp, vpp)
+coda_root(vfsp, vpp, td)
struct mount *vfsp;
struct vnode **vpp;
+ struct thread *td;
{
struct coda_mntinfo *mi = vftomi(vfsp);
struct vnode **result;
diff --git a/sys/fs/cd9660/cd9660_vfsops.c b/sys/fs/cd9660/cd9660_vfsops.c
index e91f4b1..10e3bc4 100644
--- a/sys/fs/cd9660/cd9660_vfsops.c
+++ b/sys/fs/cd9660/cd9660_vfsops.c
@@ -554,7 +554,7 @@ cd9660_unmount(mp, mntflags, td)
if (mntinvalbuf(mp))
return EBUSY;
#endif
- if ((error = vflush(mp, 0, flags)))
+ if ((error = vflush(mp, 0, flags, td)))
return (error);
isomp = VFSTOISOFS(mp);
@@ -578,9 +578,10 @@ cd9660_unmount(mp, mntflags, td)
* Return root of a filesystem
*/
static int
-cd9660_root(mp, vpp)
+cd9660_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct iso_mnt *imp = VFSTOISOFS(mp);
struct iso_directory_record *dp =
diff --git a/sys/fs/coda/coda_vfsops.c b/sys/fs/coda/coda_vfsops.c
index e7290e7..09025d5 100644
--- a/sys/fs/coda/coda_vfsops.c
+++ b/sys/fs/coda/coda_vfsops.c
@@ -252,7 +252,7 @@ coda_unmount(vfsp, mntflags, td)
active = coda_kill(vfsp, NOT_DOWNCALL);
ASSERT_VOP_LOCKED(mi->mi_rootvp, "coda_unmount");
mi->mi_rootvp->v_vflag &= ~VV_ROOT;
- error = vflush(mi->mi_vfsp, 0, FORCECLOSE);
+ error = vflush(mi->mi_vfsp, 0, FORCECLOSE, td);
#ifdef CODA_VERBOSE
printf("coda_unmount: active = %d, vflush active %d\n", active, error);
#endif
@@ -280,9 +280,10 @@ coda_unmount(vfsp, mntflags, td)
* find root of cfs
*/
int
-coda_root(vfsp, vpp)
+coda_root(vfsp, vpp, td)
struct mount *vfsp;
struct vnode **vpp;
+ struct thread *td;
{
struct coda_mntinfo *mi = vftomi(vfsp);
struct vnode **result;
diff --git a/sys/fs/devfs/devfs_vfsops.c b/sys/fs/devfs/devfs_vfsops.c
index a10efa2..f23d660 100644
--- a/sys/fs/devfs/devfs_vfsops.c
+++ b/sys/fs/devfs/devfs_vfsops.c
@@ -101,7 +101,7 @@ devfs_nmount(mp, ndp, td)
fmp->dm_basedir = fmp->dm_rootdir;
devfs_rules_newmount(fmp, td);
- error = devfs_root(mp, &rvp);
+ error = devfs_root(mp, &rvp, td);
if (error) {
lockdestroy(&fmp->dm_lock);
FREE(fmp, M_DEVFS);
@@ -130,7 +130,7 @@ devfs_unmount(mp, mntflags, td)
if (mntflags & MNT_FORCE)
flags |= FORCECLOSE;
/* There is 1 extra root vnode reference from devfs_mount(). */
- error = vflush(mp, 1, flags);
+ error = vflush(mp, 1, flags, td);
if (error)
return (error);
devfs_purge(fmp->dm_rootdir);
@@ -144,16 +144,15 @@ devfs_unmount(mp, mntflags, td)
/* Return locked reference to root. */
static int
-devfs_root(mp, vpp)
+devfs_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
int error;
- struct thread *td;
struct vnode *vp;
struct devfs_mount *dmp;
- td = curthread; /* XXX */
dmp = VFSTODEVFS(mp);
error = devfs_allocv(dmp->dm_rootdir, mp, &vp, td);
if (error)
diff --git a/sys/fs/fdescfs/fdesc.h b/sys/fs/fdescfs/fdesc.h
index a6ffb51..dfe4c6b 100644
--- a/sys/fs/fdescfs/fdesc.h
+++ b/sys/fs/fdescfs/fdesc.h
@@ -58,8 +58,8 @@ struct fdescnode {
#define VFSTOFDESC(mp) ((struct fdescmount *)((mp)->mnt_data))
#define VTOFDESC(vp) ((struct fdescnode *)(vp)->v_data)
-extern int fdesc_init(struct vfsconf *);
-extern int fdesc_root(struct mount *, struct vnode **);
+extern vfs_init_t fdesc_init;
+extern vfs_root_t fdesc_root;
extern int fdesc_allocvp(fdntype, int, struct mount *, struct vnode **,
struct thread *);
#endif /* _KERNEL */
diff --git a/sys/fs/fdescfs/fdesc_vfsops.c b/sys/fs/fdescfs/fdesc_vfsops.c
index 18e7ccf..c6514a9 100644
--- a/sys/fs/fdescfs/fdesc_vfsops.c
+++ b/sys/fs/fdescfs/fdesc_vfsops.c
@@ -117,7 +117,7 @@ fdesc_unmount(mp, mntflags, td)
* There is 1 extra root vnode reference corresponding
* to f_root.
*/
- if ((error = vflush(mp, 1, flags)) != 0)
+ if ((error = vflush(mp, 1, flags, td)) != 0)
return (error);
/*
@@ -130,9 +130,10 @@ fdesc_unmount(mp, mntflags, td)
}
int
-fdesc_root(mp, vpp)
+fdesc_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct thread *td = curthread; /* XXX */
struct vnode *vp;
diff --git a/sys/fs/hpfs/hpfs_vfsops.c b/sys/fs/hpfs/hpfs_vfsops.c
index e9059d4e..1459ed8 100644
--- a/sys/fs/hpfs/hpfs_vfsops.c
+++ b/sys/fs/hpfs/hpfs_vfsops.c
@@ -300,7 +300,7 @@ hpfs_mountfs(devvp, mp, argsp, td)
goto failed;
}
- error = hpfs_root(mp, &vp);
+ error = hpfs_root(mp, &vp, td);
if (error) {
hpfs_cpdeinit(hpmp);
hpfs_bmdeinit(hpmp);
@@ -344,7 +344,7 @@ hpfs_unmount(
dprintf(("hpfs_unmount: vflushing...\n"));
- error = vflush(mp, 0, flags);
+ error = vflush(mp, 0, flags, td);
if (error) {
printf("hpfs_unmount: vflush failed: %d\n",error);
return (error);
@@ -371,7 +371,8 @@ hpfs_unmount(
static int
hpfs_root(
struct mount *mp,
- struct vnode **vpp )
+ struct vnode **vpp,
+ struct thread *td )
{
int error = 0;
struct hpfsmount *hpmp = VFSTOHPFS(mp);
diff --git a/sys/fs/msdosfs/msdosfs_vfsops.c b/sys/fs/msdosfs/msdosfs_vfsops.c
index 013ec7a..ee6c507 100644
--- a/sys/fs/msdosfs/msdosfs_vfsops.c
+++ b/sys/fs/msdosfs/msdosfs_vfsops.c
@@ -91,7 +91,8 @@ static MALLOC_DEFINE(M_MSDOSFSFAT, "MSDOSFS FAT", "MSDOSFS file allocation table
struct iconv_functions *msdosfs_iconv = NULL;
-static int update_mp(struct mount *mp, struct msdosfs_args *argp);
+static int update_mp(struct mount *mp, struct msdosfs_args *argp,
+ struct thread *td);
static int mountmsdosfs(struct vnode *devvp, struct mount *mp,
struct thread *td, struct msdosfs_args *argp);
static vfs_fhtovp_t msdosfs_fhtovp;
@@ -103,9 +104,10 @@ static vfs_unmount_t msdosfs_unmount;
static vfs_vptofh_t msdosfs_vptofh;
static int
-update_mp(mp, argp)
+update_mp(mp, argp, td)
struct mount *mp;
struct msdosfs_args *argp;
+ struct thread *td;
{
struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
int error;
@@ -139,7 +141,7 @@ update_mp(mp, argp)
if (FAT32(pmp))
pmp->pm_flags |= MSDOSFSMNT_LONGNAME;
else {
- if ((error = msdosfs_root(mp, &rootvp)) != 0)
+ if ((error = msdosfs_root(mp, &rootvp, td)) != 0)
return error;
pmp->pm_flags |= findwin95(VTODE(rootvp))
? MSDOSFSMNT_LONGNAME
@@ -187,7 +189,7 @@ msdosfs_mount(mp, path, data, ndp, td)
flags = WRITECLOSE;
if (mp->mnt_flag & MNT_FORCE)
flags |= FORCECLOSE;
- error = vflush(mp, 0, flags);
+ error = vflush(mp, 0, flags, td);
}
if (!error && (mp->mnt_flag & MNT_RELOAD))
/* not yet implemented */
@@ -282,7 +284,7 @@ msdosfs_mount(mp, path, data, ndp, td)
return (error);
}
- error = update_mp(mp, &args);
+ error = update_mp(mp, &args, td);
if (error) {
msdosfs_unmount(mp, MNT_FORCE, td);
return error;
@@ -674,7 +676,7 @@ msdosfs_unmount(mp, mntflags, td)
flags = 0;
if (mntflags & MNT_FORCE)
flags |= FORCECLOSE;
- error = vflush(mp, 0, flags);
+ error = vflush(mp, 0, flags, td);
if (error)
return error;
pmp = VFSTOMSDOSFS(mp);
@@ -741,9 +743,10 @@ msdosfs_unmount(mp, mntflags, td)
}
static int
-msdosfs_root(mp, vpp)
+msdosfs_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
struct denode *ndep;
diff --git a/sys/fs/ntfs/ntfs_vfsops.c b/sys/fs/ntfs/ntfs_vfsops.c
index 924f06f..7db1a13 100644
--- a/sys/fs/ntfs/ntfs_vfsops.c
+++ b/sys/fs/ntfs/ntfs_vfsops.c
@@ -457,7 +457,7 @@ out1:
for(i=0;i<NTFS_SYSNODESNUM;i++)
if(ntmp->ntm_sysvn[i]) vrele(ntmp->ntm_sysvn[i]);
- if (vflush(mp, 0, 0))
+ if (vflush(mp, 0, 0, td))
dprintf(("ntfs_mountfs: vflush failed\n"));
out:
@@ -487,7 +487,7 @@ ntfs_unmount(
flags |= FORCECLOSE;
dprintf(("ntfs_unmount: vflushing...\n"));
- error = vflush(mp, 0, flags | SKIPSYSTEM);
+ error = vflush(mp, 0, flags | SKIPSYSTEM, td);
if (error) {
printf("ntfs_unmount: vflush failed: %d\n",error);
return (error);
@@ -503,7 +503,7 @@ ntfs_unmount(
if(ntmp->ntm_sysvn[i]) vrele(ntmp->ntm_sysvn[i]);
/* vflush system vnodes */
- error = vflush(mp, 0, flags);
+ error = vflush(mp, 0, flags, td);
if (error)
printf("ntfs_unmount: vflush failed(sysnodes): %d\n",error);
@@ -538,7 +538,8 @@ ntfs_unmount(
static int
ntfs_root(
struct mount *mp,
- struct vnode **vpp )
+ struct vnode **vpp,
+ struct thread *td )
{
struct vnode *nvp;
int error = 0;
diff --git a/sys/fs/nullfs/null_vfsops.c b/sys/fs/nullfs/null_vfsops.c
index 0ecfda2..25c1651 100644
--- a/sys/fs/nullfs/null_vfsops.c
+++ b/sys/fs/nullfs/null_vfsops.c
@@ -228,7 +228,7 @@ nullfs_unmount(mp, mntflags, td)
flags |= FORCECLOSE;
/* There is 1 extra root vnode reference (nullm_rootvp). */
- error = vflush(mp, 1, flags);
+ error = vflush(mp, 1, flags, td);
if (error)
return (error);
@@ -242,11 +242,11 @@ nullfs_unmount(mp, mntflags, td)
}
static int
-nullfs_root(mp, vpp)
+nullfs_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
- struct thread *td = curthread; /* XXX */
struct vnode *vp;
NULLFSDEBUG("nullfs_root(mp = %p, vp = %p->%p)\n", (void *)mp,
diff --git a/sys/fs/nwfs/nwfs_vfsops.c b/sys/fs/nwfs/nwfs_vfsops.c
index 3eb0f91..824ef4e 100644
--- a/sys/fs/nwfs/nwfs_vfsops.c
+++ b/sys/fs/nwfs/nwfs_vfsops.c
@@ -208,7 +208,7 @@ static int nwfs_mount(struct mount *mp, char *path, caddr_t data,
/* protect against invalid mount points */
nmp->m.mount_point[sizeof(nmp->m.mount_point)-1] = '\0';
vfs_getnewfsid(mp);
- error = nwfs_root(mp, &vp);
+ error = nwfs_root(mp, &vp, td);
if (error)
goto bad;
/*
@@ -238,7 +238,7 @@ nwfs_unmount(struct mount *mp, int mntflags, struct thread *td)
if (mntflags & MNT_FORCE)
flags |= FORCECLOSE;
/* There is 1 extra root vnode reference from nwfs_mount(). */
- error = vflush(mp, 1, flags);
+ error = vflush(mp, 1, flags, td);
if (error)
return (error);
conn = NWFSTOCONN(nmp);
@@ -257,13 +257,12 @@ nwfs_unmount(struct mount *mp, int mntflags, struct thread *td)
/* Return locked vnode to root of a filesystem */
static int
-nwfs_root(struct mount *mp, struct vnode **vpp) {
+nwfs_root(struct mount *mp, struct vnode **vpp, struct thread *td) {
struct vnode *vp;
struct nwmount *nmp;
struct nwnode *np;
struct ncp_conn *conn;
struct nw_entry_info fattr;
- struct thread *td = curthread;
struct ucred *cred = td->td_ucred;
int error, nsf, opt;
u_char vol;
diff --git a/sys/fs/portalfs/portal_vfsops.c b/sys/fs/portalfs/portal_vfsops.c
index 497b65a..5354f8d 100644
--- a/sys/fs/portalfs/portal_vfsops.c
+++ b/sys/fs/portalfs/portal_vfsops.c
@@ -170,7 +170,7 @@ portal_unmount(mp, mntflags, td)
return (EBUSY);
#endif
/* There is 1 extra root vnode reference (pm_root). */
- error = vflush(mp, 1, flags);
+ error = vflush(mp, 1, flags, td);
if (error)
return (error);
@@ -194,9 +194,10 @@ portal_unmount(mp, mntflags, td)
}
static int
-portal_root(mp, vpp)
+portal_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct thread *td = curthread; /* XXX */
struct vnode *vp;
diff --git a/sys/fs/pseudofs/pseudofs.c b/sys/fs/pseudofs/pseudofs.c
index 4db02b4..872bd8d 100644
--- a/sys/fs/pseudofs/pseudofs.c
+++ b/sys/fs/pseudofs/pseudofs.c
@@ -295,7 +295,7 @@ pfs_unmount(struct mount *mp, int mntflags, struct thread *td)
/* XXX do stuff with pi... */
- error = vflush(mp, 0, (mntflags & MNT_FORCE) ? FORCECLOSE : 0);
+ error = vflush(mp, 0, (mntflags & MNT_FORCE) ? FORCECLOSE : 0, td);
return (error);
}
@@ -303,7 +303,7 @@ pfs_unmount(struct mount *mp, int mntflags, struct thread *td)
* Return a root vnode
*/
int
-pfs_root(struct mount *mp, struct vnode **vpp)
+pfs_root(struct mount *mp, struct vnode **vpp, struct thread *td)
{
struct pfs_info *pi;
diff --git a/sys/fs/pseudofs/pseudofs.h b/sys/fs/pseudofs/pseudofs.h
index 2d44811..1bac49c 100644
--- a/sys/fs/pseudofs/pseudofs.h
+++ b/sys/fs/pseudofs/pseudofs.h
@@ -201,7 +201,8 @@ int pfs_mount (struct pfs_info *pi, struct mount *mp,
struct nameidata *ndp, struct thread *td);
int pfs_unmount (struct mount *mp, int mntflags,
struct thread *td);
-int pfs_root (struct mount *mp, struct vnode **vpp);
+int pfs_root (struct mount *mp, struct vnode **vpp,
+ struct thread *td);
int pfs_statfs (struct mount *mp, struct statfs *sbp,
struct thread *td);
int pfs_init (struct pfs_info *pi, struct vfsconf *vfc);
diff --git a/sys/fs/smbfs/smbfs_vfsops.c b/sys/fs/smbfs/smbfs_vfsops.c
index e4575ec..2004097 100644
--- a/sys/fs/smbfs/smbfs_vfsops.c
+++ b/sys/fs/smbfs/smbfs_vfsops.c
@@ -189,7 +189,7 @@ smbfs_mount(struct mount *mp, char *path, caddr_t data,
/* protect against invalid mount points */
smp->sm_args.mount_point[sizeof(smp->sm_args.mount_point) - 1] = '\0';
vfs_getnewfsid(mp);
- error = smbfs_root(mp, &vp);
+ error = smbfs_root(mp, &vp, td);
if (error)
goto bad;
VOP_UNLOCK(vp, 0, td);
@@ -238,7 +238,7 @@ smbfs_unmount(struct mount *mp, int mntflags, struct thread *td)
do {
smp->sm_didrele = 0;
/* There is 1 extra root vnode reference from smbfs_mount(). */
- error = vflush(mp, 1, flags);
+ error = vflush(mp, 1, flags, td);
} while (error == EBUSY && smp->sm_didrele != 0);
if (error)
return error;
@@ -262,7 +262,7 @@ smbfs_unmount(struct mount *mp, int mntflags, struct thread *td)
* Return locked root vnode of a filesystem
*/
static int
-smbfs_root(struct mount *mp, struct vnode **vpp)
+smbfs_root(struct mount *mp, struct vnode **vpp, struct thread *td)
{
struct smbmount *smp = VFSTOSMBFS(mp);
struct vnode *vp;
diff --git a/sys/fs/udf/udf_vfsops.c b/sys/fs/udf/udf_vfsops.c
index d520c08..2b2501a 100644
--- a/sys/fs/udf/udf_vfsops.c
+++ b/sys/fs/udf/udf_vfsops.c
@@ -501,7 +501,7 @@ udf_unmount(struct mount *mp, int mntflags, struct thread *td)
if (mntflags & MNT_FORCE)
flags |= FORCECLOSE;
- if ((error = vflush(mp, 0, flags)))
+ if ((error = vflush(mp, 0, flags, td)))
return (error);
if (udfmp->im_flags & UDFMNT_KICONV && udf_iconv) {
@@ -532,7 +532,7 @@ udf_unmount(struct mount *mp, int mntflags, struct thread *td)
}
static int
-udf_root(struct mount *mp, struct vnode **vpp)
+udf_root(struct mount *mp, struct vnode **vpp, struct thread *td)
{
struct udf_mnt *udfmp;
struct vnode *vp;
diff --git a/sys/fs/umapfs/umap_vfsops.c b/sys/fs/umapfs/umap_vfsops.c
index 1d7d0e5..c6f0e57 100644
--- a/sys/fs/umapfs/umap_vfsops.c
+++ b/sys/fs/umapfs/umap_vfsops.c
@@ -279,7 +279,7 @@ umapfs_unmount(mp, mntflags, td)
return (EBUSY);
#endif
/* There is 1 extra root vnode reference (umapm_rootvp). */
- error = vflush(mp, 1, flags);
+ error = vflush(mp, 1, flags, td);
if (error)
return (error);
@@ -292,9 +292,10 @@ umapfs_unmount(mp, mntflags, td)
}
static int
-umapfs_root(mp, vpp)
+umapfs_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct thread *td = curthread; /* XXX */
struct vnode *vp;
diff --git a/sys/fs/unionfs/union_vfsops.c b/sys/fs/unionfs/union_vfsops.c
index 6163257..e756e18 100644
--- a/sys/fs/unionfs/union_vfsops.c
+++ b/sys/fs/unionfs/union_vfsops.c
@@ -342,7 +342,7 @@ union_unmount(mp, mntflags, td)
* (d) times, where (d) is the maximum tree depth
* in the filesystem.
*/
- for (freeing = 0; (error = vflush(mp, 0, flags)) != 0;) {
+ for (freeing = 0; (error = vflush(mp, 0, flags, td)) != 0;) {
int n;
/* count #vnodes held on mount list */
@@ -378,9 +378,10 @@ union_unmount(mp, mntflags, td)
}
static int
-union_root(mp, vpp)
+union_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct union_mount *um = MOUNTTOUNIONMOUNT(mp);
int error;
diff --git a/sys/fs/unionfs/union_vnops.c b/sys/fs/unionfs/union_vnops.c
index 1934d5d..c8240e9 100644
--- a/sys/fs/unionfs/union_vnops.c
+++ b/sys/fs/unionfs/union_vnops.c
@@ -268,7 +268,7 @@ union_lookup1(udvp, pdvp, vpp, cnp)
relock_pdvp = 1;
vput(dvp);
dvp = NULL;
- error = VFS_ROOT(mp, &dvp);
+ error = VFS_ROOT(mp, &dvp, td);
vfs_unbusy(mp, td);
diff --git a/sys/gnu/ext2fs/ext2_vfsops.c b/sys/gnu/ext2fs/ext2_vfsops.c
index 9f7dcda..b688236 100644
--- a/sys/gnu/ext2fs/ext2_vfsops.c
+++ b/sys/gnu/ext2fs/ext2_vfsops.c
@@ -829,7 +829,7 @@ ext2_flushfiles(mp, flags, td)
{
int error;
- error = vflush(mp, 0, flags);
+ error = vflush(mp, 0, flags, td);
return (error);
}
@@ -1215,9 +1215,10 @@ printf("\nupdating superblock, waitfor=%s\n", waitfor == MNT_WAIT ? "yes":"no");
* Return the root of a filesystem.
*/
static int
-ext2_root(mp, vpp)
+ext2_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct vnode *nvp;
int error;
diff --git a/sys/gnu/fs/ext2fs/ext2_vfsops.c b/sys/gnu/fs/ext2fs/ext2_vfsops.c
index 9f7dcda..b688236 100644
--- a/sys/gnu/fs/ext2fs/ext2_vfsops.c
+++ b/sys/gnu/fs/ext2fs/ext2_vfsops.c
@@ -829,7 +829,7 @@ ext2_flushfiles(mp, flags, td)
{
int error;
- error = vflush(mp, 0, flags);
+ error = vflush(mp, 0, flags, td);
return (error);
}
@@ -1215,9 +1215,10 @@ printf("\nupdating superblock, waitfor=%s\n", waitfor == MNT_WAIT ? "yes":"no");
* Return the root of a filesystem.
*/
static int
-ext2_root(mp, vpp)
+ext2_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct vnode *nvp;
int error;
diff --git a/sys/isofs/cd9660/cd9660_vfsops.c b/sys/isofs/cd9660/cd9660_vfsops.c
index e91f4b1..10e3bc4 100644
--- a/sys/isofs/cd9660/cd9660_vfsops.c
+++ b/sys/isofs/cd9660/cd9660_vfsops.c
@@ -554,7 +554,7 @@ cd9660_unmount(mp, mntflags, td)
if (mntinvalbuf(mp))
return EBUSY;
#endif
- if ((error = vflush(mp, 0, flags)))
+ if ((error = vflush(mp, 0, flags, td)))
return (error);
isomp = VFSTOISOFS(mp);
@@ -578,9 +578,10 @@ cd9660_unmount(mp, mntflags, td)
* Return root of a filesystem
*/
static int
-cd9660_root(mp, vpp)
+cd9660_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct iso_mnt *imp = VFSTOISOFS(mp);
struct iso_directory_record *dp =
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 757f8ae..575f227 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -553,7 +553,7 @@ start_init(void *dummy)
vfs_mountroot();
/* Get the vnode for '/'. Set p->p_fd->fd_cdir to reference it. */
- if (VFS_ROOT(TAILQ_FIRST(&mountlist), &rootvnode))
+ if (VFS_ROOT(TAILQ_FIRST(&mountlist), &rootvnode, td))
panic("cannot find root vnode");
FILEDESC_LOCK(p->p_fd);
p->p_fd->fd_cdir = rootvnode;
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index c497b60..5812a03 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -655,9 +655,10 @@ vop_stdputpages(ap)
* used to fill the vfs function table to get reasonable default return values.
*/
int
-vfs_stdroot (mp, vpp)
+vfs_stdroot (mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
return (EOPNOTSUPP);
diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c
index a90d6f8..dd21782 100644
--- a/sys/kern/vfs_export.c
+++ b/sys/kern/vfs_export.c
@@ -296,7 +296,7 @@ vfs_setpublicfs(mp, nep, argp)
bzero(&nfs_pub.np_handle, sizeof(nfs_pub.np_handle));
nfs_pub.np_handle.fh_fsid = mp->mnt_stat.f_fsid;
- if ((error = VFS_ROOT(mp, &rvp)))
+ if ((error = VFS_ROOT(mp, &rvp, curthread /* XXX */)))
return (error);
if ((error = VFS_VPTOFH(rvp, &nfs_pub.np_handle.fh_fid)))
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 2fffe63..c22b194 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -690,7 +690,7 @@ fchdir(td, uap)
while (!error && (mp = vp->v_mountedhere) != NULL) {
if (vfs_busy(mp, 0, 0, td))
continue;
- error = VFS_ROOT(mp, &tdp);
+ error = VFS_ROOT(mp, &tdp, td);
vfs_unbusy(mp, td);
if (error)
break;
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index b931102..10b49aa 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -555,7 +555,7 @@ unionlookup:
if (vfs_busy(mp, 0, 0, td))
continue;
VOP_UNLOCK(dp, 0, td);
- error = VFS_ROOT(mp, &tdp);
+ error = VFS_ROOT(mp, &tdp, td);
vfs_unbusy(mp, td);
if (error) {
dpunlocked = 1;
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 5252b3b..d697499 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -913,7 +913,7 @@ update:
TAILQ_INSERT_TAIL(&mountlist, mp, mnt_list);
mtx_unlock(&mountlist_mtx);
vfs_event_signal(NULL, VQ_MOUNT, 0);
- if (VFS_ROOT(mp, &newdp))
+ if (VFS_ROOT(mp, &newdp, td))
panic("mount: lost mount");
checkdirs(vp, newdp);
vput(newdp);
@@ -1114,7 +1114,7 @@ dounmount(mp, flags, td)
* vnode to the covered vnode. For non-forced unmounts we want
* such references to cause an EBUSY error.
*/
- if ((flags & MNT_FORCE) && VFS_ROOT(mp, &fsrootvp) == 0) {
+ if ((flags & MNT_FORCE) && VFS_ROOT(mp, &fsrootvp, td) == 0) {
if (mp->mnt_vnodecovered != NULL)
checkdirs(fsrootvp, mp->mnt_vnodecovered);
if (fsrootvp == rootvnode) {
@@ -1131,7 +1131,7 @@ dounmount(mp, flags, td)
vn_finished_write(mp);
if (error) {
/* Undo cdir/rdir and rootvnode changes made above. */
- if ((flags & MNT_FORCE) && VFS_ROOT(mp, &fsrootvp) == 0) {
+ if ((flags & MNT_FORCE) && VFS_ROOT(mp, &fsrootvp, td) == 0) {
if (mp->mnt_vnodecovered != NULL)
checkdirs(mp->mnt_vnodecovered, fsrootvp);
if (rootvnode == NULL) {
@@ -1465,7 +1465,7 @@ getdiskbyname(char *name)
if (error)
break;
VFS_START(mp, 0, td);
- VFS_ROOT(mp, &vroot);
+ VFS_ROOT(mp, &vroot, td);
VOP_UNLOCK(vroot, 0, td);
NDINIT(&nid, LOOKUP, NOCACHE|FOLLOW,
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index c0dff88..53403db 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -2258,7 +2258,7 @@ vdropl(vp)
*
* `rootrefs' specifies the base reference count for the root vnode
* of this filesystem. The root vnode is considered busy if its
- * v_usecount exceeds this value. On a successful return, vflush()
+ * v_usecount exceeds this value. On a successful return, vflush(, td)
* will call vrele() on the root vnode exactly rootrefs times.
* If the SKIPSYSTEM or WRITECLOSE flags are specified, rootrefs must
* be zero.
@@ -2269,12 +2269,12 @@ SYSCTL_INT(_debug, OID_AUTO, busyprt, CTLFLAG_RW, &busyprt, 0, "");
#endif
int
-vflush(mp, rootrefs, flags)
+vflush(mp, rootrefs, flags, td)
struct mount *mp;
int rootrefs;
int flags;
+ struct thread *td;
{
- struct thread *td = curthread; /* XXX */
struct vnode *vp, *nvp, *rootvp = NULL;
struct vattr vattr;
int busy = 0, error;
@@ -2286,7 +2286,7 @@ vflush(mp, rootrefs, flags)
* Get the filesystem root vnode. We can vput() it
* immediately, since with rootrefs > 0, it won't go away.
*/
- if ((error = VFS_ROOT(mp, &rootvp)) != 0)
+ if ((error = VFS_ROOT(mp, &rootvp, td)) != 0)
return (error);
vput(rootvp);
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 2fffe63..c22b194 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -690,7 +690,7 @@ fchdir(td, uap)
while (!error && (mp = vp->v_mountedhere) != NULL) {
if (vfs_busy(mp, 0, 0, td))
continue;
- error = VFS_ROOT(mp, &tdp);
+ error = VFS_ROOT(mp, &tdp, td);
vfs_unbusy(mp, td);
if (error)
break;
diff --git a/sys/nfs4client/nfs4_vfsops.c b/sys/nfs4client/nfs4_vfsops.c
index e20d176..cf730ad 100644
--- a/sys/nfs4client/nfs4_vfsops.c
+++ b/sys/nfs4client/nfs4_vfsops.c
@@ -656,7 +656,7 @@ nfs_unmount(struct mount *mp, int mntflags, struct thread *td)
nmp = VFSTONFS(mp);
/*
* Goes something like this..
- * - Call vflush() to clear out vnodes for this filesystem
+ * - Call vflush(, td) to clear out vnodes for this filesystem
* - Close the socket
* - Free up the data structures
*/
@@ -668,7 +668,7 @@ nfs_unmount(struct mount *mp, int mntflags, struct thread *td)
nfs4dev_purge();
}
- error = vflush(mp, 0, flags);
+ error = vflush(mp, 0, flags, td);
if (error)
return (error);
@@ -689,7 +689,7 @@ nfs_unmount(struct mount *mp, int mntflags, struct thread *td)
* Return root of a filesystem
*/
static int
-nfs_root(struct mount *mp, struct vnode **vpp)
+nfs_root(struct mount *mp, struct vnode **vpp, struct thread *td)
{
struct vnode *vp;
struct nfsmount *nmp;
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index 9674628..7382343 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -894,7 +894,7 @@ nfs_unmount(struct mount *mp, int mntflags, struct thread *td)
return (error);
}
/* We hold 1 extra ref on the root vnode; see comment in mountnfs(). */
- error = vflush(mp, 1, flags);
+ error = vflush(mp, 1, flags, td);
if (error)
return (error);
@@ -912,7 +912,7 @@ nfs_unmount(struct mount *mp, int mntflags, struct thread *td)
* Return root of a filesystem
*/
static int
-nfs_root(struct mount *mp, struct vnode **vpp)
+nfs_root(struct mount *mp, struct vnode **vpp, struct thread *td)
{
struct vnode *vp;
struct nfsmount *nmp;
diff --git a/sys/sys/mount.h b/sys/sys/mount.h
index 1d1e7aa..e0893c9 100644
--- a/sys/sys/mount.h
+++ b/sys/sys/mount.h
@@ -464,7 +464,7 @@ typedef int vfs_mount_t(struct mount *mp, char *path, caddr_t data,
struct nameidata *ndp, struct thread *td);
typedef int vfs_start_t(struct mount *mp, int flags, struct thread *td);
typedef int vfs_unmount_t(struct mount *mp, int mntflags, struct thread *td);
-typedef int vfs_root_t(struct mount *mp, struct vnode **vpp);
+typedef int vfs_root_t(struct mount *mp, struct vnode **vpp, struct thread *td);
typedef int vfs_quotactl_t(struct mount *mp, int cmds, uid_t uid,
caddr_t arg, struct thread *td);
typedef int vfs_statfs_t(struct mount *mp, struct statfs *sbp,
@@ -512,7 +512,7 @@ struct vfsops {
(*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)
#define VFS_START(MP, FLAGS, P) (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)
#define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)
-#define VFS_ROOT(MP, VPP) (*(MP)->mnt_op->vfs_root)(MP, VPP)
+#define VFS_ROOT(MP, VPP, P) (*(MP)->mnt_op->vfs_root)(MP, VPP, P)
#define VFS_QUOTACTL(MP,C,U,A,P) (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)
#define VFS_STATFS(MP, SBP, P) (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)
#define VFS_SYNC(MP, WAIT, C, P) (*(MP)->mnt_op->vfs_sync)(MP, WAIT, C, P)
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 723e1b0..b78e048 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -629,7 +629,7 @@ void vdropl(struct vnode *);
int vfinddev(struct cdev *dev, struct vnode **vpp);
void vfs_add_vnodeops(const void *);
void vfs_rm_vnodeops(const void *);
-int vflush(struct mount *mp, int rootrefs, int flags);
+int vflush(struct mount *mp, int rootrefs, int flags, struct thread *td);
int vget(struct vnode *vp, int lockflag, struct thread *td);
void vgone(struct vnode *vp);
void vgonel(struct vnode *vp, struct thread *td);
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index af3ca97..2ed939d4 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -1003,7 +1003,7 @@ ffs_flushfiles(mp, flags, td)
#ifdef QUOTA
if (mp->mnt_flag & MNT_QUOTA) {
int i;
- error = vflush(mp, 0, SKIPSYSTEM|flags);
+ error = vflush(mp, 0, SKIPSYSTEM|flags, td);
if (error)
return (error);
for (i = 0; i < MAXQUOTAS; i++) {
@@ -1019,7 +1019,7 @@ ffs_flushfiles(mp, flags, td)
#endif
ASSERT_VOP_LOCKED(ump->um_devvp, "ffs_flushfiles");
if (ump->um_devvp->v_vflag & VV_COPYONWRITE) {
- if ((error = vflush(mp, 0, SKIPSYSTEM | flags)) != 0)
+ if ((error = vflush(mp, 0, SKIPSYSTEM | flags, td)) != 0)
return (error);
ffs_snapshot_unmount(mp);
/*
@@ -1030,7 +1030,7 @@ ffs_flushfiles(mp, flags, td)
/*
* Flush all the files.
*/
- if ((error = vflush(mp, 0, flags)) != 0)
+ if ((error = vflush(mp, 0, flags, td)) != 0)
return (error);
/*
* Flush filesystem metadata.
diff --git a/sys/ufs/ufs/ufs_extattr.c b/sys/ufs/ufs/ufs_extattr.c
index f31d927..e78ea93 100644
--- a/sys/ufs/ufs/ufs_extattr.c
+++ b/sys/ufs/ufs/ufs_extattr.c
@@ -472,7 +472,7 @@ ufs_extattr_autostart(struct mount *mp, struct thread *td)
* Does UFS_EXTATTR_FSROOTSUBDIR exist off the filesystem root?
* If so, automatically start EA's.
*/
- error = VFS_ROOT(mp, &rvp);
+ error = VFS_ROOT(mp, &rvp, td);
if (error) {
printf("ufs_extattr_autostart.VFS_ROOT() returned %d\n",
error);
diff --git a/sys/ufs/ufs/ufs_vfsops.c b/sys/ufs/ufs/ufs_vfsops.c
index 6466677..8876e51 100644
--- a/sys/ufs/ufs/ufs_vfsops.c
+++ b/sys/ufs/ufs/ufs_vfsops.c
@@ -80,9 +80,10 @@ ufs_start(mp, flags, td)
* Return the root of a filesystem.
*/
int
-ufs_root(mp, vpp)
+ufs_root(mp, vpp, td)
struct mount *mp;
struct vnode **vpp;
+ struct thread *td;
{
struct vnode *nvp;
int error;
OpenPOWER on IntegriCloud