]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/block_dev.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm...
[karo-tx-linux.git] / fs / block_dev.c
index 30b8d568203a0aa9c8724809478bc9af269ef4d4..ada42cf42d0667a5d41be90daa203766854e3705 100644 (file)
@@ -493,7 +493,7 @@ long bdev_direct_access(struct block_device *bdev, struct blk_dax_ctl *dax)
 
        if (size < 0)
                return size;
-       if (!ops->direct_access)
+       if (!blk_queue_dax(bdev_get_queue(bdev)) || !ops->direct_access)
                return -EOPNOTSUPP;
        if ((sector + DIV_ROUND_UP(size, 512)) >
                                        part_nr_sects_read(bdev->bd_part))
@@ -614,7 +614,6 @@ static void init_once(void *foo)
 
        memset(bdev, 0, sizeof(*bdev));
        mutex_init(&bdev->bd_mutex);
-       INIT_LIST_HEAD(&bdev->bd_inodes);
        INIT_LIST_HEAD(&bdev->bd_list);
 #ifdef CONFIG_SYSFS
        INIT_LIST_HEAD(&bdev->bd_holder_disks);
@@ -624,24 +623,13 @@ static void init_once(void *foo)
        mutex_init(&bdev->bd_fsfreeze_mutex);
 }
 
-static inline void __bd_forget(struct inode *inode)
-{
-       list_del_init(&inode->i_devices);
-       inode->i_bdev = NULL;
-       inode->i_mapping = &inode->i_data;
-}
-
 static void bdev_evict_inode(struct inode *inode)
 {
        struct block_device *bdev = &BDEV_I(inode)->bdev;
-       struct list_head *p;
        truncate_inode_pages_final(&inode->i_data);
        invalidate_inode_buffers(inode); /* is it needed here? */
        clear_inode(inode);
        spin_lock(&bdev_lock);
-       while ( (p = bdev->bd_inodes.next) != &bdev->bd_inodes ) {
-               __bd_forget(list_entry(p, struct inode, i_devices));
-       }
        list_del_init(&bdev->bd_list);
        spin_unlock(&bdev_lock);
 }
@@ -805,7 +793,6 @@ static struct block_device *bd_acquire(struct inode *inode)
                        bdgrab(bdev);
                        inode->i_bdev = bdev;
                        inode->i_mapping = bdev->bd_inode->i_mapping;
-                       list_add(&inode->i_devices, &bdev->bd_inodes);
                }
                spin_unlock(&bdev_lock);
        }
@@ -821,7 +808,8 @@ void bd_forget(struct inode *inode)
        spin_lock(&bdev_lock);
        if (!sb_is_blkdev_sb(inode->i_sb))
                bdev = inode->i_bdev;
-       __bd_forget(inode);
+       inode->i_bdev = NULL;
+       inode->i_mapping = &inode->i_data;
        spin_unlock(&bdev_lock);
 
        if (bdev)
@@ -1287,7 +1275,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
                bdev->bd_disk = disk;
                bdev->bd_queue = disk->queue;
                bdev->bd_contains = bdev;
-               if (IS_ENABLED(CONFIG_BLK_DEV_DAX) && disk->fops->direct_access)
+               if (IS_ENABLED(CONFIG_BLK_DEV_DAX) &&
+                   blk_queue_dax(disk->queue))
                        bdev->bd_inode->i_flags = S_DAX;
                else
                        bdev->bd_inode->i_flags = 0;