Date: Wed, 24 Sep 1997 19:17:40 +0900 From: KATO Takenori <kato@migmatite.eps.nagoya-u.ac.jp> To: phk@critter.freebsd.dk Cc: current@FreeBSD.ORG Subject: Re: Daily SNAPshots at current.freebsd.org shut down for now. Message-ID: <199709241017.TAA01768@gneiss.eps.nagoya-u.ac.jp> In-Reply-To: Your message of "Wed, 24 Sep 1997 10:49:55 %2B0200" References: <979.875090995@critter.freebsd.dk>
next in thread | previous in thread | raw e-mail | index | archive | help
> disable clustering on a per filesystem or mount point basis and disallow
> it for vn devices. If you think about it, it doesn't make sense in the
> first place.
How about following following patch?
---------- BEGIN ----------
*** sys/vnode.h.ORIG Wed Sep 24 18:47:16 1997
--- sys/vnode.h Wed Sep 24 18:49:46 1997
***************
*** 111,129 ****
/*
* Vnode flags.
*/
! #define VROOT 0x0001 /* root of its file system */
! #define VTEXT 0x0002 /* vnode is a pure text prototype */
! #define VSYSTEM 0x0004 /* vnode being used by kernel */
! #define VOLOCK 0x0008 /* vnode is locked waiting for an object */
! #define VOWANT 0x0010 /* a process is waiting for VOLOCK */
! #define VXLOCK 0x0100 /* vnode is locked to change underlying type */
! #define VXWANT 0x0200 /* process is waiting for vnode */
! #define VBWAIT 0x0400 /* waiting for output to complete */
! #define VALIASED 0x0800 /* vnode has an alias */
! #define VDIROP 0x1000 /* LFS: vnode is involved in a directory op */
! #define VVMIO 0x2000 /* VMIO flag */
! #define VNINACT 0x4000 /* LFS: skip ufs_inactive() in lfs_vunref */
! #define VAGE 0x8000 /* Insert vnode at head of free list */
/*
* Vnode attributes. A field value of VNOVAL represents a field whose value
--- 111,130 ----
/*
* Vnode flags.
*/
! #define VROOT 0x00001 /* root of its file system */
! #define VTEXT 0x00002 /* vnode is a pure text prototype */
! #define VSYSTEM 0x00004 /* vnode being used by kernel */
! #define VOLOCK 0x00008 /* vnode is locked waiting for an object */
! #define VOWANT 0x00010 /* a process is waiting for VOLOCK */
! #define VXLOCK 0x00100 /* vnode is locked to change underlying type */
! #define VXWANT 0x00200 /* process is waiting for vnode */
! #define VBWAIT 0x00400 /* waiting for output to complete */
! #define VALIASED 0x00800 /* vnode has an alias */
! #define VDIROP 0x01000 /* LFS: vnode is involved in a directory op */
! #define VVMIO 0x02000 /* VMIO flag */
! #define VNINACT 0x04000 /* LFS: skip ufs_inactive() in lfs_vunref */
! #define VAGE 0x08000 /* Insert vnode at head of free list */
! #define VNOCLUSTER 0x10000 /* Disable cluster read and write */
/*
* Vnode attributes. A field value of VNOVAL represents a field whose value
*** dev/vn/vn.c.ORIG Wed Sep 24 18:59:07 1997
--- dev/vn/vn.c Wed Sep 24 19:00:42 1997
***************
*** 467,472 ****
--- 467,473 ----
}
VOP_UNLOCK(nd.ni_vp);
vn->sc_vp = nd.ni_vp;
+ vn->sc_vp->v_flag |= VNOCLUSTER; /* disable cluster read write */
vn->sc_size = btodb(vattr.va_size); /* note truncation */
error = vnsetcred(vn, p->p_ucred);
if (error) {
*** ufs/ufs/ufs_readwrite.c.ORIG Wed Sep 24 18:51:04 1997
--- ufs/ufs/ufs_readwrite.c Wed Sep 24 18:52:38 1997
***************
*** 120,126 ****
#else
if (lblktosize(fs, nextlbn) >= ip->i_size)
error = bread(vp, lbn, size, NOCRED, &bp);
! else if (doclusterread)
error = cluster_read(vp,
ip->i_size, lbn, size, NOCRED, &bp);
else if (lbn - 1 == vp->v_lastr) {
--- 120,126 ----
#else
if (lblktosize(fs, nextlbn) >= ip->i_size)
error = bread(vp, lbn, size, NOCRED, &bp);
! else if (doclusterread && !(vp->v_flag & VNOCLUSTER))
error = cluster_read(vp,
ip->i_size, lbn, size, NOCRED, &bp);
else if (lbn - 1 == vp->v_lastr) {
***************
*** 286,292 ****
if (ioflag & IO_SYNC) {
(void)bwrite(bp);
} else if (xfersize + blkoffset == fs->fs_bsize) {
! if (doclusterwrite) {
bp->b_flags |= B_CLUSTEROK;
cluster_write(bp, ip->i_size);
} else {
--- 286,292 ----
if (ioflag & IO_SYNC) {
(void)bwrite(bp);
} else if (xfersize + blkoffset == fs->fs_bsize) {
! if (doclusterwrite && !(vp->v_flag & VNOCLUSTER)) {
bp->b_flags |= B_CLUSTEROK;
cluster_write(bp, ip->i_size);
} else {
*** isofs/cd9660/cd9660_vnops.c.ORIG Wed Sep 24 18:54:59 1997
--- isofs/cd9660/cd9660_vnops.c Wed Sep 24 18:55:38 1997
***************
*** 341,347 ****
n = diff;
size = iso_blksize(imp, ip, lbn);
rablock = lbn + 1;
! if (doclusterread) {
if (iso_lblktosize(imp, rablock) <= ip->i_size)
error = cluster_read(vp, ip->i_size,
lbn, size, NOCRED, &bp);
--- 341,347 ----
n = diff;
size = iso_blksize(imp, ip, lbn);
rablock = lbn + 1;
! if (doclusterread && !(vp->v_flag & VNOCLUSTER)) {
if (iso_lblktosize(imp, rablock) <= ip->i_size)
error = cluster_read(vp, ip->i_size,
lbn, size, NOCRED, &bp);
*** gnu/ext2fs/ext2_readwrite.c.ORIG Wed Sep 24 18:53:10 1997
--- gnu/ext2fs/ext2_readwrite.c Wed Sep 24 18:54:24 1997
***************
*** 112,118 ****
if (lblktosize(fs, nextlbn) >= ip->i_size)
error = bread(vp, lbn, size, NOCRED, &bp);
! else if (doclusterread)
error = cluster_read(vp,
ip->i_size, lbn, size, NOCRED, &bp);
else if (lbn - 1 == vp->v_lastr) {
--- 112,118 ----
if (lblktosize(fs, nextlbn) >= ip->i_size)
error = bread(vp, lbn, size, NOCRED, &bp);
! else if (doclusterread && !(vp->v_flag & VNOCLUSTER))
error = cluster_read(vp,
ip->i_size, lbn, size, NOCRED, &bp);
else if (lbn - 1 == vp->v_lastr) {
***************
*** 284,290 ****
if (ioflag & IO_SYNC) {
(void)bwrite(bp);
} else if (xfersize + blkoffset == fs->s_frag_size) {
! if (doclusterwrite) {
#if defined(__FreeBSD__)
bp->b_flags |= B_CLUSTEROK;
#endif
--- 284,290 ----
if (ioflag & IO_SYNC) {
(void)bwrite(bp);
} else if (xfersize + blkoffset == fs->s_frag_size) {
! if (doclusterwrite && !(vp->v_flag & VNOCLUSTER)) {
#if defined(__FreeBSD__)
bp->b_flags |= B_CLUSTEROK;
#endif
----
----
KATO Takenori <kato@ganko.eps.nagoya-u.ac.jp>
Dept. Earth Planet. Sci., Nagoya Univ., Nagoya, 464-01, Japan
PGP public key: finger kato@eclogite.eps.nagoya-u.ac.jp
------------------- Powered by FreeBSD(98) -------------------
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709241017.TAA01768>
