summaryrefslogtreecommitdiffstats
path: root/sys/ufs/ffs/ffs_alloc.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-03-19 15:08:15 +0000
committerkib <kib@FreeBSD.org>2013-03-19 15:08:15 +0000
commit877fe3d28a532e408990e07439cd8ddfa1ae8e0f (patch)
tree9bf4a3b24127a827f7068d5843436cb6d5dfacba /sys/ufs/ffs/ffs_alloc.c
parent44feb59ca31810fe4cdd7a7998e627cf4eb9114f (diff)
downloadFreeBSD-src-877fe3d28a532e408990e07439cd8ddfa1ae8e0f.zip
FreeBSD-src-877fe3d28a532e408990e07439cd8ddfa1ae8e0f.tar.gz
UFS support of the unmapped i/o for the user data buffers.
Sponsored by: The FreeBSD Foundation Tested by: pho, scottl, jhb, bf
Diffstat (limited to 'sys/ufs/ffs/ffs_alloc.c')
-rw-r--r--sys/ufs/ffs/ffs_alloc.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c
index 789a7cf..ab21b89 100644
--- a/sys/ufs/ffs/ffs_alloc.c
+++ b/sys/ufs/ffs/ffs_alloc.c
@@ -254,7 +254,7 @@ ffs_realloccg(ip, lbprev, bprev, bpref, osize, nsize, flags, cred, bpp)
struct buf *bp;
struct ufsmount *ump;
u_int cg, request, reclaimed;
- int error;
+ int error, gbflags;
ufs2_daddr_t bno;
static struct timeval lastfail;
static int curfail;
@@ -265,6 +265,8 @@ ffs_realloccg(ip, lbprev, bprev, bpref, osize, nsize, flags, cred, bpp)
fs = ip->i_fs;
bp = NULL;
ump = ip->i_ump;
+ gbflags = (flags & BA_UNMAPPED) != 0 ? GB_UNMAPPED : 0;
+
mtx_assert(UFS_MTX(ump), MA_OWNED);
#ifdef INVARIANTS
if (vp->v_mount->mnt_kern_flag & MNTK_SUSPENDED)
@@ -296,7 +298,7 @@ retry:
/*
* Allocate the extra space in the buffer.
*/
- error = bread(vp, lbprev, osize, NOCRED, &bp);
+ error = bread_gb(vp, lbprev, osize, NOCRED, gbflags, &bp);
if (error) {
brelse(bp);
return (error);
@@ -332,7 +334,7 @@ retry:
ip->i_flag |= IN_CHANGE | IN_UPDATE;
allocbuf(bp, nsize);
bp->b_flags |= B_DONE;
- bzero(bp->b_data + osize, nsize - osize);
+ vfs_bio_bzero_buf(bp, osize, nsize - osize);
if ((bp->b_flags & (B_MALLOC | B_VMIO)) == B_VMIO)
vfs_bio_set_valid(bp, osize, nsize - osize);
*bpp = bp;
@@ -400,7 +402,7 @@ retry:
ip->i_flag |= IN_CHANGE | IN_UPDATE;
allocbuf(bp, nsize);
bp->b_flags |= B_DONE;
- bzero(bp->b_data + osize, nsize - osize);
+ vfs_bio_bzero_buf(bp, osize, nsize - osize);
if ((bp->b_flags & (B_MALLOC | B_VMIO)) == B_VMIO)
vfs_bio_set_valid(bp, osize, nsize - osize);
*bpp = bp;
OpenPOWER on IntegriCloud