diff options
author | scottl <scottl@FreeBSD.org> | 2002-05-02 05:01:14 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2002-05-02 05:01:14 +0000 |
commit | e8357dc3990d5fc6099c54f6cd74954f86d97866 (patch) | |
tree | 3865674fd5401821830bc7165a8beab7bbfe5699 /sys/fs | |
parent | 6f813d5f2fa215b0d985b705888e60776eac3767 (diff) | |
download | FreeBSD-src-e8357dc3990d5fc6099c54f6cd74954f86d97866.zip FreeBSD-src-e8357dc3990d5fc6099c54f6cd74954f86d97866.tar.gz |
In udf_bmap(), return the physical block number, not the logical
block number. This fixes things like cp (ouch!) which use mmap.
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/udf/udf_vnops.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/fs/udf/udf_vnops.c b/sys/fs/udf/udf_vnops.c index d75c11b..fbbbb57 100644 --- a/sys/fs/udf/udf_vnops.c +++ b/sys/fs/udf/udf_vnops.c @@ -802,6 +802,7 @@ udf_bmap(struct vop_bmap_args *a) { struct udf_node *node; uint32_t max_size; + daddr64_t lsector; int error; node = VTON(a->a_vp); @@ -813,11 +814,14 @@ udf_bmap(struct vop_bmap_args *a) if (a->a_runb) *a->a_runb = 0; - error = udf_bmap_internal(node, a->a_bn * node->udfmp->bsize, a->a_bnp, + error = udf_bmap_internal(node, a->a_bn * node->udfmp->bsize, &lsector, &max_size); if (error > 0) return (error); + /* Translate logical to physical sector number */ + *a->a_bnp = lsector << (node->udfmp->bshift - DEV_BSHIFT); + /* Punt on read-ahead for now */ if (a->a_runp) *a->a_runp = 0; |