version 1.81, 2007/07/27 10:00:42 |
version 1.81.6.1, 2007/11/06 23:35:25 |
|
|
__KERNEL_RCSID(1, "$NetBSD$"); |
__KERNEL_RCSID(1, "$NetBSD$"); |
|
|
#ifdef LFS_READWRITE |
#ifdef LFS_READWRITE |
#define BLKSIZE(a, b, c) blksize(a, b, c) |
|
#define FS struct lfs |
#define FS struct lfs |
#define I_FS i_lfs |
#define I_FS i_lfs |
#define READ lfs_read |
#define READ lfs_read |
Line 45 __KERNEL_RCSID(1, "$NetBSD$"); |
|
Line 44 __KERNEL_RCSID(1, "$NetBSD$"); |
|
#define fs_bsize lfs_bsize |
#define fs_bsize lfs_bsize |
#define fs_bmask lfs_bmask |
#define fs_bmask lfs_bmask |
#else |
#else |
#define BLKSIZE(a, b, c) blksize(a, b, c) |
|
#define FS struct fs |
#define FS struct fs |
#define I_FS i_fs |
#define I_FS i_fs |
#define READ ffs_read |
#define READ ffs_read |
|
|
break; |
break; |
lbn = lblkno(fs, uio->uio_offset); |
lbn = lblkno(fs, uio->uio_offset); |
nextlbn = lbn + 1; |
nextlbn = lbn + 1; |
size = BLKSIZE(fs, ip, lbn); |
size = blksize(fs, ip, lbn); |
blkoffset = blkoff(fs, uio->uio_offset); |
blkoffset = blkoff(fs, uio->uio_offset); |
xfersize = MIN(MIN(fs->fs_bsize - blkoffset, uio->uio_resid), |
xfersize = MIN(MIN(fs->fs_bsize - blkoffset, uio->uio_resid), |
bytesinfile); |
bytesinfile); |
|
|
if (lblktosize(fs, nextlbn) >= ip->i_size) |
if (lblktosize(fs, nextlbn) >= ip->i_size) |
error = bread(vp, lbn, size, NOCRED, &bp); |
error = bread(vp, lbn, size, NOCRED, &bp); |
else { |
else { |
int nextsize = BLKSIZE(fs, ip, nextlbn); |
int nextsize = blksize(fs, ip, nextlbn); |
error = breadn(vp, lbn, |
error = breadn(vp, lbn, |
size, &nextlbn, &nextsize, 1, NOCRED, &bp); |
size, &nextlbn, &nextsize, 1, NOCRED, &bp); |
} |
} |
|
|
error = uiomove((char *)bp->b_data + blkoffset, xfersize, uio); |
error = uiomove((char *)bp->b_data + blkoffset, xfersize, uio); |
if (error) |
if (error) |
break; |
break; |
brelse(bp); |
brelse(bp, 0); |
} |
} |
if (bp != NULL) |
if (bp != NULL) |
brelse(bp); |
brelse(bp, 0); |
|
|
out: |
out: |
if (!(vp->v_mount->mnt_flag & MNT_NOATIME)) { |
if (!(vp->v_mount->mnt_flag & MNT_NOATIME)) { |
|
|
*/ |
*/ |
overwrite = uio->uio_offset >= preallocoff && |
overwrite = uio->uio_offset >= preallocoff && |
uio->uio_offset < endallocoff; |
uio->uio_offset < endallocoff; |
if (!overwrite && (vp->v_flag & VMAPPED) == 0 && |
if (!overwrite && (vp->v_vflag & VV_MAPPED) == 0 && |
blkoff(fs, uio->uio_offset) == 0 && |
blkoff(fs, uio->uio_offset) == 0 && |
(uio->uio_offset & PAGE_MASK) == 0) { |
(uio->uio_offset & PAGE_MASK) == 0) { |
vsize_t len; |
vsize_t len; |
|
|
uvm_vnp_setsize(vp, ip->i_size); |
uvm_vnp_setsize(vp, ip->i_size); |
extended = 1; |
extended = 1; |
} |
} |
size = BLKSIZE(fs, ip, lbn) - bp->b_resid; |
size = blksize(fs, ip, lbn) - bp->b_resid; |
if (xfersize > size) |
if (xfersize > size) |
xfersize = size; |
xfersize = size; |
|
|
|
|
* so we need to invalidate it. |
* so we need to invalidate it. |
*/ |
*/ |
if (error && (flags & B_CLRBUF) == 0) { |
if (error && (flags & B_CLRBUF) == 0) { |
bp->b_flags |= B_INVAL; |
brelse(bp, BC_INVAL); |
brelse(bp); |
|
break; |
break; |
} |
} |
#ifdef LFS_READWRITE |
#ifdef LFS_READWRITE |