summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2002-05-02 05:01:14 +0000
committerscottl <scottl@FreeBSD.org>2002-05-02 05:01:14 +0000
commite8357dc3990d5fc6099c54f6cd74954f86d97866 (patch)
tree3865674fd5401821830bc7165a8beab7bbfe5699 /sys
parent6f813d5f2fa215b0d985b705888e60776eac3767 (diff)
downloadFreeBSD-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')
-rw-r--r--sys/fs/udf/udf_vnops.c6
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;
OpenPOWER on IntegriCloud