summaryrefslogtreecommitdiffstats
path: root/sys/fs
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2002-03-15 18:49:47 +0000
committermckusick <mckusick@FreeBSD.org>2002-03-15 18:49:47 +0000
commite929f2e4f07e568333e15d0f9fd992f632858bb0 (patch)
tree51f556e616d556c2c643350a9ffc80fda73ab27c /sys/fs
parentfdd4d414b43758fe722809b27f610baa0b0607e1 (diff)
downloadFreeBSD-src-e929f2e4f07e568333e15d0f9fd992f632858bb0.zip
FreeBSD-src-e929f2e4f07e568333e15d0f9fd992f632858bb0.tar.gz
Introduce the new 64-bit size disk block, daddr64_t. Change
the bio and buffer structures to have daddr64_t bio_pblkno, b_blkno, and b_lblkno fields which allows access to disks larger than a Terabyte in size. This change also requires that the VOP_BMAP vnode operation accept and return daddr64_t blocks. This delta should not affect system operation in any way. It merely sets up the necessary interfaces to allow the development of disk drivers that work with these larger disk block addresses. It also allows for the development of UFS2 which will use 64-bit block addresses.
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/coda/coda_vnops.c4
-rw-r--r--sys/fs/hpfs/hpfs_vnops.c8
-rw-r--r--sys/fs/msdosfs/msdosfs_fat.c5
-rw-r--r--sys/fs/msdosfs/msdosfs_vnops.c19
4 files changed, 25 insertions, 11 deletions
diff --git a/sys/fs/coda/coda_vnops.c b/sys/fs/coda/coda_vnops.c
index 3c3eee9..646ee34 100644
--- a/sys/fs/coda/coda_vnops.c
+++ b/sys/fs/coda/coda_vnops.c
@@ -1693,7 +1693,7 @@ coda_bmap(v)
struct vnode *vp __attribute__((unused)) = ap->a_vp; /* file's vnode */
daddr_t bn __attribute__((unused)) = ap->a_bn; /* fs block number */
struct vnode **vpp = ap->a_vpp; /* RETURN vp of device */
- daddr_t *bnp __attribute__((unused)) = ap->a_bnp; /* RETURN device block number */
+ daddr64_t *bnp __attribute__((unused)) = ap->a_bnp; /* RETURN device block number */
struct thread *td __attribute__((unused)) = curthread;
/* upcall decl */
/* locals */
@@ -1706,7 +1706,7 @@ coda_bmap(v)
return EINVAL;
ret = VOP_BMAP(cp->c_ovp, bn, vpp, bnp, ap->a_runp, ap->a_runb);
#if 0
- printf("VOP_BMAP(cp->c_ovp %p, bn %p, vpp %p, bnp %p, ap->a_runp %p, ap->a_runb %p) = %d\n",
+ printf("VOP_BMAP(cp->c_ovp %p, bn %p, vpp %p, bnp %lld, ap->a_runp %p, ap->a_runb %p) = %d\n",
cp->c_ovp, bn, vpp, bnp, ap->a_runp, ap->a_runb, ret);
#endif
return ret;
diff --git a/sys/fs/hpfs/hpfs_vnops.c b/sys/fs/hpfs/hpfs_vnops.c
index 2e6ec56..e3ed555 100644
--- a/sys/fs/hpfs/hpfs_vnops.c
+++ b/sys/fs/hpfs/hpfs_vnops.c
@@ -275,6 +275,7 @@ hpfs_bmap(ap)
} */ *ap;
{
register struct hpfsnode *hp = VTOHP(ap->a_vp);
+ daddr_t blkno;
int error;
if (ap->a_vpp != NULL)
@@ -286,7 +287,8 @@ hpfs_bmap(ap)
dprintf(("hpfs_bmap(0x%x, 0x%x): ",hp->h_no, ap->a_bn));
- error = hpfs_hpbmap (hp, ap->a_bn, ap->a_bnp, ap->a_runp);
+ error = hpfs_hpbmap (hp, ap->a_bn, &blkno, ap->a_runp);
+ *ap->a_bnp = blkno;
return (error);
}
@@ -677,6 +679,7 @@ hpfs_strategy(ap)
register struct buf *bp = ap->a_bp;
register struct vnode *vp = ap->a_vp;
register struct hpfsnode *hp = VTOHP(ap->a_vp);
+ daddr_t blkno;
int error;
dprintf(("hpfs_strategy(): \n"));
@@ -684,7 +687,8 @@ hpfs_strategy(ap)
if (vp->v_type == VBLK || vp->v_type == VCHR)
panic("hpfs_strategy: spec");
if (bp->b_blkno == bp->b_lblkno) {
- error = hpfs_hpbmap (hp, bp->b_lblkno, &bp->b_blkno, NULL);
+ error = hpfs_hpbmap (hp, bp->b_lblkno, &blkno, NULL);
+ bp->b_blkno = blkno;
if (error) {
printf("hpfs_strategy: hpfs_bpbmap FAILED %d\n", error);
bp->b_error = error;
diff --git a/sys/fs/msdosfs/msdosfs_fat.c b/sys/fs/msdosfs/msdosfs_fat.c
index 828edb70..7c4f6c9 100644
--- a/sys/fs/msdosfs/msdosfs_fat.c
+++ b/sys/fs/msdosfs/msdosfs_fat.c
@@ -994,6 +994,7 @@ extendfile(dep, count, bpp, ncp, flags)
u_long cn, got;
struct msdosfsmount *pmp = dep->de_pmp;
struct buf *bp;
+ daddr_t blkno;
/*
* Don't try to extend the root directory
@@ -1083,10 +1084,12 @@ extendfile(dep, count, bpp, ncp, flags)
*/
if (pcbmap(dep,
de_bn2cn(pmp, bp->b_lblkno),
- &bp->b_blkno, 0, 0))
+ &blkno, 0, 0))
bp->b_blkno = -1;
if (bp->b_blkno == -1)
panic("extendfile: pcbmap");
+ else
+ bp->b_blkno = blkno;
}
clrbuf(bp);
if (bpp) {
diff --git a/sys/fs/msdosfs/msdosfs_vnops.c b/sys/fs/msdosfs/msdosfs_vnops.c
index d506937..51e541f 100644
--- a/sys/fs/msdosfs/msdosfs_vnops.c
+++ b/sys/fs/msdosfs/msdosfs_vnops.c
@@ -711,10 +711,11 @@ msdosfs_write(ap)
* for the fat table. (see msdosfs_strategy)
*/
if (bp->b_blkno == bp->b_lblkno) {
- error = pcbmap(dep, bp->b_lblkno, &bp->b_blkno,
- 0, 0);
+ error = pcbmap(dep, bp->b_lblkno, &bn, 0, 0);
if (error)
bp->b_blkno = -1;
+ else
+ bp->b_blkno = bn;
}
if (bp->b_blkno == -1) {
brelse(bp);
@@ -1733,14 +1734,16 @@ static int
msdosfs_bmap(ap)
struct vop_bmap_args /* {
struct vnode *a_vp;
- daddr_t a_bn;
+ daddr64_t a_bn;
struct vnode **a_vpp;
- daddr_t *a_bnp;
+ daddr64_t *a_bnp;
int *a_runp;
int *a_runb;
} */ *ap;
{
struct denode *dep = VTODE(ap->a_vp);
+ daddr_t blkno;
+ int error;
if (ap->a_vpp != NULL)
*ap->a_vpp = dep->de_devvp;
@@ -1755,7 +1758,9 @@ msdosfs_bmap(ap)
if (ap->a_runb) {
*ap->a_runb = 0;
}
- return (pcbmap(dep, ap->a_bn, ap->a_bnp, 0, 0));
+ error = pcbmap(dep, ap->a_bn, &blkno, 0, 0);
+ *ap->a_bnp = blkno;
+ return (error);
}
static int
@@ -1769,6 +1774,7 @@ msdosfs_strategy(ap)
struct denode *dep = VTODE(bp->b_vp);
struct vnode *vp;
int error = 0;
+ daddr_t blkno;
if (bp->b_vp->v_type == VBLK || bp->b_vp->v_type == VCHR)
panic("msdosfs_strategy: spec");
@@ -1779,7 +1785,8 @@ msdosfs_strategy(ap)
* don't allow files with holes, so we shouldn't ever see this.
*/
if (bp->b_blkno == bp->b_lblkno) {
- error = pcbmap(dep, bp->b_lblkno, &bp->b_blkno, 0, 0);
+ error = pcbmap(dep, bp->b_lblkno, &blkno, 0, 0);
+ bp->b_blkno = blkno;
if (error) {
bp->b_error = error;
bp->b_ioflags |= BIO_ERROR;
OpenPOWER on IntegriCloud