PERFORCE change 63974 for review
Marcel Moolenaar
marcel at FreeBSD.org
Sat Oct 30 00:38:31 PDT 2004
http://perforce.freebsd.org/chv.cgi?CH=63974
Change 63974 by marcel at marcel_nfs on 2004/10/30 07:38:14
IFC @63972
Affected files ...
.. //depot/projects/uart/amd64/amd64/machdep.c#9 integrate
.. //depot/projects/uart/conf/files#31 integrate
.. //depot/projects/uart/dev/dcons/dcons_os.c#2 integrate
.. //depot/projects/uart/dev/fdc/fdc.c#2 integrate
.. //depot/projects/uart/dev/mcd/mcd.c#5 integrate
.. //depot/projects/uart/dev/scd/scd.c#5 integrate
.. //depot/projects/uart/dev/usb/uhci.c#7 integrate
.. //depot/projects/uart/fs/devfs/devfs_vfsops.c#3 integrate
.. //depot/projects/uart/fs/devfs/devfs_vnops.c#3 integrate
.. //depot/projects/uart/fs/hpfs/hpfs.h#3 integrate
.. //depot/projects/uart/fs/hpfs/hpfs_vfsops.c#4 integrate
.. //depot/projects/uart/fs/hpfs/hpfs_vnops.c#4 integrate
.. //depot/projects/uart/fs/msdosfs/msdosfs_denode.c#4 integrate
.. //depot/projects/uart/fs/msdosfs/msdosfs_vfsops.c#7 integrate
.. //depot/projects/uart/fs/msdosfs/msdosfs_vnops.c#7 integrate
.. //depot/projects/uart/fs/msdosfs/msdosfsmount.h#5 integrate
.. //depot/projects/uart/fs/ntfs/ntfs_vfsops.c#6 integrate
.. //depot/projects/uart/fs/udf/udf.h#3 integrate
.. //depot/projects/uart/fs/udf/udf_vfsops.c#5 integrate
.. //depot/projects/uart/fs/udf/udf_vnops.c#4 integrate
.. //depot/projects/uart/geom/geom.h#6 integrate
.. //depot/projects/uart/geom/geom_dev.c#9 integrate
.. //depot/projects/uart/geom/geom_subr.c#5 integrate
.. //depot/projects/uart/geom/geom_vfs.c#1 branch
.. //depot/projects/uart/geom/geom_vfs.h#1 branch
.. //depot/projects/uart/gnu/ext2fs/ext2_bmap.c#4 integrate
.. //depot/projects/uart/gnu/ext2fs/ext2_mount.h#3 integrate
.. //depot/projects/uart/gnu/ext2fs/ext2_vfsops.c#6 integrate
.. //depot/projects/uart/gnu/ext2fs/ext2_vnops.c#4 integrate
.. //depot/projects/uart/i386/i386/pmap.c#23 integrate
.. //depot/projects/uart/isofs/cd9660/cd9660_bmap.c#3 integrate
.. //depot/projects/uart/isofs/cd9660/cd9660_node.c#4 integrate
.. //depot/projects/uart/isofs/cd9660/cd9660_node.h#3 integrate
.. //depot/projects/uart/isofs/cd9660/cd9660_vfsops.c#6 integrate
.. //depot/projects/uart/isofs/cd9660/cd9660_vnops.c#5 integrate
.. //depot/projects/uart/isofs/cd9660/iso.h#4 integrate
.. //depot/projects/uart/kern/kern_physio.c#5 integrate
.. //depot/projects/uart/kern/kern_sig.c#13 integrate
.. //depot/projects/uart/kern/vfs_aio.c#4 integrate
.. //depot/projects/uart/kern/vfs_bio.c#10 integrate
.. //depot/projects/uart/kern/vfs_cluster.c#6 integrate
.. //depot/projects/uart/kern/vfs_default.c#4 integrate
.. //depot/projects/uart/kern/vfs_subr.c#7 integrate
.. //depot/projects/uart/kern/vnode_if.src#5 integrate
.. //depot/projects/uart/netgraph/ng_device.c#3 integrate
.. //depot/projects/uart/netgraph/ng_pppoe.c#3 integrate
.. //depot/projects/uart/netinet6/ipsec.c#5 integrate
.. //depot/projects/uart/pc98/pc98/wd_cd.c#4 integrate
.. //depot/projects/uart/sys/bufobj.h#2 integrate
.. //depot/projects/uart/sys/conf.h#6 integrate
.. //depot/projects/uart/sys/mount.h#4 integrate
.. //depot/projects/uart/ufs/ffs/ffs_alloc.c#3 integrate
.. //depot/projects/uart/ufs/ffs/ffs_extern.h#3 integrate
.. //depot/projects/uart/ufs/ffs/ffs_rawread.c#4 integrate
.. //depot/projects/uart/ufs/ffs/ffs_snapshot.c#4 integrate
.. //depot/projects/uart/ufs/ffs/ffs_softdep.c#7 integrate
.. //depot/projects/uart/ufs/ffs/ffs_vfsops.c#6 integrate
.. //depot/projects/uart/ufs/ffs/ffs_vnops.c#6 integrate
.. //depot/projects/uart/ufs/ufs/inode.h#4 integrate
.. //depot/projects/uart/ufs/ufs/ufs_vnops.c#7 integrate
.. //depot/projects/uart/ufs/ufs/ufsmount.h#3 integrate
.. //depot/projects/uart/vm/vm_page.c#10 integrate
.. //depot/projects/uart/vm/vm_pageout.c#11 integrate
Differences ...
==== //depot/projects/uart/amd64/amd64/machdep.c#9 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.621 2004/09/24 01:11:11 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.622 2004/10/28 12:16:03 simokawa Exp $");
#include "opt_atalk.h"
#include "opt_atpic.h"
@@ -823,6 +823,7 @@
char *cp;
struct bios_smap *smapbase, *smap, *smapend;
u_int32_t smapsize;
+ quad_t dcons_addr, dcons_size;
bzero(physmap, sizeof(physmap));
basemem = 0;
@@ -968,6 +969,13 @@
pte = CMAP1;
/*
+ * Get dcons buffer address
+ */
+ if (getenv_quad("dcons.addr", &dcons_addr) == 0 ||
+ getenv_quad("dcons.size", &dcons_size) == 0)
+ dcons_addr = 0;
+
+ /*
* physmap is in bytes, so when converting to page boundaries,
* round up the start address and round down the end address.
*/
@@ -987,6 +995,14 @@
if (pa >= 0x100000 && pa < first)
continue;
+ /*
+ * block out dcons buffer
+ */
+ if (dcons_addr > 0
+ && pa >= trunc_page(dcons_addr)
+ && pa < dcons_addr + dcons_size)
+ continue;
+
page_bad = FALSE;
/*
==== //depot/projects/uart/conf/files#31 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.959 2004/10/24 08:26:48 ru Exp $
+# $FreeBSD: src/sys/conf/files,v 1.960 2004/10/29 09:56:56 phk Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -973,6 +973,7 @@
geom/geom_subr.c standard
geom/geom_sunlabel.c optional geom_sunlabel
geom/geom_sunlabel_enc.c optional geom_sunlabel
+geom/geom_vfs.c standard
geom/geom_vol_ffs.c optional geom_vol
gnu/ext2fs/ext2_alloc.c optional ext2fs \
warning "kernel contains GPL contaminated ext2fs filesystem"
==== //depot/projects/uart/dev/dcons/dcons_os.c#2 (text+ko) ====
@@ -31,7 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/dcons/dcons_os.c,v 1.4 2004/10/24 12:41:04 simokawa Exp $
+ * $FreeBSD: src/sys/dev/dcons/dcons_os.c,v 1.5 2004/10/28 12:18:22 simokawa Exp $
*/
#include <sys/param.h>
@@ -488,7 +488,7 @@
static int
dcons_drv_init(int stage)
{
-#ifdef __i386__
+#if defined(__i386__) || defined(__amd64__)
quad_t addr, size;
#endif
@@ -503,9 +503,10 @@
dg.buf = NULL;
dg.size = DCONS_BUF_SIZE;
-#ifdef __i386__
+#if defined(__i386__) || defined(__amd64__)
if (getenv_quad("dcons.addr", &addr) > 0 &&
getenv_quad("dcons.size", &size) > 0) {
+#ifdef __i386__
vm_paddr_t pa;
/*
* Allow read/write access to dcons buffer.
@@ -513,6 +514,7 @@
for (pa = trunc_page(addr); pa < addr + size; pa += PAGE_SIZE)
*vtopte(KERNBASE + pa) |= PG_RW;
invltlb();
+#endif
/* XXX P to V */
dg.buf = (struct dcons_buf *)(vm_offset_t)(KERNBASE + addr);
dg.size = size;
==== //depot/projects/uart/dev/fdc/fdc.c#2 (text+ko) ====
@@ -51,7 +51,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/fdc/fdc.c,v 1.299 2004/10/22 19:01:10 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/fdc/fdc.c,v 1.300 2004/10/29 11:05:45 phk Exp $");
#include "opt_fdc.h"
@@ -1371,10 +1371,8 @@
device_busy(fd->dev);
}
-#ifdef notyet
if (w > 0 && (fd->flags & FD_WP))
return (EROFS);
-#endif
pp->sectorsize = fd->sectorsize;
pp->stripesize = fd->ft->heads * fd->ft->sectrac * fd->sectorsize;
==== //depot/projects/uart/dev/mcd/mcd.c#5 (text+ko) ====
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mcd/mcd.c,v 1.142 2004/06/16 09:46:49 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mcd/mcd.c,v 1.143 2004/10/29 11:09:21 phk Exp $");
static const char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
#include <sys/param.h>
@@ -257,8 +257,6 @@
return (ENXIO);
}
- dev->si_bsize_phys = sc->data.blksize;
-
sc->data.openflags = 1;
sc->data.partflags |= MCDREADRAW;
sc->data.flags |= MCDVALID;
@@ -347,11 +345,10 @@
return;
}
- bp = bioq_first(&sc->data.head);
+ bp = bioq_takefirst(&sc->data.head);
if (bp != 0) {
/* block found to process, dequeue */
/*MCD_TRACE("mcd_start: found block bp=0x%x\n",bp,0,0,0);*/
- bioq_remove(&sc->data.head, bp);
sc->data.flags |= MCDMBXBSY;
splx(s);
} else {
==== //depot/projects/uart/dev/scd/scd.c#5 (text+ko) ====
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/scd/scd.c,v 1.82 2004/07/28 06:20:57 kan Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/scd/scd.c,v 1.83 2004/10/29 11:09:50 phk Exp $");
#undef SCD_DEBUG
@@ -216,8 +216,6 @@
}
}
- dev->si_bsize_phys = sc->data.blksize;
-
sc->data.openflag = 1;
sc->data.flags |= SCDVALID;
@@ -306,10 +304,9 @@
return;
}
- bp = bioq_first(&sc->data.head);
+ bp = bioq_takefirst(&sc->data.head);
if (bp != 0) {
/* block found to process, dequeue */
- bioq_remove(&sc->data.head, bp);
sc->data.flags |= SCDMBXBSY;
splx(s);
} else {
==== //depot/projects/uart/dev/usb/uhci.c#7 (text+ko) ====
@@ -11,7 +11,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/usb/uhci.c,v 1.155 2004/10/03 16:12:29 stefanf Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/usb/uhci.c,v 1.156 2004/10/28 20:24:50 jhb Exp $");
/*
@@ -1552,7 +1552,7 @@
for (; timo >= 0; timo--) {
usb_delay_ms(&sc->sc_bus, 1);
DPRINTFN(20,("uhci_waitintr: 0x%04x\n", UREAD2(sc, UHCI_STS)));
- if (UREAD2(sc, UHCI_STS) & UHCI_STS_USBINT)
+ if (UREAD2(sc, UHCI_STS) & UHCI_STS_ALLINTRS)
uhci_intr1(sc);
if (xfer->status != USBD_IN_PROGRESS)
return;
@@ -1576,7 +1576,7 @@
{
uhci_softc_t *sc = (uhci_softc_t *)bus;
- if (UREAD2(sc, UHCI_STS) & UHCI_STS_USBINT)
+ if (UREAD2(sc, UHCI_STS) & UHCI_STS_ALLINTRS)
uhci_intr1(sc);
}
==== //depot/projects/uart/fs/devfs/devfs_vfsops.c#3 (text+ko) ====
@@ -31,7 +31,7 @@
* @(#)kernfs_vfsops.c 8.10 (Berkeley) 5/14/95
* From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vfsops.c 1.36
*
- * $FreeBSD: src/sys/fs/devfs/devfs_vfsops.c,v 1.33 2004/07/30 22:08:49 phk Exp $
+ * $FreeBSD: src/sys/fs/devfs/devfs_vfsops.c,v 1.34 2004/10/28 06:03:25 phk Exp $
*/
#include "opt_devfs.h"
@@ -67,10 +67,8 @@
struct vnode *rvp;
error = 0;
- /*
- * XXX: flag changes.
- */
- if (mp->mnt_flag & MNT_UPDATE)
+
+ if (mp->mnt_flag & (MNT_UPDATE | MNT_NODEV))
return (EOPNOTSUPP);
MALLOC(fmp, struct devfs_mount *, sizeof(struct devfs_mount),
==== //depot/projects/uart/fs/devfs/devfs_vnops.c#3 (text+ko) ====
@@ -31,7 +31,7 @@
* @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95
* From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vnops.c 1.43
*
- * $FreeBSD: src/sys/fs/devfs/devfs_vnops.c,v 1.75 2004/10/26 07:39:11 phk Exp $
+ * $FreeBSD: src/sys/fs/devfs/devfs_vnops.c,v 1.79 2004/10/29 11:10:55 phk Exp $
*/
/*
@@ -46,8 +46,6 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/bio.h>
-#include <sys/buf.h>
#include <sys/conf.h>
#include <sys/dirent.h>
#include <sys/fcntl.h>
@@ -60,7 +58,6 @@
#include <sys/proc.h>
#include <sys/stat.h>
#include <sys/sx.h>
-#include <sys/sysctl.h>
#include <sys/time.h>
#include <sys/unistd.h>
#include <sys/vnode.h>
@@ -92,7 +89,6 @@
#ifdef MAC
static int devfs_setlabel(struct vop_setlabel_args *ap);
#endif
-static int devfs_specstrategy(struct vop_specstrategy_args *);
static int devfs_symlink(struct vop_symlink_args *ap);
static int devfs_write(struct vop_write_args *ap);
@@ -707,10 +703,6 @@
if (vp->v_type == VBLK)
return (ENXIO);
- /* Don't allow open if fs is mounted -nodev. */
- if (vp->v_mount && (vp->v_mount->mnt_flag & MNT_NODEV))
- return (ENXIO);
-
if (dev == NULL)
return (ENXIO);
@@ -718,38 +710,6 @@
if (dev->si_iosize_max == 0)
dev->si_iosize_max = DFLTPHYS;
- /*
- * XXX: Disks get special billing here, but it is mostly wrong.
- * XXX: Disk partitions can overlap and the real checks should
- * XXX: take this into account, and consequently they need to
- * XXX: live in the disk slice code. Some checks do.
- */
- if (vn_isdisk(vp, NULL) && ap->a_cred != FSCRED &&
- (ap->a_mode & FWRITE)) {
- /*
- * Never allow opens for write if the disk is mounted R/W.
- */
- if (vp->v_rdev->si_mountpoint != NULL &&
- !(vp->v_rdev->si_mountpoint->mnt_flag & MNT_RDONLY))
- return (EBUSY);
-
- /*
- * When running in secure mode, do not allow opens
- * for writing if the disk is mounted.
- */
- error = securelevel_ge(td->td_ucred, 1);
- if (error && vfs_mountedon(vp))
- return (error);
-
- /*
- * When running in very secure mode, do not allow
- * opens for writing of any disks.
- */
- error = securelevel_ge(td->td_ucred, 2);
- if (error)
- return (error);
- }
-
dsw = dev_refthread(dev);
if (dsw == NULL)
return (ENXIO);
@@ -779,11 +739,6 @@
if (error)
return (error);
- if (vn_isdisk(vp, NULL)) {
- if (!dev->si_bsize_phys)
- dev->si_bsize_phys = DEV_BSIZE;
- vp->v_bufobj.bo_bsize = dev->si_bsize_phys;
- }
return (error);
}
@@ -1231,59 +1186,7 @@
}
#endif
-static int doslowdown = 0;
-SYSCTL_INT(_debug, OID_AUTO, doslowdown, CTLFLAG_RW, &doslowdown, 0, "");
-
static int
-devfs_specstrategy(ap)
- struct vop_specstrategy_args /* {
- struct vnode *a_vp;
- struct buf *a_bp;
- } */ *ap;
-{
- struct vnode *vp = ap->a_vp;
- struct buf *bp = ap->a_bp;
- struct mount *mp;
- struct thread *td = curthread;
-
- KASSERT(ap->a_vp->v_rdev == ap->a_bp->b_dev,
- ("%s, dev %s != %s", __func__,
- devtoname(ap->a_vp->v_rdev),
- devtoname(ap->a_bp->b_dev)));
- KASSERT(bp->b_iocmd == BIO_READ || bp->b_iocmd == BIO_WRITE,
- ("Wrong b_iocmd buf=%p cmd=%d", bp, bp->b_iocmd));
-
- /*
- * Slow down disk requests for niced processes.
- */
- if (doslowdown && td && td->td_proc->p_nice > 0) {
- msleep(td, NULL, PPAUSE | PCATCH, "ioslow",
- td->td_proc->p_nice);
- }
- /*
- * Collect statistics on synchronous and asynchronous read
- * and write counts for disks that have associated filesystems.
- */
- if (vn_isdisk(vp, NULL) && (mp = vp->v_rdev->si_mountpoint) != NULL) {
- if (bp->b_iocmd == BIO_WRITE) {
- if (bp->b_lock.lk_lockholder == LK_KERNPROC)
- mp->mnt_stat.f_asyncwrites++;
- else
- mp->mnt_stat.f_syncwrites++;
- } else {
- if (bp->b_lock.lk_lockholder == LK_KERNPROC)
- mp->mnt_stat.f_asyncreads++;
- else
- mp->mnt_stat.f_syncreads++;
- }
- }
-
- dev_strategy(bp);
-
- return (0);
-}
-
-static int
devfs_symlink(ap)
struct vop_symlink_args /* {
struct vnode *a_dvp;
@@ -1434,7 +1337,6 @@
#ifdef MAC
{ &vop_setlabel_desc, (vop_t *) devfs_setlabel },
#endif
- { &vop_specstrategy_desc, (vop_t *) devfs_specstrategy },
{ &vop_strategy_desc, (vop_t *) vop_panic },
{ &vop_symlink_desc, (vop_t *) vop_panic },
{ &vop_write_desc, (vop_t *) devfs_write },
==== //depot/projects/uart/fs/hpfs/hpfs.h#3 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/fs/hpfs/hpfs.h,v 1.14 2004/06/16 09:47:03 phk Exp $
+ * $FreeBSD: src/sys/fs/hpfs/hpfs.h,v 1.15 2004/10/29 10:43:07 phk Exp $
*/
/*#define HPFS_DEBUG 10*/
@@ -312,6 +312,8 @@
struct spblock hpm_sp;
struct mount * hpm_mp;
struct vnode * hpm_devvp;
+ struct g_consumer *hpm_cp;
+ struct bufobj *hpm_bo;
struct cdev *hpm_dev;
uid_t hpm_uid;
gid_t hpm_gid;
==== //depot/projects/uart/fs/hpfs/hpfs_vfsops.c#4 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/fs/hpfs/hpfs_vfsops.c,v 1.39 2004/07/30 22:08:49 phk Exp $
+ * $FreeBSD: src/sys/fs/hpfs/hpfs_vfsops.c,v 1.40 2004/10/29 10:43:07 phk Exp $
*/
@@ -40,6 +40,9 @@
#include <sys/fcntl.h>
#include <sys/malloc.h>
+#include <geom/geom.h>
+#include <geom/geom_vfs.h>
+
#include <vm/vm.h>
#include <vm/vm_param.h>
#include <vm/vm_page.h>
@@ -212,48 +215,41 @@
struct hpfs_args *argsp;
struct thread *td;
{
- int error, ncount, ronly;
+ int error, ronly;
struct sublock *sup;
struct spblock *spp;
struct hpfsmount *hpmp;
struct buf *bp = NULL;
struct vnode *vp;
struct cdev *dev = devvp->v_rdev;
+ struct g_consumer *cp;
+ struct bufobj *bo;
dprintf(("hpfs_mountfs():\n"));
- /*
- * Disallow multiple mounts of the same device.
- * Disallow mounting of a device that is currently in use
- * (except for root, which might share swap device for miniroot).
- * Flush out any old buffers remaining from a previous use.
- */
- error = vfs_mountedon(devvp);
- if (error)
- return (error);
- ncount = vcount(devvp);
- if (devvp->v_object)
- ncount -= 1;
- if (ncount > 1)
- return (EBUSY);
-
+ ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
- error = vinvalbuf(devvp, V_SAVE, td->td_ucred, td, 0, 0);
+ /* XXX: use VOP_ACCESS to check FS perms */
+ DROP_GIANT();
+ g_topology_lock();
+ error = g_vfs_open(devvp, &cp, "hpfs", ronly ? 0 : 1);
+ g_topology_unlock();
+ PICKUP_GIANT();
VOP_UNLOCK(devvp, 0, td);
if (error)
return (error);
- ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
- vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
- error = VOP_OPEN(devvp, ronly ? FREAD : FREAD|FWRITE, FSCRED, td, -1);
- VOP_UNLOCK(devvp, 0, td);
- if (error)
- return (error);
+ bo = &devvp->v_bufobj;
+ bo->bo_private = cp;
+ bo->bo_ops = g_vfs_bufops;
/*
* Do actual mount
*/
hpmp = malloc(sizeof(struct hpfsmount), M_HPFSMNT, M_WAITOK | M_ZERO);
+ hpmp->hpm_cp = cp;
+ hpmp->hpm_bo = bo;
+
/* Read in SuperBlock */
error = bread(devvp, SUBLOCK, SUSIZE, NOCRED, &bp);
if (error)
@@ -314,15 +310,13 @@
mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum;
mp->mnt_maxsymlinklen = 0;
mp->mnt_flag |= MNT_LOCAL;
- devvp->v_rdev->si_mountpoint = mp;
return (0);
failed:
if (bp)
brelse (bp);
mp->mnt_data = (qaddr_t)NULL;
- devvp->v_rdev->si_mountpoint = NULL;
- (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, td);
+ g_wither_geom_close(cp->geom, ENXIO);
return (error);
}
@@ -351,12 +345,8 @@
return (error);
}
- hpmp->hpm_devvp->v_rdev->si_mountpoint = NULL;
-
vinvalbuf(hpmp->hpm_devvp, V_SAVE, NOCRED, td, 0, 0);
- error = VOP_CLOSE(hpmp->hpm_devvp, ronly ? FREAD : FREAD|FWRITE,
- NOCRED, td);
-
+ g_wither_geom_close(hpmp->hpm_cp->geom, ENXIO);
vrele(hpmp->hpm_devvp);
dprintf(("hpfs_umount: freeing memory...\n"));
==== //depot/projects/uart/fs/hpfs/hpfs_vnops.c#4 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/fs/hpfs/hpfs_vnops.c,v 1.50 2004/10/27 06:48:20 phk Exp $
+ * $FreeBSD: src/sys/fs/hpfs/hpfs_vnops.c,v 1.51 2004/10/29 10:43:07 phk Exp $
*/
#include <sys/param.h>
@@ -648,6 +648,7 @@
register struct vnode *vp = ap->a_vp;
register struct hpfsnode *hp = VTOHP(ap->a_vp);
daddr_t blkno;
+ struct bufobj *bo;
int error;
dprintf(("hpfs_strategy(): \n"));
@@ -671,9 +672,9 @@
bufdone(bp);
return (0);
}
- bp->b_dev = hp->h_devvp->v_rdev;
bp->b_iooffset = dbtob(bp->b_blkno);
- VOP_SPECSTRATEGY(hp->h_devvp, bp);
+ bo = hp->h_hpmp->hpm_bo;
+ bo->bo_ops->bop_strategy(bo, bp);
return (0);
}
==== //depot/projects/uart/fs/msdosfs/msdosfs_denode.c#4 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_denode.c,v 1.74 2004/09/07 09:17:04 phk Exp $ */
+/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_denode.c,v 1.75 2004/10/29 10:40:14 phk Exp $ */
/* $NetBSD: msdosfs_denode.c,v 1.28 1998/02/10 14:10:00 mrg Exp $ */
/*-
@@ -371,7 +371,6 @@
}
} else
nvp->v_type = VREG;
-
ldep->de_modrev = init_va_filerev();
ldep->de_devvp = pmp->pm_devvp;
VREF(ldep->de_devvp);
==== //depot/projects/uart/fs/msdosfs/msdosfs_vfsops.c#7 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_vfsops.c,v 1.129 2004/10/25 09:14:01 phk Exp $ */
+/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_vfsops.c,v 1.131 2004/10/29 10:40:14 phk Exp $ */
/* $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $ */
/*-
@@ -71,6 +71,9 @@
#include <fs/msdosfs/denode.h>
#include <fs/msdosfs/fat.h>
+#include <geom/geom.h>
+#include <geom/geom_vfs.h>
+
#include "opt_msdosfs.h"
#define MSDOSFS_DFLTBSIZE 4096
@@ -209,7 +212,8 @@
if (mp->mnt_flag & MNT_UPDATE) {
pmp = VFSTOMSDOSFS(mp);
error = 0;
- if (!(pmp->pm_flags & MSDOSFSMNT_RONLY) && (mp->mnt_flag & MNT_RDONLY)) {
+ if (!(pmp->pm_flags & MSDOSFSMNT_RONLY) &&
+ (mp->mnt_flag & MNT_RDONLY)) {
error = VFS_SYNC(mp, MNT_WAIT, td->td_ucred, td);
if (error)
return (error);
@@ -217,13 +221,19 @@
if (mp->mnt_flag & MNT_FORCE)
flags |= FORCECLOSE;
error = vflush(mp, 0, flags, td);
+ DROP_GIANT();
+ g_topology_lock();
+ g_access(pmp->pm_cp, 0, -1, 0);
+ g_topology_unlock();
+ PICKUP_GIANT();
}
if (!error && (mp->mnt_flag & MNT_RELOAD))
/* not yet implemented */
error = EOPNOTSUPP;
if (error)
return (error);
- if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && (mp->mnt_kern_flag & MNTK_WANTRDWR)) {
+ if ((pmp->pm_flags & MSDOSFSMNT_RONLY) &&
+ (mp->mnt_kern_flag & MNTK_WANTRDWR)) {
/*
* If upgrade to read-write by non-root, then verify
* that user has necessary permissions on the device.
@@ -239,6 +249,13 @@
}
VOP_UNLOCK(devvp, 0, td);
}
+ DROP_GIANT();
+ g_topology_lock();
+ error = g_access(pmp->pm_cp, 0, 1, 0);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ if (error)
+ return (error);
pmp->pm_flags &= ~MSDOSFSMNT_RONLY;
/* Now that the volume is modifiable, mark it dirty. */
@@ -344,41 +361,21 @@
u_int8_t SecPerClust;
u_long clusters;
int ronly, error;
+ struct g_consumer *cp;
+ struct bufobj *bo;
- /*
- * Disallow multiple mounts of the same device.
- * Disallow mounting of a device that is currently in use
- * (except for root, which might share swap device for miniroot).
- * Flush out any old buffers remaining from a previous use.
- */
- error = vfs_mountedon(devvp);
- if (error)
- return (error);
- if (vcount(devvp) > 1)
- return (EBUSY);
- vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
- error = vinvalbuf(devvp, V_SAVE, td->td_ucred, td, 0, 0);
- if (error) {
- VOP_UNLOCK(devvp, 0, td);
- return (error);
- }
-
ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
- /*
- * XXX: open the device with read and write access even if only
- * read access is needed now. Write access is needed if the
- * filesystem is ever mounted read/write, and we don't change the
- * access mode for remounts.
- */
-#ifdef notyet
- error = VOP_OPEN(devvp, ronly ? FREAD : FREAD | FWRITE, FSCRED, td, -1);
-#else
- error = VOP_OPEN(devvp, FREAD | FWRITE, FSCRED, td, -1);
-#endif
+ /* XXX: use VOP_ACCESS to check FS perms */
+ DROP_GIANT();
+ g_topology_lock();
+ error = g_vfs_open(devvp, &cp, "msdos", ronly ? 0 : 1);
+ g_topology_unlock();
+ PICKUP_GIANT();
VOP_UNLOCK(devvp, 0, td);
if (error)
return (error);
+ bo = &devvp->v_bufobj;
bp = NULL; /* both used in error_exit */
pmp = NULL;
@@ -407,6 +404,8 @@
pmp = malloc(sizeof *pmp, M_MSDOSFSMNT, M_WAITOK | M_ZERO);
pmp->pm_mountp = mp;
+ pmp->pm_cp = cp;
+ pmp->pm_bo = bo;
/*
* Compute several useful quantities from the bpb in the
@@ -663,7 +662,6 @@
mp->mnt_stat.f_fsid.val[0] = dev2udev(dev);
mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum;
mp->mnt_flag |= MNT_LOCAL;
- devvp->v_rdev->si_mountpoint = mp;
#ifdef MSDOSFS_LARGE
msdosfs_fileno_init(mp);
@@ -674,12 +672,13 @@
error_exit:
if (bp)
brelse(bp);
- /* XXX: see comment above VOP_OPEN. */
-#ifdef notyet
- (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD | FWRITE, NOCRED, td);
-#else
- (void)VOP_CLOSE(devvp, FREAD | FWRITE, NOCRED, td);
-#endif
+ if (cp != NULL) {
+ DROP_GIANT();
+ g_topology_lock();
+ g_wither_geom_close(cp->geom, ENXIO);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ }
if (pmp) {
if (pmp->pm_inusemap)
free(pmp->pm_inusemap, M_MSDOSFSFAT);
@@ -718,7 +717,6 @@
if (pmp->pm_u2d)
msdosfs_iconv->close(pmp->pm_u2d);
}
- pmp->pm_devvp->v_rdev->si_mountpoint = NULL;
/* If the volume was mounted read/write, mark it clean now. */
if ((pmp->pm_flags & MSDOSFSMNT_RONLY) == 0) {
@@ -751,14 +749,11 @@
VI_UNLOCK(vp);
}
#endif
- /* XXX: see comment above VOP_OPEN. */
-#ifdef notyet
- error = VOP_CLOSE(pmp->pm_devvp,
- (pmp->pm_flags & MSDOSFSMNT_RONLY) ? FREAD : FREAD | FWRITE,
- NOCRED, td);
-#else
- error = VOP_CLOSE(pmp->pm_devvp, FREAD | FWRITE, NOCRED, td);
-#endif
+ DROP_GIANT();
+ g_topology_lock();
+ g_wither_geom_close(pmp->pm_cp->geom, ENXIO);
+ g_topology_unlock();
+ PICKUP_GIANT();
vrele(pmp->pm_devvp);
free(pmp->pm_inusemap, M_MSDOSFSFAT);
#ifdef MSDOSFS_LARGE
@@ -845,17 +840,16 @@
loop:
MNT_VNODE_FOREACH(vp, mp, nvp) {
VI_LOCK(vp);
- if (vp->v_iflag & VI_XLOCK) {
+ if (vp->v_type == VNON || (vp->v_iflag & VI_XLOCK)) {
VI_UNLOCK(vp);
continue;
}
MNT_IUNLOCK(mp);
dep = VTODE(vp);
- if (vp->v_type == VNON ||
- ((dep->de_flag &
+ if ((dep->de_flag &
(DE_ACCESS | DE_CREATE | DE_UPDATE | DE_MODIFIED)) == 0 &&
(vp->v_bufobj.bo_dirty.bv_cnt == 0 ||
- waitfor == MNT_LAZY))) {
+ waitfor == MNT_LAZY)) {
VI_UNLOCK(vp);
MNT_ILOCK(mp);
continue;
==== //depot/projects/uart/fs/msdosfs/msdosfs_vnops.c#7 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_vnops.c,v 1.150 2004/10/27 06:48:20 phk Exp $ */
+/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_vnops.c,v 1.151 2004/10/29 10:40:14 phk Exp $ */
/* $NetBSD: msdosfs_vnops.c,v 1.68 1998/02/10 14:10:04 mrg Exp $ */
/*-
@@ -1772,8 +1772,8 @@
} */ *ap;
{
struct buf *bp = ap->a_bp;
- struct vnode *vp;
struct denode *dep = VTODE(ap->a_vp);
+ struct bufobj *bo;
int error = 0;
daddr_t blkno;
@@ -1803,10 +1803,9 @@
* Read/write the block from/to the disk that contains the desired
* file block.
*/
- vp = dep->de_devvp;
- bp->b_dev = vp->v_rdev;
bp->b_iooffset = dbtob(bp->b_blkno);
- VOP_SPECSTRATEGY(vp, bp);
+ bo = dep->de_pmp->pm_bo;
+ bo->bo_ops->bop_strategy(bo, bp);
return (0);
}
==== //depot/projects/uart/fs/msdosfs/msdosfsmount.h#5 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/fs/msdosfs/msdosfsmount.h,v 1.33 2004/07/03 13:22:38 tjr Exp $ */
+/* $FreeBSD: src/sys/fs/msdosfs/msdosfsmount.h,v 1.34 2004/10/29 10:40:14 phk Exp $ */
/* $NetBSD: msdosfsmount.h,v 1.17 1997/11/17 15:37:07 ws Exp $ */
/*-
@@ -67,6 +67,8 @@
struct msdosfsmount {
struct mount *pm_mountp;/* vfs mount struct for this fs */
struct cdev *pm_dev; /* block special device mounted */
+ struct g_consumer *pm_cp;
+ struct bufobj *pm_bo;
uid_t pm_uid; /* uid to set as owner of the files */
gid_t pm_gid; /* gid to set as owner of the files */
mode_t pm_mask; /* mask to and with file protection bits
==== //depot/projects/uart/fs/ntfs/ntfs_vfsops.c#6 (text+ko) ====
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/fs/ntfs/ntfs_vfsops.c,v 1.61 2004/07/30 22:08:50 phk Exp $
+ * $FreeBSD: src/sys/fs/ntfs/ntfs_vfsops.c,v 1.62 2004/10/29 10:43:45 phk Exp $
*/
@@ -275,29 +275,9 @@
struct buf *bp;
struct ntfsmount *ntmp;
struct cdev *dev = devvp->v_rdev;
- int error, ronly, ncount, i;
+ int error, ronly, i;
struct vnode *vp;
- /*
- * Disallow multiple mounts of the same device.
- * Disallow mounting of a device that is currently in use
- * (except for root, which might share swap device for miniroot).
- * Flush out any old buffers remaining from a previous use.
- */
- error = vfs_mountedon(devvp);
- if (error)
- return (error);
- ncount = vcount(devvp);
- if (devvp->v_object)
- ncount -= 1;
- if (ncount > 1)
- return (EBUSY);
- vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
- error = vinvalbuf(devvp, V_SAVE, td->td_ucred, td, 0, 0);
- VOP_UNLOCK(devvp, 0, td);
- if (error)
- return (error);
-
ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
error = VOP_OPEN(devvp, ronly ? FREAD : FREAD|FWRITE, FSCRED, td, -1);
@@ -451,7 +431,6 @@
mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum;
mp->mnt_maxsymlinklen = 0;
mp->mnt_flag |= MNT_LOCAL;
- devvp->v_rdev->si_mountpoint = mp;
return (0);
out1:
@@ -462,7 +441,6 @@
dprintf(("ntfs_mountfs: vflush failed\n"));
out:
- devvp->v_rdev->si_mountpoint = NULL;
if (bp)
brelse(bp);
@@ -508,13 +486,6 @@
if (error)
printf("ntfs_unmount: vflush failed(sysnodes): %d\n",error);
- /* Check if the type of device node isn't VBAD before
- * touching v_cdev. If the device vnode is revoked, the
- * field is NULL and touching it causes null pointer derefercence.
- */
- if (ntmp->ntm_devvp->v_type != VBAD)
- ntmp->ntm_devvp->v_rdev->si_mountpoint = NULL;
-
vinvalbuf(ntmp->ntm_devvp, V_SAVE, NOCRED, td, 0, 0);
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list