diff options
author | kato <kato@FreeBSD.org> | 1997-09-27 13:40:20 +0000 |
---|---|---|
committer | kato <kato@FreeBSD.org> | 1997-09-27 13:40:20 +0000 |
commit | fe9b86cf0b7a453c772a2756389fda91c12c3fab (patch) | |
tree | e695260038ca9665181b5b5c99ae6fa77fba443a /sys/miscfs | |
parent | 31e1d6ad00b9d8f39549115d4ef76fbee62e9748 (diff) | |
download | FreeBSD-src-fe9b86cf0b7a453c772a2756389fda91c12c3fab.zip FreeBSD-src-fe9b86cf0b7a453c772a2756389fda91c12c3fab.tar.gz |
Clustered read and write are switched at mount-option level.
1. Clustered I/O is switched by the MNT_NOCLUSTERR and MNT_NOCLUSTERW
bits of the mnt_flag. The sysctl variables, vfs.foo.doclusterread
and vfs.foo.doclusterwrite are deleted. Only mount option can
control clustered I/O from userland.
2. When foofs_mount mounts block device, foofs_mount checks D_CLUSTERR
and D_CLUSTERW bits of the d_flags member in the block device switch
table. If D_NOCLUSTERR / D_NOCLUSTERW are set, MNT_NOCLUSTERR /
MNT_NOCLUSTERW bits will be set. In this case, MNT_NOCLUSTERR and
MNT_NOCLUSTERW cannot be cleared from userland.
3. Vnode driver disables both clustered read and write.
4. Union filesystem disables clutered write.
Reviewed by: bde
Diffstat (limited to 'sys/miscfs')
-rw-r--r-- | sys/miscfs/specfs/spec_vnops.c | 11 | ||||
-rw-r--r-- | sys/miscfs/union/union_vfsops.c | 7 |
2 files changed, 13 insertions, 5 deletions
diff --git a/sys/miscfs/specfs/spec_vnops.c b/sys/miscfs/specfs/spec_vnops.c index b5407ee..dd05fc0 100644 --- a/sys/miscfs/specfs/spec_vnops.c +++ b/sys/miscfs/specfs/spec_vnops.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)spec_vnops.c 8.14 (Berkeley) 5/21/95 - * $Id: spec_vnops.c,v 1.41 1997/09/02 20:06:12 bde Exp $ + * $Id: spec_vnops.c,v 1.42 1997/09/14 02:58:02 peter Exp $ */ #include <sys/param.h> @@ -176,7 +176,8 @@ spec_open(ap) */ if (securelevel >= 2 && cdevsw[maj]->d_bdev - && cdevsw[maj]->d_bdev->d_flags == D_DISK) + && (cdevsw[maj]->d_bdev->d_flags & D_TYPEMASK) == + D_DISK) return (EPERM); /* * When running in secure mode, do not allow opens @@ -220,7 +221,8 @@ spec_open(ap) * opens for writing of any disk block devices. */ if (securelevel >= 2 && ap->a_cred != FSCRED && - (ap->a_mode & FWRITE) && bdevsw[maj]->d_flags == D_DISK) + (ap->a_mode & FWRITE) && + (bdevsw[maj]->d_flags & D_TYPEMASK) == D_DISK) return (EPERM); /* * Do not allow opens of block devices that are @@ -422,7 +424,8 @@ spec_ioctl(ap) case VBLK: if (ap->a_command == 0 && (int)ap->a_data == B_TAPE) - if (bdevsw[major(dev)]->d_flags == D_TAPE) + if ((bdevsw[major(dev)]->d_flags & D_TYPEMASK) == + D_TAPE) return (0); else return (1); diff --git a/sys/miscfs/union/union_vfsops.c b/sys/miscfs/union/union_vfsops.c index e7954be..8478a1c 100644 --- a/sys/miscfs/union/union_vfsops.c +++ b/sys/miscfs/union/union_vfsops.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * @(#)union_vfsops.c 8.20 (Berkeley) 5/20/95 - * $Id: union_vfsops.c,v 1.18 1997/08/02 14:32:29 bde Exp $ + * $Id: union_vfsops.c,v 1.19 1997/08/16 19:15:22 wollman Exp $ */ /* @@ -103,6 +103,11 @@ union_mount(mp, path, data, ndp, p) #endif /* + * Disable clustered write, otherwise system becomes unstable. + */ + mp->mnt_flag |= MNT_NOCLUSTERW; + + /* * Update is a no-op */ if (mp->mnt_flag & MNT_UPDATE) { |