Skip site navigation (1)Skip section navigation (2)
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>