diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-19 20:35:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-19 20:35:34 -0400 |
commit | 8c3fc1643d13ff70110701d08beaf77dc20c7c0a (patch) | |
tree | 23f9688fe2ddcff44fb46fc9d84bac37e91e1e9a | |
parent | 0bdc6fd2329e51b9659d5192f4281493c15e95b3 (diff) | |
parent | f5705aa8cfed142d980ecac12bee0d81b756479e (diff) |
Merge branch 'libnvdimm-for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
Pull libnvdimm fixes from Dan Williams:
"A couple of compile fixes.
With the removal of the ->direct_access() method from
block_device_operations in favor of a new dax_device + dax_operations
we broke two configurations.
The CONFIG_BLOCK=n case is fixed by compiling out the block+dax
helpers in the dax core. Configurations with FS_DAX=n EXT4=y / XFS=y
and DAX=m fail due to the helpers the builtin filesystem needs being
in a module, so we stub out the helpers in the FS_DAX=n case."
* 'libnvdimm-for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
dax, xfs, ext4: compile out iomap-dax paths in the FS_DAX=n case
dax: fix false CONFIG_BLOCK dependency
-rw-r--r-- | drivers/dax/super.c | 2 | ||||
-rw-r--r-- | fs/ext2/inode.c | 4 | ||||
-rw-r--r-- | fs/ext4/inode.c | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_iomap.c | 4 | ||||
-rw-r--r-- | include/linux/dax.h | 34 |
5 files changed, 35 insertions, 13 deletions
diff --git a/drivers/dax/super.c b/drivers/dax/super.c index ebf43f531ada..6ed32aac8bbe 100644 --- a/drivers/dax/super.c +++ b/drivers/dax/super.c | |||
@@ -44,6 +44,7 @@ void dax_read_unlock(int id) | |||
44 | } | 44 | } |
45 | EXPORT_SYMBOL_GPL(dax_read_unlock); | 45 | EXPORT_SYMBOL_GPL(dax_read_unlock); |
46 | 46 | ||
47 | #ifdef CONFIG_BLOCK | ||
47 | int bdev_dax_pgoff(struct block_device *bdev, sector_t sector, size_t size, | 48 | int bdev_dax_pgoff(struct block_device *bdev, sector_t sector, size_t size, |
48 | pgoff_t *pgoff) | 49 | pgoff_t *pgoff) |
49 | { | 50 | { |
@@ -112,6 +113,7 @@ int __bdev_dax_supported(struct super_block *sb, int blocksize) | |||
112 | return 0; | 113 | return 0; |
113 | } | 114 | } |
114 | EXPORT_SYMBOL_GPL(__bdev_dax_supported); | 115 | EXPORT_SYMBOL_GPL(__bdev_dax_supported); |
116 | #endif | ||
115 | 117 | ||
116 | /** | 118 | /** |
117 | * struct dax_device - anchor object for dax services | 119 | * struct dax_device - anchor object for dax services |
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 26d77f9f8c12..2dcbd5698884 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -817,7 +817,7 @@ static int ext2_iomap_begin(struct inode *inode, loff_t offset, loff_t length, | |||
817 | iomap->bdev = bdev; | 817 | iomap->bdev = bdev; |
818 | iomap->offset = (u64)first_block << blkbits; | 818 | iomap->offset = (u64)first_block << blkbits; |
819 | if (blk_queue_dax(bdev->bd_queue)) | 819 | if (blk_queue_dax(bdev->bd_queue)) |
820 | iomap->dax_dev = dax_get_by_host(bdev->bd_disk->disk_name); | 820 | iomap->dax_dev = fs_dax_get_by_host(bdev->bd_disk->disk_name); |
821 | else | 821 | else |
822 | iomap->dax_dev = NULL; | 822 | iomap->dax_dev = NULL; |
823 | 823 | ||
@@ -841,7 +841,7 @@ static int | |||
841 | ext2_iomap_end(struct inode *inode, loff_t offset, loff_t length, | 841 | ext2_iomap_end(struct inode *inode, loff_t offset, loff_t length, |
842 | ssize_t written, unsigned flags, struct iomap *iomap) | 842 | ssize_t written, unsigned flags, struct iomap *iomap) |
843 | { | 843 | { |
844 | put_dax(iomap->dax_dev); | 844 | fs_put_dax(iomap->dax_dev); |
845 | if (iomap->type == IOMAP_MAPPED && | 845 | if (iomap->type == IOMAP_MAPPED && |
846 | written < length && | 846 | written < length && |
847 | (flags & IOMAP_WRITE)) | 847 | (flags & IOMAP_WRITE)) |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 5834c4d76be8..1bd0bfa547f6 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -3412,7 +3412,7 @@ retry: | |||
3412 | bdev = inode->i_sb->s_bdev; | 3412 | bdev = inode->i_sb->s_bdev; |
3413 | iomap->bdev = bdev; | 3413 | iomap->bdev = bdev; |
3414 | if (blk_queue_dax(bdev->bd_queue)) | 3414 | if (blk_queue_dax(bdev->bd_queue)) |
3415 | iomap->dax_dev = dax_get_by_host(bdev->bd_disk->disk_name); | 3415 | iomap->dax_dev = fs_dax_get_by_host(bdev->bd_disk->disk_name); |
3416 | else | 3416 | else |
3417 | iomap->dax_dev = NULL; | 3417 | iomap->dax_dev = NULL; |
3418 | iomap->offset = first_block << blkbits; | 3418 | iomap->offset = first_block << blkbits; |
@@ -3447,7 +3447,7 @@ static int ext4_iomap_end(struct inode *inode, loff_t offset, loff_t length, | |||
3447 | int blkbits = inode->i_blkbits; | 3447 | int blkbits = inode->i_blkbits; |
3448 | bool truncate = false; | 3448 | bool truncate = false; |
3449 | 3449 | ||
3450 | put_dax(iomap->dax_dev); | 3450 | fs_put_dax(iomap->dax_dev); |
3451 | if (!(flags & IOMAP_WRITE) || (flags & IOMAP_FAULT)) | 3451 | if (!(flags & IOMAP_WRITE) || (flags & IOMAP_FAULT)) |
3452 | return 0; | 3452 | return 0; |
3453 | 3453 | ||
diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index a63f61c256bd..94e5bdf7304c 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c | |||
@@ -1068,7 +1068,7 @@ xfs_file_iomap_begin( | |||
1068 | /* optionally associate a dax device with the iomap bdev */ | 1068 | /* optionally associate a dax device with the iomap bdev */ |
1069 | bdev = iomap->bdev; | 1069 | bdev = iomap->bdev; |
1070 | if (blk_queue_dax(bdev->bd_queue)) | 1070 | if (blk_queue_dax(bdev->bd_queue)) |
1071 | iomap->dax_dev = dax_get_by_host(bdev->bd_disk->disk_name); | 1071 | iomap->dax_dev = fs_dax_get_by_host(bdev->bd_disk->disk_name); |
1072 | else | 1072 | else |
1073 | iomap->dax_dev = NULL; | 1073 | iomap->dax_dev = NULL; |
1074 | 1074 | ||
@@ -1149,7 +1149,7 @@ xfs_file_iomap_end( | |||
1149 | unsigned flags, | 1149 | unsigned flags, |
1150 | struct iomap *iomap) | 1150 | struct iomap *iomap) |
1151 | { | 1151 | { |
1152 | put_dax(iomap->dax_dev); | 1152 | fs_put_dax(iomap->dax_dev); |
1153 | if ((flags & IOMAP_WRITE) && iomap->type == IOMAP_DELALLOC) | 1153 | if ((flags & IOMAP_WRITE) && iomap->type == IOMAP_DELALLOC) |
1154 | return xfs_file_iomap_end_delalloc(XFS_I(inode), offset, | 1154 | return xfs_file_iomap_end_delalloc(XFS_I(inode), offset, |
1155 | length, written, iomap); | 1155 | length, written, iomap); |
diff --git a/include/linux/dax.h b/include/linux/dax.h index 00ebac854bb7..5ec1f6c47716 100644 --- a/include/linux/dax.h +++ b/include/linux/dax.h | |||
@@ -18,6 +18,20 @@ struct dax_operations { | |||
18 | void **, pfn_t *); | 18 | void **, pfn_t *); |
19 | }; | 19 | }; |
20 | 20 | ||
21 | #if IS_ENABLED(CONFIG_DAX) | ||
22 | struct dax_device *dax_get_by_host(const char *host); | ||
23 | void put_dax(struct dax_device *dax_dev); | ||
24 | #else | ||
25 | static inline struct dax_device *dax_get_by_host(const char *host) | ||
26 | { | ||
27 | return NULL; | ||
28 | } | ||
29 | |||
30 | static inline void put_dax(struct dax_device *dax_dev) | ||
31 | { | ||
32 | } | ||
33 | #endif | ||
34 | |||
21 | int bdev_dax_pgoff(struct block_device *, sector_t, size_t, pgoff_t *pgoff); | 35 | int bdev_dax_pgoff(struct block_device *, sector_t, size_t, pgoff_t *pgoff); |
22 | #if IS_ENABLED(CONFIG_FS_DAX) | 36 | #if IS_ENABLED(CONFIG_FS_DAX) |
23 | int __bdev_dax_supported(struct super_block *sb, int blocksize); | 37 | int __bdev_dax_supported(struct super_block *sb, int blocksize); |
@@ -25,23 +39,29 @@ static inline int bdev_dax_supported(struct super_block *sb, int blocksize) | |||
25 | { | 39 | { |
26 | return __bdev_dax_supported(sb, blocksize); | 40 | return __bdev_dax_supported(sb, blocksize); |
27 | } | 41 | } |
42 | |||
43 | static inline struct dax_device *fs_dax_get_by_host(const char *host) | ||
44 | { | ||
45 | return dax_get_by_host(host); | ||
46 | } | ||
47 | |||
48 | static inline void fs_put_dax(struct dax_device *dax_dev) | ||
49 | { | ||
50 | put_dax(dax_dev); | ||
51 | } | ||
52 | |||
28 | #else | 53 | #else |
29 | static inline int bdev_dax_supported(struct super_block *sb, int blocksize) | 54 | static inline int bdev_dax_supported(struct super_block *sb, int blocksize) |
30 | { | 55 | { |
31 | return -EOPNOTSUPP; | 56 | return -EOPNOTSUPP; |
32 | } | 57 | } |
33 | #endif | ||
34 | 58 | ||
35 | #if IS_ENABLED(CONFIG_DAX) | 59 | static inline struct dax_device *fs_dax_get_by_host(const char *host) |
36 | struct dax_device *dax_get_by_host(const char *host); | ||
37 | void put_dax(struct dax_device *dax_dev); | ||
38 | #else | ||
39 | static inline struct dax_device *dax_get_by_host(const char *host) | ||
40 | { | 60 | { |
41 | return NULL; | 61 | return NULL; |
42 | } | 62 | } |
43 | 63 | ||
44 | static inline void put_dax(struct dax_device *dax_dev) | 64 | static inline void fs_put_dax(struct dax_device *dax_dev) |
45 | { | 65 | { |
46 | } | 66 | } |
47 | #endif | 67 | #endif |