dax: bdev_direct_access() may sleep
authorMatthew Wilcox <matthew.r.wilcox@intel.com>
Fri, 3 Jul 2015 14:40:43 +0000 (10:40 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 4 Jul 2015 19:56:57 +0000 (15:56 -0400)
The brd driver is the only in-tree driver that may sleep currently.
After some discussion on linux-fsdevel, we decided that any driver
may choose to sleep in its ->direct_access method.  To ensure that all
callers of bdev_direct_access() are prepared for this, add a call
to might_sleep().

Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/block_dev.c

index 5dde6dff49408930fb49d2020f692e19c05374b9..12b22ddb22ef04ec150dabf4d6d631400bb79070 100644 (file)
@@ -445,6 +445,12 @@ long bdev_direct_access(struct block_device *bdev, sector_t sector,
        long avail;
        const struct block_device_operations *ops = bdev->bd_disk->fops;
 
+       /*
+        * The device driver is allowed to sleep, in order to make the
+        * memory directly accessible.
+        */
+       might_sleep();
+
        if (size < 0)
                return size;
        if (!ops->direct_access)