[XFS] kill BMAPI_DEVICE
authorChristoph Hellwig <hch@infradead.org>
Fri, 14 Sep 2007 05:23:17 +0000 (15:23 +1000)
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>
Thu, 7 Feb 2008 05:43:35 +0000 (16:43 +1100)
There is no reason to go into the iomap machinery just to get the right
block device for an inode. Instead look at the realtime flag in the inode
and grab the right device from the mount structure.

I created a new helper, xfs_find_bdev_for_inode instead of opencoding it
because I plan to use it in other places in the future.

SGI-PV: 970240
SGI-Modid: xfs-linux-melb:xfs-kern:29680a

Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Donald Douwsma <donaldd@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
fs/xfs/linux-2.6/xfs_aops.c
fs/xfs/xfs_iomap.c
fs/xfs/xfs_iomap.h

index 31269cbd5e1a5611b89d151aa20650b9dd076a28..43f5a75fc3c0f62d5d61c592b2d7f380888855fb 100644 (file)
@@ -107,6 +107,18 @@ xfs_page_trace(
 #define xfs_page_trace(tag, inode, page, pgoff)
 #endif
 
+STATIC struct block_device *
+xfs_find_bdev_for_inode(
+       struct xfs_inode        *ip)
+{
+       struct xfs_mount        *mp = ip->i_mount;
+
+       if (ip->i_d.di_flags & XFS_DIFLAG_REALTIME)
+               return mp->m_rtdev_targp->bt_bdev;
+       else
+               return mp->m_ddev_targp->bt_bdev;
+}
+
 /*
  * Schedule IO completion handling on a xfsdatad if this was
  * the final hold on this ioend. If we are asked to wait,
@@ -1471,28 +1483,21 @@ xfs_vm_direct_IO(
 {
        struct file     *file = iocb->ki_filp;
        struct inode    *inode = file->f_mapping->host;
-       xfs_iomap_t     iomap;
-       int             maps = 1;
-       int             error;
+       struct block_device *bdev;
        ssize_t         ret;
 
-       error = xfs_bmap(XFS_I(inode), offset, 0,
-                               BMAPI_DEVICE, &iomap, &maps);
-       if (error)
-               return -error;
+       bdev = xfs_find_bdev_for_inode(XFS_I(inode));
 
        if (rw == WRITE) {
                iocb->private = xfs_alloc_ioend(inode, IOMAP_UNWRITTEN);
                ret = blockdev_direct_IO_own_locking(rw, iocb, inode,
-                       iomap.iomap_target->bt_bdev,
-                       iov, offset, nr_segs,
+                       bdev, iov, offset, nr_segs,
                        xfs_get_blocks_direct,
                        xfs_end_io_direct);
        } else {
                iocb->private = xfs_alloc_ioend(inode, IOMAP_READ);
                ret = blockdev_direct_IO_no_locking(rw, iocb, inode,
-                       iomap.iomap_target->bt_bdev,
-                       iov, offset, nr_segs,
+                       bdev, iov, offset, nr_segs,
                        xfs_get_blocks_direct,
                        xfs_end_io_direct);
        }
index 72786e356d56ebba6e1f6455cf9f471fd52745fa..58cda06a18467235ec93afe6b81ea8af5590645f 100644 (file)
@@ -193,7 +193,7 @@ xfs_iomap(
 
        switch (flags &
                (BMAPI_READ | BMAPI_WRITE | BMAPI_ALLOCATE |
-                BMAPI_UNWRITTEN | BMAPI_DEVICE)) {
+                BMAPI_UNWRITTEN)) {
        case BMAPI_READ:
                xfs_iomap_enter_trace(XFS_IOMAP_READ_ENTER, io, offset, count);
                lockmode = XFS_LCK_MAP_SHARED(mp, io);
@@ -220,13 +220,6 @@ xfs_iomap(
                break;
        case BMAPI_UNWRITTEN:
                goto phase2;
-       case BMAPI_DEVICE:
-               lockmode = XFS_LCK_MAP_SHARED(mp, io);
-               iomapp->iomap_target = io->io_flags & XFS_IOCORE_RT ?
-                       mp->m_rtdev_targp : mp->m_ddev_targp;
-               error = 0;
-               *niomaps = 1;
-               goto out;
        default:
                BUG();
        }
index f5c09887fe93647c6db79db7fa18531688c8c347..2b94874e92d123373451c50b65de60fdbc1e2161 100644 (file)
@@ -43,7 +43,6 @@ typedef enum {
        BMAPI_MMAP = (1 << 6),          /* allocate for mmap write */
        BMAPI_SYNC = (1 << 7),          /* sync write to flush delalloc space */
        BMAPI_TRYLOCK = (1 << 8),       /* non-blocking request */
-       BMAPI_DEVICE = (1 << 9),        /* we only want to know the device */
 } bmapi_flags_t;