Date: Thu, 19 Mar 2009 14:00:23 +0000 (UTC) From: Andriy Gapon <avg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org Subject: svn commit: r190047 - in stable/7/sys: . fs/udf Message-ID: <200903191400.n2JE0Nti063736@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903191400.n2JE0Nti063736>