diff options
author | David Greenman <dg@FreeBSD.org> | 1998-11-13 01:01:44 +0000 |
---|---|---|
committer | David Greenman <dg@FreeBSD.org> | 1998-11-13 01:01:44 +0000 |
commit | 1c680b45a20dd69432f01bef381073b0747d8213 (patch) | |
tree | af6e2d610e69c0753765103dceae2d06bfb21343 | |
parent | 468662e864eb338e13e80b548866f7843cac020e (diff) |
Notes
-rw-r--r-- | sys/kern/vfs_cluster.c | 19 | ||||
-rw-r--r-- | sys/sys/bio.h | 16 | ||||
-rw-r--r-- | sys/sys/buf.h | 16 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_alloc.c | 18 |
4 files changed, 38 insertions, 31 deletions
diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c index c7f7f323d45cf..2fcdbd9c7cb1f 100644 --- a/sys/kern/vfs_cluster.c +++ b/sys/kern/vfs_cluster.c @@ -33,7 +33,7 @@ * SUCH DAMAGE. * * @(#)vfs_cluster.c 8.7 (Berkeley) 2/13/94 - * $Id: vfs_cluster.c,v 1.70 1998/09/04 08:06:55 dfr Exp $ + * $Id: vfs_cluster.c,v 1.71 1998/10/25 17:44:52 phk Exp $ */ #include "opt_debug_cluster.h" @@ -43,6 +43,7 @@ #include <sys/proc.h> #include <sys/buf.h> #include <sys/vnode.h> +#include <sys/malloc.h> #include <sys/mount.h> #include <sys/resourcevar.h> #include <vm/vm.h> @@ -57,10 +58,10 @@ static int rcluster= 0; SYSCTL_INT(_debug, OID_AUTO, rcluster, CTLFLAG_RW, &rcluster, 0, ""); #endif -#ifdef notyet_block_reallocation_enabled +static MALLOC_DEFINE(M_SEGMENT, "cluster_save buffer", "cluster_save buffer"); + static struct cluster_save * cluster_collectbufs __P((struct vnode *vp, struct buf *last_bp)); -#endif static struct buf * cluster_rbuild __P((struct vnode *vp, u_quad_t filesize, daddr_t lbn, daddr_t blkno, long size, int run, struct buf *fbp)); @@ -539,16 +540,7 @@ cluster_write(bp, filesize) * reallocating to make it sequential. */ cursize = vp->v_lastw - vp->v_cstart + 1; -#ifndef notyet_block_reallocation_enabled if (((u_quad_t) bp->b_offset + lblocksize) != filesize || - lbn != vp->v_lastw + 1 || - vp->v_clen <= cursize) { - if (!async) - cluster_wbuild(vp, lblocksize, - vp->v_cstart, cursize); - } -#else - if ((lbn + 1) * lblocksize != filesize || lbn != vp->v_lastw + 1 || vp->v_clen <= cursize) { if (!async) cluster_wbuild(vp, lblocksize, @@ -583,7 +575,6 @@ cluster_write(bp, filesize) return; } } -#endif /* notyet_block_reallocation_enabled */ } /* * Consider beginning a cluster. If at end of file, make @@ -822,7 +813,6 @@ cluster_wbuild(vp, size, start_lbn, len) return totalwritten; } -#ifdef notyet_block_reallocation_enabled /* * Collect together all the buffers in a cluster. * Plus add one additional buffer. @@ -848,4 +838,3 @@ cluster_collectbufs(vp, last_bp) buflist->bs_nchildren = i + 1; return (buflist); } -#endif /* notyet_block_reallocation_enabled */ diff --git a/sys/sys/bio.h b/sys/sys/bio.h index 85afbc3bbf7d7..191fdbcad2ffe 100644 --- a/sys/sys/bio.h +++ b/sys/sys/bio.h @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)buf.h 8.9 (Berkeley) 3/30/95 - * $Id: buf.h,v 1.59 1998/10/03 16:19:27 bde Exp $ + * $Id: buf.h,v 1.60 1998/10/31 14:05:11 peter Exp $ */ #ifndef _SYS_BUF_H_ @@ -184,6 +184,20 @@ struct buf_queue_head { struct buf *switch_point; }; +/* + * This structure describes a clustered I/O. It is stored in the b_saveaddr + * field of the buffer on which I/O is done. At I/O completion, cluster + * callback uses the structure to parcel I/O's to individual buffers, and + * then free's this structure. + */ +struct cluster_save { + long bs_bcount; /* Saved b_bcount. */ + long bs_bufsize; /* Saved b_bufsize. */ + void *bs_saveaddr; /* Saved b_addr. */ + int bs_nchildren; /* Number of associated buffers. */ + struct buf **bs_children; /* List of associated buffers. */ +}; + static __inline void bufq_init __P((struct buf_queue_head *head)); static __inline void bufq_insert_tail __P((struct buf_queue_head *head, diff --git a/sys/sys/buf.h b/sys/sys/buf.h index 85afbc3bbf7d7..191fdbcad2ffe 100644 --- a/sys/sys/buf.h +++ b/sys/sys/buf.h @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)buf.h 8.9 (Berkeley) 3/30/95 - * $Id: buf.h,v 1.59 1998/10/03 16:19:27 bde Exp $ + * $Id: buf.h,v 1.60 1998/10/31 14:05:11 peter Exp $ */ #ifndef _SYS_BUF_H_ @@ -184,6 +184,20 @@ struct buf_queue_head { struct buf *switch_point; }; +/* + * This structure describes a clustered I/O. It is stored in the b_saveaddr + * field of the buffer on which I/O is done. At I/O completion, cluster + * callback uses the structure to parcel I/O's to individual buffers, and + * then free's this structure. + */ +struct cluster_save { + long bs_bcount; /* Saved b_bcount. */ + long bs_bufsize; /* Saved b_bufsize. */ + void *bs_saveaddr; /* Saved b_addr. */ + int bs_nchildren; /* Number of associated buffers. */ + struct buf **bs_children; /* List of associated buffers. */ +}; + static __inline void bufq_init __P((struct buf_queue_head *head)); static __inline void bufq_insert_tail __P((struct buf_queue_head *head, diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c index bd127db179f1e..b0b9126c144ad 100644 --- a/sys/ufs/ffs/ffs_alloc.c +++ b/sys/ufs/ffs/ffs_alloc.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)ffs_alloc.c 8.18 (Berkeley) 5/26/95 - * $Id: ffs_alloc.c,v 1.52 1998/09/05 14:13:12 phk Exp $ + * $Id: ffs_alloc.c,v 1.53 1998/09/07 11:50:18 bde Exp $ */ #include "opt_quota.h" @@ -42,13 +42,13 @@ #include <sys/proc.h> #include <sys/vnode.h> #include <sys/mount.h> -#ifdef notyet +#include <sys/kernel.h> #include <sys/sysctl.h> -#endif #include <sys/syslog.h> #include <ufs/ufs/quota.h> #include <ufs/ufs/inode.h> +#include <ufs/ufs/ufs_extern.h> #include <ufs/ufs/ufsmount.h> #include <ufs/ffs/fs.h> @@ -65,10 +65,8 @@ static int ffs_checkblk __P((struct inode *, ufs_daddr_t, long)); #endif static void ffs_clusteracct __P((struct fs *, struct cg *, ufs_daddr_t, int)); -#ifdef notyet static ufs_daddr_t ffs_clusteralloc __P((struct inode *, int, ufs_daddr_t, int)); -#endif static ino_t ffs_dirpref __P((struct fs *)); static ufs_daddr_t ffs_fragextend __P((struct inode *, int, long, int, int)); static void ffs_fserr __P((struct fs *, u_int, char *)); @@ -323,7 +321,6 @@ nospace: return (ENOSPC); } -#ifdef notyet SYSCTL_NODE(_vfs, OID_AUTO, ffs, CTLFLAG_RW, 0, "FFS filesystem"); /* @@ -347,7 +344,6 @@ static int doreallocblks = 1; SYSCTL_INT(_vfs_ffs, FFS_REALLOCBLKS, doreallocblks, CTLFLAG_RW, &doreallocblks, 0, ""); static int prtrealloc = 0; -#endif int ffs_reallocblks(ap) @@ -356,9 +352,6 @@ ffs_reallocblks(ap) struct cluster_save *a_buflist; } */ *ap; { -#if !defined (not_yes) - return (ENOSPC); -#else struct fs *fs; struct inode *ip; struct vnode *vp; @@ -509,7 +502,7 @@ ffs_reallocblks(ap) } else { ip->i_flag |= IN_CHANGE | IN_UPDATE; if (!doasyncfree) { - gettime(&tv); + getmicrotime(&tv); UFS_UPDATE(vp, &tv, &tv, 1); } } @@ -553,7 +546,6 @@ fail: if (sbap != &ip->i_db[0]) brelse(sbp); return (ENOSPC); -#endif } /* @@ -1087,7 +1079,6 @@ gotit: return (blkno); } -#ifdef notyet /* * Determine whether a cluster can be allocated. * @@ -1196,7 +1187,6 @@ fail: brelse(bp); return (0); } -#endif /* * Determine whether an inode can be allocated. |