svn commit: r190047 - in stable/7/sys: . fs/udf
Andriy Gapon
avg at FreeBSD.org
Thu Mar 19 07:00:25 PDT 2009
Author: avg
Date: Thu Mar 19 14:00:23 2009
New Revision: 190047
URL: http://svn.freebsd.org/changeset/base/190047
Log:
MFC 189067,189363: udf_strategy: tiny optimization of logic, calculations; extra diagnostics
Approved by: jhb (mentor)
Modified:
stable/7/sys/ (props changed)
stable/7/sys/fs/udf/udf_vnops.c
Modified: stable/7/sys/fs/udf/udf_vnops.c
==============================================================================
--- stable/7/sys/fs/udf/udf_vnops.c Thu Mar 19 13:53:42 2009 (r190046)
+++ stable/7/sys/fs/udf/udf_vnops.c Thu Mar 19 14:00:23 2009 (r190047)
@@ -404,7 +404,7 @@ udf_print(struct vop_print_args *ap)
#define lblkno(udfmp, loc) ((loc) >> (udfmp)->bshift)
#define blkoff(udfmp, loc) ((loc) & (udfmp)->bmask)
-#define lblktosize(imp, blk) ((blk) << (udfmp)->bshift)
+#define lblktosize(udfmp, blk) ((blk) << (udfmp)->bshift)
static int
udf_read(struct vop_read_args *ap)
@@ -968,34 +968,27 @@ udf_strategy(struct vop_strategy_args *a
struct buf *bp;
struct vnode *vp;
struct udf_node *node;
- int maxsize;
- daddr_t sector;
struct bufobj *bo;
- int multiplier;
+ off_t offset;
+ uint32_t maxsize;
+ daddr_t sector;
+ int error;
bp = a->a_bp;
vp = a->a_vp;
node = VTON(vp);
if (bp->b_blkno == bp->b_lblkno) {
- /*
- * Files that are embedded in the fentry don't translate well
- * to a block number. Reject.
- */
- if (udf_bmap_internal(node, bp->b_lblkno * node->udfmp->bsize,
- §or, &maxsize)) {
+ offset = lblktosize(node->udfmp, bp->b_lblkno);
+ error = udf_bmap_internal(node, offset, §or, &maxsize);
+ if (error) {
clrbuf(bp);
bp->b_blkno = -1;
+ bufdone(bp);
+ return (0);
}
-
/* bmap gives sector numbers, bio works with device blocks */
- multiplier = node->udfmp->bsize / DEV_BSIZE;
- bp->b_blkno = sector * multiplier;
-
- }
- if ((long)bp->b_blkno == -1) {
- bufdone(bp);
- return (0);
+ bp->b_blkno = sector << (node->udfmp->bshift - DEV_BSHIFT);
}
bo = node->udfmp->im_bo;
bp->b_iooffset = dbtob(bp->b_blkno);
More information about the svn-src-stable
mailing list