xfs: remove unused blocksize arg from xfs_setsize_buftarg()
[firefly-linux-kernel-4.4.55.git] / fs / xfs / xfs_buf.c
index 9c061ef2b0d973c913a1baaee4a43bc27523b244..6638bf1f3838b4074d1b443b49dbc92f3c9b550c 100644 (file)
@@ -396,7 +396,17 @@ _xfs_buf_map_pages(
                bp->b_addr = NULL;
        } else {
                int retried = 0;
+               unsigned noio_flag;
 
+               /*
+                * vm_map_ram() will allocate auxillary structures (e.g.
+                * pagetables) with GFP_KERNEL, yet we are likely to be under
+                * GFP_NOFS context here. Hence we need to tell memory reclaim
+                * that we are in such a context via PF_MEMALLOC_NOIO to prevent
+                * memory reclaim re-entering the filesystem here and
+                * potentially deadlocking.
+                */
+               noio_flag = memalloc_noio_save();
                do {
                        bp->b_addr = vm_map_ram(bp->b_pages, bp->b_page_count,
                                                -1, PAGE_KERNEL);
@@ -404,6 +414,7 @@ _xfs_buf_map_pages(
                                break;
                        vm_unmap_aliases();
                } while (retried++ <= 1);
+               memalloc_noio_restore(noio_flag);
 
                if (!bp->b_addr)
                        return -ENOMEM;
@@ -1596,7 +1607,6 @@ xfs_free_buftarg(
 int
 xfs_setsize_buftarg(
        xfs_buftarg_t           *btp,
-       unsigned int            blocksize,
        unsigned int            sectorsize)
 {
        /* Set up metadata sector size info */
@@ -1631,8 +1641,7 @@ xfs_setsize_buftarg_early(
        xfs_buftarg_t           *btp,
        struct block_device     *bdev)
 {
-       return xfs_setsize_buftarg(btp, PAGE_SIZE,
-                                  bdev_logical_block_size(bdev));
+       return xfs_setsize_buftarg(btp, bdev_logical_block_size(bdev));
 }
 
 xfs_buftarg_t *