X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..5eebf7385fedb1517b66b53c28e5aa6bb0a2be50:/bsd/miscfs/devfs/devfs_vfsops.c?ds=sidebyside diff --git a/bsd/miscfs/devfs/devfs_vfsops.c b/bsd/miscfs/devfs/devfs_vfsops.c index 4b11822bf..4c6b4729b 100644 --- a/bsd/miscfs/devfs/devfs_vfsops.c +++ b/bsd/miscfs/devfs/devfs_vfsops.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -87,7 +87,6 @@ devfs_init(struct vfsconf *vfsp) if (devfs_sinit()) return (EOPNOTSUPP); - printf("devfs enabled\n"); devfs_make_node(makedev(0, 0), DEVFS_CHAR, UID_ROOT, GID_WHEEL, 0622, "console"); devfs_make_node(makedev(2, 0), DEVFS_CHAR, @@ -201,13 +200,15 @@ devfs_unmount( struct mount *mp, int mntflags, struct proc *p) { struct devfsmount *devfs_mp_p = (struct devfsmount *)mp->mnt_data; int flags = 0; + int force = 0; int error; if (mntflags & MNT_FORCE) { flags |= FORCECLOSE; + force = 1; } error = vflush(mp, NULLVP, flags); - if (error) + if (error && !force) return error; DEVFS_LOCK(p); @@ -374,8 +375,14 @@ devfs_kernel_mount(char * mntname) /* * Allocate and initialize the filesystem. */ - mp = _MALLOC_ZONE((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK); + MALLOC_ZONE(mp, struct mount *, (u_long)sizeof(struct mount), + M_MOUNT, M_WAITOK); bzero((char *)mp, (u_long)sizeof(struct mount)); + + /* Initialize the default IO constraints */ + mp->mnt_maxreadcnt = mp->mnt_maxwritecnt = MAXPHYS; + mp->mnt_segreadcnt = mp->mnt_segwritecnt = 32; + lockinit(&mp->mnt_lock, PVFS, "vfslock", 0, 0); (void)vfs_busy(mp, LK_NOWAIT, 0, procp); LIST_INIT(&mp->mnt_vnodelist); @@ -396,12 +403,15 @@ devfs_kernel_mount(char * mntname) if (error) { printf("devfs_kernel_mount: mount %s failed: %d", mntname, error); mp->mnt_vfc->vfc_refcount--; + + if (mp->mnt_kern_flag & MNTK_IO_XINFO) + FREE(mp->mnt_xinfo_ptr, M_TEMP); vfs_unbusy(mp, procp); - _FREE_ZONE(mp, sizeof (struct mount), M_MOUNT); + + FREE_ZONE(mp, sizeof (struct mount), M_MOUNT); vput(vp); return (error); } - printf("devfs on %s\n", mntname); simple_lock(&mountlist_slock); CIRCLEQ_INSERT_TAIL(&mountlist, mp, mnt_list); simple_unlock(&mountlist_slock);