diff options
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 13 |
1 files changed, 4 insertions, 9 deletions
@@ -75,13 +75,13 @@ static long dax_map_atomic(struct block_device *bdev, struct blk_dax_ctl *dax) | |||
75 | struct request_queue *q = bdev->bd_queue; | 75 | struct request_queue *q = bdev->bd_queue; |
76 | long rc = -EIO; | 76 | long rc = -EIO; |
77 | 77 | ||
78 | dax->addr = (void __pmem *) ERR_PTR(-EIO); | 78 | dax->addr = ERR_PTR(-EIO); |
79 | if (blk_queue_enter(q, true) != 0) | 79 | if (blk_queue_enter(q, true) != 0) |
80 | return rc; | 80 | return rc; |
81 | 81 | ||
82 | rc = bdev_direct_access(bdev, dax); | 82 | rc = bdev_direct_access(bdev, dax); |
83 | if (rc < 0) { | 83 | if (rc < 0) { |
84 | dax->addr = (void __pmem *) ERR_PTR(rc); | 84 | dax->addr = ERR_PTR(rc); |
85 | blk_queue_exit(q); | 85 | blk_queue_exit(q); |
86 | return rc; | 86 | return rc; |
87 | } | 87 | } |
@@ -147,12 +147,12 @@ static ssize_t dax_io(struct inode *inode, struct iov_iter *iter, | |||
147 | struct buffer_head *bh) | 147 | struct buffer_head *bh) |
148 | { | 148 | { |
149 | loff_t pos = start, max = start, bh_max = start; | 149 | loff_t pos = start, max = start, bh_max = start; |
150 | bool hole = false, need_wmb = false; | 150 | bool hole = false; |
151 | struct block_device *bdev = NULL; | 151 | struct block_device *bdev = NULL; |
152 | int rw = iov_iter_rw(iter), rc; | 152 | int rw = iov_iter_rw(iter), rc; |
153 | long map_len = 0; | 153 | long map_len = 0; |
154 | struct blk_dax_ctl dax = { | 154 | struct blk_dax_ctl dax = { |
155 | .addr = (void __pmem *) ERR_PTR(-EIO), | 155 | .addr = ERR_PTR(-EIO), |
156 | }; | 156 | }; |
157 | unsigned blkbits = inode->i_blkbits; | 157 | unsigned blkbits = inode->i_blkbits; |
158 | sector_t file_blks = (i_size_read(inode) + (1 << blkbits) - 1) | 158 | sector_t file_blks = (i_size_read(inode) + (1 << blkbits) - 1) |
@@ -218,7 +218,6 @@ static ssize_t dax_io(struct inode *inode, struct iov_iter *iter, | |||
218 | 218 | ||
219 | if (iov_iter_rw(iter) == WRITE) { | 219 | if (iov_iter_rw(iter) == WRITE) { |
220 | len = copy_from_iter_pmem(dax.addr, max - pos, iter); | 220 | len = copy_from_iter_pmem(dax.addr, max - pos, iter); |
221 | need_wmb = true; | ||
222 | } else if (!hole) | 221 | } else if (!hole) |
223 | len = copy_to_iter((void __force *) dax.addr, max - pos, | 222 | len = copy_to_iter((void __force *) dax.addr, max - pos, |
224 | iter); | 223 | iter); |
@@ -235,8 +234,6 @@ static ssize_t dax_io(struct inode *inode, struct iov_iter *iter, | |||
235 | dax.addr += len; | 234 | dax.addr += len; |
236 | } | 235 | } |
237 | 236 | ||
238 | if (need_wmb) | ||
239 | wmb_pmem(); | ||
240 | dax_unmap_atomic(bdev, &dax); | 237 | dax_unmap_atomic(bdev, &dax); |
241 | 238 | ||
242 | return (pos == start) ? rc : pos - start; | 239 | return (pos == start) ? rc : pos - start; |
@@ -788,7 +785,6 @@ int dax_writeback_mapping_range(struct address_space *mapping, | |||
788 | return ret; | 785 | return ret; |
789 | } | 786 | } |
790 | } | 787 | } |
791 | wmb_pmem(); | ||
792 | return 0; | 788 | return 0; |
793 | } | 789 | } |
794 | EXPORT_SYMBOL_GPL(dax_writeback_mapping_range); | 790 | EXPORT_SYMBOL_GPL(dax_writeback_mapping_range); |
@@ -1187,7 +1183,6 @@ int __dax_zero_page_range(struct block_device *bdev, sector_t sector, | |||
1187 | if (dax_map_atomic(bdev, &dax) < 0) | 1183 | if (dax_map_atomic(bdev, &dax) < 0) |
1188 | return PTR_ERR(dax.addr); | 1184 | return PTR_ERR(dax.addr); |
1189 | clear_pmem(dax.addr + offset, length); | 1185 | clear_pmem(dax.addr + offset, length); |
1190 | wmb_pmem(); | ||
1191 | dax_unmap_atomic(bdev, &dax); | 1186 | dax_unmap_atomic(bdev, &dax); |
1192 | } | 1187 | } |
1193 | return 0; | 1188 | return 0; |