blocks << inode->i_blkbits); 
(xfs_off_t)blocks << inode->i_blkbits); 
__linvfs_get_block(	struct inode		*inode,	sector_t		iblock,	unsigned long		blocks,	struct buffer_head	*bh_result,	int			create,	int			direct,	bmapi_flags_t		flags){	vnode_t			*vp = LINVFS_GET_VP(inode);	xfs_iomap_t		iomap;	xfs_off_t		offset;	ssize_t			size;	int			retpbbm = 1;	int			error;	if (blocks) {		offset = blocks << inode->i_blkbits;	/* 64 bit goodness */		size = (ssize_t) min_t(xfs_off_t, offset, LONG_MAX);	} else {		size = 1 << inode->i_blkbits;	}	offset = (xfs_off_t)iblock << inode->i_blkbits;	VOP_BMAP(vp, offset, size,		create ? flags : BMAPI_READ, &iomap, &retpbbm, error);	if (error)		return -error;	if (retpbbm == 0)		return 0;	if (iomap.iomap_bn != IOMAP_DADDR_NULL) {		xfs_daddr_t	bn;		xfs_off_t	delta;		/* For unwritten extents do not report a disk address on		 * the read case (treat as if we're reading into a hole).		 */		if (create || !(iomap.iomap_flags & IOMAP_UNWRITTEN)) {			delta = offset - iomap.iomap_offset;			delta >>= inode->i_blkbits;			bn = iomap.iomap_bn >> (inode->i_blkbits - BBSHIFT);			bn += delta;			BUG_ON(!bn && !(iomap.iomap_flags & IOMAP_REALTIME));			bh_result->b_blocknr = bn;			set_buffer_mapped(bh_result);		}		if (create && (iomap.iomap_flags & IOMAP_UNWRITTEN)) {			if (direct)				bh_result->b_private = inode;			set_buffer_unwritten(bh_result);			set_buffer_delay(bh_result);		}	}	/* If this is a realtime file, data might be on a new device */	bh_result->b_bdev = iomap.iomap_target->pbr_bdev;	/* If we previously allocated a block out beyond eof and	 * we are now coming back to use it then we will need to	 * flag it as new even if it has a disk address.	 */	if (create &&	    ((!buffer_mapped(bh_result) && !buffer_uptodate(bh_result)) ||	     (offset >= i_size_read(inode)) || (iomap.iomap_flags & IOMAP_NEW)))		set_buffer_new(bh_result);	if (iomap.iomap_flags & IOMAP_DELAY) {		BUG_ON(direct);		if (create) {			set_buffer_uptodate(bh_result);			set_buffer_mapped(bh_result);			set_buffer_delay(bh_result);		}	}	if (blocks) {		ASSERT(iomap.iomap_bsize - iomap.iomap_delta > 0);		offset = min_t(xfs_off_t,				iomap.iomap_bsize - iomap.iomap_delta,				blocks << inode->i_blkbits);		bh_result->b_size = (u32) min_t(xfs_off_t, UINT_MAX, offset);	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/a4656391b76ed93faed724c5963f033164ee477e/xfs_aops.c/clean/fs/xfs/linux-2.6/xfs_aops.c