summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Zhukov <zhuk@cvs.openbsd.org>2016-03-25 18:53:42 +0000
committerVadim Zhukov <zhuk@cvs.openbsd.org>2016-03-25 18:53:42 +0000
commit430580c6870ab387b24cd606abe550fc459ad76f (patch)
tree3856010c9e1bfa1f9f5c6b55a05455a0e2b111c5
parent0caf1e51b79119a7d6e79c85dc2b35d1820ced43 (diff)
Free some more space in kernel - for network code, of course - by removal
of three unused FS-related functions. okay mpi@ and beck@
-rw-r--r--sys/conf/files3
-rw-r--r--sys/kern/vfs_cluster.c242
2 files changed, 1 insertions, 244 deletions
diff --git a/sys/conf/files b/sys/conf/files
index dd30cf3061b..3fe140b33fb 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1,4 +1,4 @@
-# $OpenBSD: files,v 1.615 2016/03/09 18:20:29 stsp Exp $
+# $OpenBSD: files,v 1.616 2016/03/25 18:53:41 zhuk Exp $
# $NetBSD: files,v 1.87 1996/05/19 17:17:50 jonathan Exp $
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
@@ -726,7 +726,6 @@ file kern/uipc_usrreq.c
file kern/vfs_bio.c
file kern/vfs_biomem.c
file kern/vfs_cache.c
-file kern/vfs_cluster.c
file kern/vfs_default.c
file kern/vfs_init.c
file kern/vfs_lockf.c
diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c
deleted file mode 100644
index 1e7251028cc..00000000000
--- a/sys/kern/vfs_cluster.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/* $OpenBSD: vfs_cluster.c,v 1.45 2015/10/03 22:36:56 deraadt Exp $ */
-/* $NetBSD: vfs_cluster.c,v 1.12 1996/04/22 01:39:05 christos Exp $ */
-
-/*
- * Copyright (c) 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)vfs_cluster.c 8.8 (Berkeley) 7/28/94
- */
-
-#include <sys/param.h>
-#include <sys/buf.h>
-#include <sys/vnode.h>
-#include <sys/mount.h>
-#include <sys/malloc.h>
-#include <sys/systm.h>
-
-void cluster_wbuild(struct vnode *, struct buf *, long, daddr_t, int,
- daddr_t);
-struct cluster_save *cluster_collectbufs(struct vnode *, struct cluster_info *,
- struct buf *, size_t *);
-
-/*
- * Do clustered write for FFS.
- *
- * Three cases:
- * 1. Write is not sequential (write asynchronously)
- * Write is sequential:
- * 2. beginning of cluster - begin cluster
- * 3. middle of a cluster - add to cluster
- * 4. end of a cluster - asynchronously write cluster
- */
-void
-cluster_write(struct buf *bp, struct cluster_info *ci, u_quad_t filesize)
-{
- struct vnode *vp;
- daddr_t lbn;
- int maxclen, cursize;
-
- vp = bp->b_vp;
- lbn = bp->b_lblkno;
-
- /* Initialize vnode to beginning of file. */
- if (lbn == 0)
- ci->ci_lasta = ci->ci_clen = ci->ci_cstart = ci->ci_lastw = 0;
-
- if (ci->ci_clen == 0 || lbn != ci->ci_lastw + 1 ||
- (bp->b_blkno != ci->ci_lasta + btodb(bp->b_bcount))) {
- maxclen = MAXBSIZE / vp->v_mount->mnt_stat.f_iosize - 1;
- if (ci->ci_clen != 0) {
- /*
- * Next block is not sequential.
- *
- * If we are not writing at end of file, the process
- * seeked to another point in the file since its
- * last write, or we have reached our maximum
- * cluster size, then push the previous cluster.
- * Otherwise try reallocating to make it sequential.
- */
- cursize = ci->ci_lastw - ci->ci_cstart + 1;
- if (((u_quad_t)(lbn + 1)) * bp->b_bcount != filesize ||
- lbn != ci->ci_lastw + 1 || ci->ci_clen <= cursize) {
- cluster_wbuild(vp, NULL, bp->b_bcount,
- ci->ci_cstart, cursize, lbn);
- } else {
- struct buf **bpp, **endbp;
- struct cluster_save *buflist;
- size_t buflistsiz;
-
- buflist = cluster_collectbufs(vp, ci, bp, &buflistsiz);
- endbp = &buflist->bs_children
- [buflist->bs_nchildren - 1];
- if (VOP_REALLOCBLKS(vp, buflist)) {
- /*
- * Failed, push the previous cluster.
- */
- for (bpp = buflist->bs_children;
- bpp < endbp; bpp++)
- brelse(*bpp);
- free(buflist, M_VCLUSTER, buflistsiz);
- cluster_wbuild(vp, NULL, bp->b_bcount,
- ci->ci_cstart, cursize, lbn);
- } else {
- /*
- * Succeeded, keep building cluster.
- */
- for (bpp = buflist->bs_children;
- bpp <= endbp; bpp++)
- bdwrite(*bpp);
- free(buflist, M_VCLUSTER, buflistsiz);
- ci->ci_lastw = lbn;
- ci->ci_lasta = bp->b_blkno;
- return;
- }
- }
- }
- /*
- * Consider beginning a cluster.
- * If at end of file, make cluster as large as possible,
- * otherwise find size of existing cluster.
- */
- if ((u_quad_t)(lbn + 1) * (u_quad_t)bp->b_bcount != filesize &&
- (VOP_BMAP(vp, lbn, NULL, &bp->b_blkno, &maxclen) ||
- bp->b_blkno == -1)) {
- bawrite(bp);
- ci->ci_clen = 0;
- ci->ci_lasta = bp->b_blkno;
- ci->ci_cstart = lbn + 1;
- ci->ci_lastw = lbn;
- return;
- }
- ci->ci_clen = maxclen;
- if (maxclen == 0) { /* I/O not contiguous */
- ci->ci_cstart = lbn + 1;
- bawrite(bp);
- } else { /* Wait for rest of cluster */
- ci->ci_cstart = lbn;
- bdwrite(bp);
- }
- } else if (lbn == ci->ci_cstart + ci->ci_clen) {
- /*
- * At end of cluster, write it out.
- */
- cluster_wbuild(vp, bp, bp->b_bcount, ci->ci_cstart,
- ci->ci_clen + 1, lbn);
- ci->ci_clen = 0;
- ci->ci_cstart = lbn + 1;
- } else
- /*
- * In the middle of a cluster, so just delay the
- * I/O for now.
- */
- bdwrite(bp);
- ci->ci_lastw = lbn;
- ci->ci_lasta = bp->b_blkno;
-}
-
-/*
- * The last lbn argument is the current block on which I/O is being
- * performed. Check to see that it doesn't fall in the middle of
- * the current block (if last_bp == NULL).
- */
-void
-cluster_wbuild(struct vnode *vp, struct buf *last_bp, long size,
- daddr_t start_lbn, int len, daddr_t lbn)
-{
- struct buf *bp;
-
-#ifdef DIAGNOSTIC
- if (size != vp->v_mount->mnt_stat.f_iosize)
- panic("cluster_wbuild: size %ld != filesize %u",
- size, vp->v_mount->mnt_stat.f_iosize);
-#endif
-redo:
- while ((!incore(vp, start_lbn) || start_lbn == lbn) && len) {
- ++start_lbn;
- --len;
- }
-
- /* Get more memory for current buffer */
- if (len <= 1) {
- if (last_bp) {
- bawrite(last_bp);
- } else if (len) {
- bp = getblk(vp, start_lbn, size, 0, 0);
- /*
- * The buffer could have already been flushed out of
- * the cache. If that has happened, we'll get a new
- * buffer here with random data, just drop it.
- */
- if ((bp->b_flags & B_DELWRI) == 0)
- brelse(bp);
- else
- bawrite(bp);
- }
- return;
- }
-
- bp = getblk(vp, start_lbn, size, 0, 0);
- if (!(bp->b_flags & B_DELWRI)) {
- ++start_lbn;
- --len;
- brelse(bp);
- goto redo;
- }
-
- ++start_lbn;
- --len;
- bawrite(bp);
- goto redo;
-}
-
-/*
- * Collect together all the buffers in a cluster.
- * Plus add one additional buffer.
- */
-struct cluster_save *
-cluster_collectbufs(struct vnode *vp, struct cluster_info *ci,
- struct buf *last_bp, size_t *buflistsizp)
-{
- struct cluster_save *buflist;
- size_t buflistsiz;
- daddr_t lbn;
- int i, len;
-
- len = ci->ci_lastw - ci->ci_cstart + 1;
- buflistsiz = sizeof(*buflist) + sizeof(struct buf *) * (len + 1);
- buflist = malloc(buflistsiz, M_VCLUSTER, M_WAITOK);
- buflist->bs_nchildren = 0;
- buflist->bs_children = (struct buf **)(buflist + 1);
- for (lbn = ci->ci_cstart, i = 0; i < len; lbn++, i++)
- (void)bread(vp, lbn, last_bp->b_bcount,
- &buflist->bs_children[i]);
- buflist->bs_children[i] = last_bp;
- buflist->bs_nchildren = i + 1;
- *buflistsizp = buflistsiz;
- return (buflist);
-}