Move the direct IO code into a separate file so that we can group related functions in a single file instead of having a single enormous source file.
Unified · Split
| @@ -90,12 +90,6 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags, · 89 unmodified lines | |||
| 90 | return written ? written : ret; | 90 | return written ? written : ret; |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | static sector_t | ||
| 94 | iomap_sector(struct iomap *iomap, loff_t pos) | ||
| 95 | { | ||
| 96 | return (iomap->addr + pos - iomap->offset) >> SECTOR_SHIFT; | ||
| 97 | } | ||
| 98 | |||
| 99 | static struct iomap_page * | 93 | static struct iomap_page * |
| 100 | iomap_page_create(struct inode *inode, struct page *page) | 94 | iomap_page_create(struct inode *inode, struct page *page) |
| 101 | { | 95 | { |
| @@ -1148,551 +1142,3 @@ out_unlock: · 1046 unmodified lines | |||
| 1148 | return block_page_mkwrite_return(ret); | 1142 | return block_page_mkwrite_return(ret); |
| 1149 | } | 1143 | } |
| 1150 | EXPORT_SYMBOL_GPL(iomap_page_mkwrite); | 1144 | EXPORT_SYMBOL_GPL(iomap_page_mkwrite); |
| 1151 | |||
| 1152 | /* | ||
| 1153 | * Private flags for iomap_dio, must not overlap with the public ones in | ||
| 1154 | * iomap.h: | ||
| 1155 | */ | ||
| 1156 | #define IOMAP_DIO_WRITE_FUA (1 << 28) | ||
| 1157 | #define IOMAP_DIO_NEED_SYNC (1 << 29) | ||
| 1158 | #define IOMAP_DIO_WRITE (1 << 30) | ||
| 1159 | #define IOMAP_DIO_DIRTY (1 << 31) | ||
| 1160 | |||
| 1161 | struct iomap_dio { | ||
| 1162 | struct kiocb *iocb; | ||
| 1163 | iomap_dio_end_io_t *end_io; | ||
| 1164 | loff_t i_size; | ||
| 1165 | loff_t size; | ||
| 1166 | atomic_t ref; | ||
| 1167 | unsigned flags; | ||
| 1168 | int error; | ||
| 1169 | bool wait_for_completion; | ||
| 1170 | |||
| 1171 | union { | ||
| 1172 | /* used during submission and for synchronous completion: */ | ||
| 1173 | struct { | ||
| 1174 | struct iov_iter *iter; | ||
| 1175 | struct task_struct *waiter; | ||
| 1176 | struct request_queue *last_queue; | ||
| 1177 | blk_qc_t cookie; | ||
| 1178 | } submit; | ||
| 1179 | |||
| 1180 | /* used for aio completion: */ | ||
| 1181 | struct { | ||
| 1182 | struct work_struct work; | ||
| 1183 | } aio; | ||
| 1184 | }; | ||
| 1185 | }; | ||
| 1186 | |||
| 1187 | int iomap_dio_iopoll(struct kiocb *kiocb, bool spin) | ||
| 1188 | { | ||
| 1189 | struct request_queue *q = READ_ONCE(kiocb->private); | ||
| 1190 | |||
| 1191 | if (!q) | ||
| 1192 | return 0; | ||
| 1193 | return blk_poll(q, READ_ONCE(kiocb->ki_cookie), spin); | ||
| 1194 | } | ||
| 1195 | EXPORT_SYMBOL_GPL(iomap_dio_iopoll); | ||
| 1196 | |||
| 1197 | static void iomap_dio_submit_bio(struct iomap_dio *dio, struct iomap *iomap, | ||
| 1198 | struct bio *bio) | ||
| 1199 | { | ||
| 1200 | atomic_inc(&dio->ref); | ||
| 1201 | |||
| 1202 | if (dio->iocb->ki_flags & IOCB_HIPRI) | ||
| 1203 | bio_set_polled(bio, dio->iocb); | ||
| 1204 | |||
| 1205 | dio->submit.last_queue = bdev_get_queue(iomap->bdev); | ||
| 1206 | dio->submit.cookie = submit_bio(bio); | ||
| 1207 | } | ||
| 1208 | |||
| 1209 | static ssize_t iomap_dio_complete(struct iomap_dio *dio) | ||
| 1210 | { | ||
| 1211 | struct kiocb *iocb = dio->iocb; | ||
| 1212 | struct inode *inode = file_inode(iocb->ki_filp); | ||
| 1213 | loff_t offset = iocb->ki_pos; | ||
| 1214 | ssize_t ret; | ||
| 1215 | |||
| 1216 | if (dio->end_io) { | ||
| 1217 | ret = dio->end_io(iocb, | ||
| 1218 | dio->error ? dio->error : dio->size, | ||
| 1219 | dio->flags); | ||
| 1220 | } else { | ||
| 1221 | ret = dio->error; | ||
| 1222 | } | ||
| 1223 | |||
| 1224 | if (likely(!ret)) { | ||
| 1225 | ret = dio->size; | ||
| 1226 | /* check for short read */ | ||
| 1227 | if (offset + ret > dio->i_size && | ||
| 1228 | !(dio->flags & IOMAP_DIO_WRITE)) | ||
| 1229 | ret = dio->i_size - offset; | ||
| 1230 | iocb->ki_pos += ret; | ||
| 1231 | } | ||
| 1232 | |||
| 1233 | /* | ||
| 1234 | * Try again to invalidate clean pages which might have been cached by | ||
| 1235 | * non-direct readahead, or faulted in by get_user_pages() if the source | ||
| 1236 | * of the write was an mmap'ed region of the file we're writing. Either | ||
| 1237 | * one is a pretty crazy thing to do, so we don't support it 100%. If | ||
| 1238 | * this invalidation fails, tough, the write still worked... | ||
| 1239 | * | ||
| 1240 | * And this page cache invalidation has to be after dio->end_io(), as | ||
| 1241 | * some filesystems convert unwritten extents to real allocations in | ||
| 1242 | * end_io() when necessary, otherwise a racing buffer read would cache | ||
| 1243 | * zeros from unwritten extents. | ||
| 1244 | */ | ||
| 1245 | if (!dio->error && | ||
| 1246 | (dio->flags & IOMAP_DIO_WRITE) && inode->i_mapping->nrpages) { | ||
| 1247 | int err; | ||
| 1248 | err = invalidate_inode_pages2_range(inode->i_mapping, | ||
| 1249 | offset >> PAGE_SHIFT, | ||
| 1250 | (offset + dio->size - 1) >> PAGE_SHIFT); | ||
| 1251 | if (err) | ||
| 1252 | dio_warn_stale_pagecache(iocb->ki_filp); | ||
| 1253 | } | ||
| 1254 | |||
| 1255 | /* | ||
| 1256 | * If this is a DSYNC write, make sure we push it to stable storage now | ||
| 1257 | * that we've written data. | ||
| 1258 | */ | ||
| 1259 | if (ret > 0 && (dio->flags & IOMAP_DIO_NEED_SYNC)) | ||
| 1260 | ret = generic_write_sync(iocb, ret); | ||
| 1261 | |||
| 1262 | inode_dio_end(file_inode(iocb->ki_filp)); | ||
| 1263 | kfree(dio); | ||
| 1264 | |||
| 1265 | return ret; | ||
| 1266 | } | ||
| 1267 | |||
| 1268 | static void iomap_dio_complete_work(struct work_struct *work) | ||
| 1269 | { | ||
| 1270 | struct iomap_dio *dio = container_of(work, struct iomap_dio, aio.work); | ||
| 1271 | struct kiocb *iocb = dio->iocb; | ||
| 1272 | |||
| 1273 | iocb->ki_complete(iocb, iomap_dio_complete(dio), 0); | ||
| 1274 | } | ||
| 1275 | |||
| 1276 | /* | ||
| 1277 | * Set an error in the dio if none is set yet. We have to use cmpxchg | ||
| 1278 | * as the submission context and the completion context(s) can race to | ||
| 1279 | * update the error. | ||
| 1280 | */ | ||
| 1281 | static inline void iomap_dio_set_error(struct iomap_dio *dio, int ret) | ||
| 1282 | { | ||
| 1283 | cmpxchg(&dio->error, 0, ret); | ||
| 1284 | } | ||
| 1285 | |||
| 1286 | static void iomap_dio_bio_end_io(struct bio *bio) | ||
| 1287 | { | ||
| 1288 | struct iomap_dio *dio = bio->bi_private; | ||
| 1289 | bool should_dirty = (dio->flags & IOMAP_DIO_DIRTY); | ||
| 1290 | |||
| 1291 | if (bio->bi_status) | ||
| 1292 | iomap_dio_set_error(dio, blk_status_to_errno(bio->bi_status)); | ||
| 1293 | |||
| 1294 | if (atomic_dec_and_test(&dio->ref)) { | ||
| 1295 | if (dio->wait_for_completion) { | ||
| 1296 | struct task_struct *waiter = dio->submit.waiter; | ||
| 1297 | WRITE_ONCE(dio->submit.waiter, NULL); | ||
| 1298 | blk_wake_io_task(waiter); | ||
| 1299 | } else if (dio->flags & IOMAP_DIO_WRITE) { | ||
| 1300 | struct inode *inode = file_inode(dio->iocb->ki_filp); | ||
| 1301 | |||
| 1302 | INIT_WORK(&dio->aio.work, iomap_dio_complete_work); | ||
| 1303 | queue_work(inode->i_sb->s_dio_done_wq, &dio->aio.work); | ||
| 1304 | } else { | ||
| 1305 | iomap_dio_complete_work(&dio->aio.work); | ||
| 1306 | } | ||
| 1307 | } | ||
| 1308 | |||
| 1309 | if (should_dirty) { | ||
| 1310 | bio_check_pages_dirty(bio); | ||
| 1311 | } else { | ||
| 1312 | bio_release_pages(bio, false); | ||
| 1313 | bio_put(bio); | ||
| 1314 | } | ||
| 1315 | } | ||
| 1316 | |||
| 1317 | static void | ||
| 1318 | iomap_dio_zero(struct iomap_dio *dio, struct iomap *iomap, loff_t pos, | ||
| 1319 | unsigned len) | ||
| 1320 | { | ||
| 1321 | struct page *page = ZERO_PAGE(0); | ||
| 1322 | int flags = REQ_SYNC | REQ_IDLE; | ||
| 1323 | struct bio *bio; | ||
| 1324 | |||
| 1325 | bio = bio_alloc(GFP_KERNEL, 1); | ||
| 1326 | bio_set_dev(bio, iomap->bdev); | ||
| 1327 | bio->bi_iter.bi_sector = iomap_sector(iomap, pos); | ||
| 1328 | bio->bi_private = dio; | ||
| 1329 | bio->bi_end_io = iomap_dio_bio_end_io; | ||
| 1330 | |||
| 1331 | get_page(page); | ||
| 1332 | __bio_add_page(bio, page, len, 0); | ||
| 1333 | bio_set_op_attrs(bio, REQ_OP_WRITE, flags); | ||
| 1334 | iomap_dio_submit_bio(dio, iomap, bio); | ||
| 1335 | } | ||
| 1336 | |||
| 1337 | static loff_t | ||
| 1338 | iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, | ||
| 1339 | struct iomap_dio *dio, struct iomap *iomap) | ||
| 1340 | { | ||
| 1341 | unsigned int blkbits = blksize_bits(bdev_logical_block_size(iomap->bdev)); | ||
| 1342 | unsigned int fs_block_size = i_blocksize(inode), pad; | ||
| 1343 | unsigned int align = iov_iter_alignment(dio->submit.iter); | ||
| 1344 | struct iov_iter iter; | ||
| 1345 | struct bio *bio; | ||
| 1346 | bool need_zeroout = false; | ||
| 1347 | bool use_fua = false; | ||
| 1348 | int nr_pages, ret = 0; | ||
| 1349 | size_t copied = 0; | ||
| 1350 | |||
| 1351 | if ((pos | length | align) & ((1 << blkbits) - 1)) | ||
| 1352 | return -EINVAL; | ||
| 1353 | |||
| 1354 | if (iomap->type == IOMAP_UNWRITTEN) { | ||
| 1355 | dio->flags |= IOMAP_DIO_UNWRITTEN; | ||
| 1356 | need_zeroout = true; | ||
| 1357 | } | ||
| 1358 | |||
| 1359 | if (iomap->flags & IOMAP_F_SHARED) | ||
| 1360 | dio->flags |= IOMAP_DIO_COW; | ||
| 1361 | |||
| 1362 | if (iomap->flags & IOMAP_F_NEW) { | ||
| 1363 | need_zeroout = true; | ||
| 1364 | } else if (iomap->type == IOMAP_MAPPED) { | ||
| 1365 | /* | ||
| 1366 | * Use a FUA write if we need datasync semantics, this is a pure | ||
| 1367 | * data IO that doesn't require any metadata updates (including | ||
| 1368 | * after IO completion such as unwritten extent conversion) and | ||
| 1369 | * the underlying device supports FUA. This allows us to avoid | ||
| 1370 | * cache flushes on IO completion. | ||
| 1371 | */ | ||
| 1372 | if (!(iomap->flags & (IOMAP_F_SHARED|IOMAP_F_DIRTY)) && | ||
| 1373 | (dio->flags & IOMAP_DIO_WRITE_FUA) && | ||
| 1374 | blk_queue_fua(bdev_get_queue(iomap->bdev))) | ||
| 1375 | use_fua = true; | ||
| 1376 | } | ||
| 1377 | |||
| 1378 | /* | ||
| 1379 | * Operate on a partial iter trimmed to the extent we were called for. | ||
| 1380 | * We'll update the iter in the dio once we're done with this extent. | ||
| 1381 | */ | ||
| 1382 | iter = *dio->submit.iter; | ||
| 1383 | iov_iter_truncate(&iter, length); | ||
| 1384 | |||
| 1385 | nr_pages = iov_iter_npages(&iter, BIO_MAX_PAGES); | ||
| 1386 | if (nr_pages <= 0) | ||
| 1387 | return nr_pages; | ||
| 1388 | |||
| 1389 | if (need_zeroout) { | ||
| 1390 | /* zero out from the start of the block to the write offset */ | ||
| 1391 | pad = pos & (fs_block_size - 1); | ||
| 1392 | if (pad) | ||
| 1393 | iomap_dio_zero(dio, iomap, pos - pad, pad); | ||
| 1394 | } | ||
| 1395 | |||
| 1396 | do { | ||
| 1397 | size_t n; | ||
| 1398 | if (dio->error) { | ||
| 1399 | iov_iter_revert(dio->submit.iter, copied); | ||
| 1400 | return 0; | ||
| 1401 | } | ||
| 1402 | |||
| 1403 | bio = bio_alloc(GFP_KERNEL, nr_pages); | ||
| 1404 | bio_set_dev(bio, iomap->bdev); | ||
| 1405 | bio->bi_iter.bi_sector = iomap_sector(iomap, pos); | ||
| 1406 | bio->bi_write_hint = dio->iocb->ki_hint; | ||
| 1407 | bio->bi_ioprio = dio->iocb->ki_ioprio; | ||
| 1408 | bio->bi_private = dio; | ||
| 1409 | bio->bi_end_io = iomap_dio_bio_end_io; | ||
| 1410 | |||
| 1411 | ret = bio_iov_iter_get_pages(bio, &iter); | ||
| 1412 | if (unlikely(ret)) { | ||
| 1413 | /* | ||
| 1414 | * We have to stop part way through an IO. We must fall | ||
| 1415 | * through to the sub-block tail zeroing here, otherwise | ||
| 1416 | * this short IO may expose stale data in the tail of | ||
| 1417 | * the block we haven't written data to. | ||
| 1418 | */ | ||
| 1419 | bio_put(bio); | ||
| 1420 | goto zero_tail; | ||
| 1421 | } | ||
| 1422 | |||
| 1423 | n = bio->bi_iter.bi_size; | ||
| 1424 | if (dio->flags & IOMAP_DIO_WRITE) { | ||
| 1425 | bio->bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE; | ||
| 1426 | if (use_fua) | ||
| 1427 | bio->bi_opf |= REQ_FUA; | ||
| 1428 | else | ||
| 1429 | dio->flags &= ~IOMAP_DIO_WRITE_FUA; | ||
| 1430 | task_io_account_write(n); | ||
| 1431 | } else { | ||
| 1432 | bio->bi_opf = REQ_OP_READ; | ||
| 1433 | if (dio->flags & IOMAP_DIO_DIRTY) | ||
| 1434 | bio_set_pages_dirty(bio); | ||
| 1435 | } | ||
| 1436 | |||
| 1437 | iov_iter_advance(dio->submit.iter, n); | ||
| 1438 | |||
| 1439 | dio->size += n; | ||
| 1440 | pos += n; | ||
| 1441 | copied += n; | ||
| 1442 | |||
| 1443 | nr_pages = iov_iter_npages(&iter, BIO_MAX_PAGES); | ||
| 1444 | iomap_dio_submit_bio(dio, iomap, bio); | ||
| 1445 | } while (nr_pages); | ||
| 1446 | |||
| 1447 | /* | ||
| 1448 | * We need to zeroout the tail of a sub-block write if the extent type | ||
| 1449 | * requires zeroing or the write extends beyond EOF. If we don't zero | ||
| 1450 | * the block tail in the latter case, we can expose stale data via mmap | ||
| 1451 | * reads of the EOF block. | ||
| 1452 | */ | ||
| 1453 | zero_tail: | ||
| 1454 | if (need_zeroout || | ||
| 1455 | ((dio->flags & IOMAP_DIO_WRITE) && pos >= i_size_read(inode))) { | ||
| 1456 | /* zero out from the end of the write to the end of the block */ | ||
| 1457 | pad = pos & (fs_block_size - 1); | ||
| 1458 | if (pad) | ||
| 1459 | iomap_dio_zero(dio, iomap, pos, fs_block_size - pad); | ||
| 1460 | } | ||
| 1461 | return copied ? copied : ret; | ||
| 1462 | } | ||
| 1463 | |||
| 1464 | static loff_t | ||
| 1465 | iomap_dio_hole_actor(loff_t length, struct iomap_dio *dio) | ||
| 1466 | { | ||
| 1467 | length = iov_iter_zero(length, dio->submit.iter); | ||
| 1468 | dio->size += length; | ||
| 1469 | return length; | ||
| 1470 | } | ||
| 1471 | |||
| 1472 | static loff_t | ||
| 1473 | iomap_dio_inline_actor(struct inode *inode, loff_t pos, loff_t length, | ||
| 1474 | struct iomap_dio *dio, struct iomap *iomap) | ||
| 1475 | { | ||
| 1476 | struct iov_iter *iter = dio->submit.iter; | ||
| 1477 | size_t copied; | ||
| 1478 | |||
| 1479 | BUG_ON(pos + length > PAGE_SIZE - offset_in_page(iomap->inline_data)); | ||
| 1480 | |||
| 1481 | if (dio->flags & IOMAP_DIO_WRITE) { | ||
| 1482 | loff_t size = inode->i_size; | ||
| 1483 | |||
| 1484 | if (pos > size) | ||
| 1485 | memset(iomap->inline_data + size, 0, pos - size); | ||
| 1486 | copied = copy_from_iter(iomap->inline_data + pos, length, iter); | ||
| 1487 | if (copied) { | ||
| 1488 | if (pos + copied > size) | ||
| 1489 | i_size_write(inode, pos + copied); | ||
| 1490 | mark_inode_dirty(inode); | ||
| 1491 | } | ||
| 1492 | } else { | ||
| 1493 | copied = copy_to_iter(iomap->inline_data + pos, length, iter); | ||
| 1494 | } | ||
| 1495 | dio->size += copied; | ||
| 1496 | return copied; | ||
| 1497 | } | ||
| 1498 | |||
| 1499 | static loff_t | ||
| 1500 | iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length, | ||
| 1501 | void *data, struct iomap *iomap) | ||
| 1502 | { | ||
| 1503 | struct iomap_dio *dio = data; | ||
| 1504 | |||
| 1505 | switch (iomap->type) { | ||
| 1506 | case IOMAP_HOLE: | ||
| 1507 | if (WARN_ON_ONCE(dio->flags & IOMAP_DIO_WRITE)) | ||
| 1508 | return -EIO; | ||
| 1509 | return iomap_dio_hole_actor(length, dio); | ||
| 1510 | case IOMAP_UNWRITTEN: | ||
| 1511 | if (!(dio->flags & IOMAP_DIO_WRITE)) | ||
| 1512 | return iomap_dio_hole_actor(length, dio); | ||
| 1513 | return iomap_dio_bio_actor(inode, pos, length, dio, iomap); | ||
| 1514 | case IOMAP_MAPPED: | ||
| 1515 | return iomap_dio_bio_actor(inode, pos, length, dio, iomap); | ||
| 1516 | case IOMAP_INLINE: | ||
| 1517 | return iomap_dio_inline_actor(inode, pos, length, dio, iomap); | ||
| 1518 | default: | ||
| 1519 | WARN_ON_ONCE(1); | ||
| 1520 | return -EIO; | ||
| 1521 | } | ||
| 1522 | } | ||
| 1523 | |||
| 1524 | /* | ||
| 1525 | * iomap_dio_rw() always completes O_[D]SYNC writes regardless of whether the IO | ||
| 1526 | * is being issued as AIO or not. This allows us to optimise pure data writes | ||
| 1527 | * to use REQ_FUA rather than requiring generic_write_sync() to issue a | ||
| 1528 | * REQ_FLUSH post write. This is slightly tricky because a single request here | ||
| 1529 | * can be mapped into multiple disjoint IOs and only a subset of the IOs issued | ||
| 1530 | * may be pure data writes. In that case, we still need to do a full data sync | ||
| 1531 | * completion. | ||
| 1532 | */ | ||
| 1533 | ssize_t | ||
| 1534 | iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, | ||
| 1535 | const struct iomap_ops *ops, iomap_dio_end_io_t end_io) | ||
| 1536 | { | ||
| 1537 | struct address_space *mapping = iocb->ki_filp->f_mapping; | ||
| 1538 | struct inode *inode = file_inode(iocb->ki_filp); | ||
| 1539 | size_t count = iov_iter_count(iter); | ||
| 1540 | loff_t pos = iocb->ki_pos, start = pos; | ||
| 1541 | loff_t end = iocb->ki_pos + count - 1, ret = 0; | ||
| 1542 | unsigned int flags = IOMAP_DIRECT; | ||
| 1543 | bool wait_for_completion = is_sync_kiocb(iocb); | ||
| 1544 | struct blk_plug plug; | ||
| 1545 | struct iomap_dio *dio; | ||
| 1546 | |||
| 1547 | lockdep_assert_held(&inode->i_rwsem); | ||
| 1548 | |||
| 1549 | if (!count) | ||
| 1550 | return 0; | ||
| 1551 | |||
| 1552 | dio = kmalloc(sizeof(*dio), GFP_KERNEL); | ||
| 1553 | if (!dio) | ||
| 1554 | return -ENOMEM; | ||
| 1555 | |||
| 1556 | dio->iocb = iocb; | ||
| 1557 | atomic_set(&dio->ref, 1); | ||
| 1558 | dio->size = 0; | ||
| 1559 | dio->i_size = i_size_read(inode); | ||
| 1560 | dio->end_io = end_io; | ||
| 1561 | dio->error = 0; | ||
| 1562 | dio->flags = 0; | ||
| 1563 | |||
| 1564 | dio->submit.iter = iter; | ||
| 1565 | dio->submit.waiter = current; | ||
| 1566 | dio->submit.cookie = BLK_QC_T_NONE; | ||
| 1567 | dio->submit.last_queue = NULL; | ||
| 1568 | |||
| 1569 | if (iov_iter_rw(iter) == READ) { | ||
| 1570 | if (pos >= dio->i_size) | ||
| 1571 | goto out_free_dio; | ||
| 1572 | |||
| 1573 | if (iter_is_iovec(iter) && iov_iter_rw(iter) == READ) | ||
| 1574 | dio->flags |= IOMAP_DIO_DIRTY; | ||
| 1575 | } else { | ||
| 1576 | flags |= IOMAP_WRITE; | ||
| 1577 | dio->flags |= IOMAP_DIO_WRITE; | ||
| 1578 | |||
| 1579 | /* for data sync or sync, we need sync completion processing */ | ||
| 1580 | if (iocb->ki_flags & IOCB_DSYNC) | ||
| 1581 | dio->flags |= IOMAP_DIO_NEED_SYNC; | ||
| 1582 | |||
| 1583 | /* | ||
| 1584 | * For datasync only writes, we optimistically try using FUA for | ||
| 1585 | * this IO. Any non-FUA write that occurs will clear this flag, | ||
| 1586 | * hence we know before completion whether a cache flush is | ||
| 1587 | * necessary. | ||
| 1588 | */ | ||
| 1589 | if ((iocb->ki_flags & (IOCB_DSYNC | IOCB_SYNC)) == IOCB_DSYNC) | ||
| 1590 | dio->flags |= IOMAP_DIO_WRITE_FUA; | ||
| 1591 | } | ||
| 1592 | |||
| 1593 | if (iocb->ki_flags & IOCB_NOWAIT) { | ||
| 1594 | if (filemap_range_has_page(mapping, start, end)) { | ||
| 1595 | ret = -EAGAIN; | ||
| 1596 | goto out_free_dio; | ||
| 1597 | } | ||
| 1598 | flags |= IOMAP_NOWAIT; | ||
| 1599 | } | ||
| 1600 | |||
| 1601 | ret = filemap_write_and_wait_range(mapping, start, end); | ||
| 1602 | if (ret) | ||
| 1603 | goto out_free_dio; | ||
| 1604 | |||
| 1605 | /* | ||
| 1606 | * Try to invalidate cache pages for the range we're direct | ||
| 1607 | * writing. If this invalidation fails, tough, the write will | ||
| 1608 | * still work, but racing two incompatible write paths is a | ||
| 1609 | * pretty crazy thing to do, so we don't support it 100%. | ||
| 1610 | */ | ||
| 1611 | ret = invalidate_inode_pages2_range(mapping, | ||
| 1612 | start >> PAGE_SHIFT, end >> PAGE_SHIFT); | ||
| 1613 | if (ret) | ||
| 1614 | dio_warn_stale_pagecache(iocb->ki_filp); | ||
| 1615 | ret = 0; | ||
| 1616 | |||
| 1617 | if (iov_iter_rw(iter) == WRITE && !wait_for_completion && | ||
| 1618 | !inode->i_sb->s_dio_done_wq) { | ||
| 1619 | ret = sb_init_dio_done_wq(inode->i_sb); | ||
| 1620 | if (ret < 0) | ||
| 1621 | goto out_free_dio; | ||
| 1622 | } | ||
| 1623 | |||
| 1624 | inode_dio_begin(inode); | ||
| 1625 | |||
| 1626 | blk_start_plug(&plug); | ||
| 1627 | do { | ||
| 1628 | ret = iomap_apply(inode, pos, count, flags, ops, dio, | ||
| 1629 | iomap_dio_actor); | ||
| 1630 | if (ret <= 0) { | ||
| 1631 | /* magic error code to fall back to buffered I/O */ | ||
| 1632 | if (ret == -ENOTBLK) { | ||
| 1633 | wait_for_completion = true; | ||
| 1634 | ret = 0; | ||
| 1635 | } | ||
| 1636 | break; | ||
| 1637 | } | ||
| 1638 | pos += ret; | ||
| 1639 | |||
| 1640 | if (iov_iter_rw(iter) == READ && pos >= dio->i_size) | ||
| 1641 | break; | ||
| 1642 | } while ((count = iov_iter_count(iter)) > 0); | ||
| 1643 | blk_finish_plug(&plug); | ||
| 1644 | |||
| 1645 | if (ret < 0) | ||
| 1646 | iomap_dio_set_error(dio, ret); | ||
| 1647 | |||
| 1648 | /* | ||
| 1649 | * If all the writes we issued were FUA, we don't need to flush the | ||
| 1650 | * cache on IO completion. Clear the sync flag for this case. | ||
| 1651 | */ | ||
| 1652 | if (dio->flags & IOMAP_DIO_WRITE_FUA) | ||
| 1653 | dio->flags &= ~IOMAP_DIO_NEED_SYNC; | ||
| 1654 | |||
| 1655 | WRITE_ONCE(iocb->ki_cookie, dio->submit.cookie); | ||
| 1656 | WRITE_ONCE(iocb->private, dio->submit.last_queue); | ||
| 1657 | |||
| 1658 | /* | ||
| 1659 | * We are about to drop our additional submission reference, which | ||
| 1660 | * might be the last reference to the dio. There are three three | ||
| 1661 | * different ways we can progress here: | ||
| 1662 | * | ||
| 1663 | * (a) If this is the last reference we will always complete and free | ||
| 1664 | * the dio ourselves. | ||
| 1665 | * (b) If this is not the last reference, and we serve an asynchronous | ||
| 1666 | * iocb, we must never touch the dio after the decrement, the | ||
| 1667 | * I/O completion handler will complete and free it. | ||
| 1668 | * (c) If this is not the last reference, but we serve a synchronous | ||
| 1669 | * iocb, the I/O completion handler will wake us up on the drop | ||
| 1670 | * of the final reference, and we will complete and free it here | ||
| 1671 | * after we got woken by the I/O completion handler. | ||
| 1672 | */ | ||
| 1673 | dio->wait_for_completion = wait_for_completion; | ||
| 1674 | if (!atomic_dec_and_test(&dio->ref)) { | ||
| 1675 | if (!wait_for_completion) | ||
| 1676 | return -EIOCBQUEUED; | ||
| 1677 | |||
| 1678 | for (;;) { | ||
| 1679 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
| 1680 | if (!READ_ONCE(dio->submit.waiter)) | ||
| 1681 | break; | ||
| 1682 | |||
| 1683 | if (!(iocb->ki_flags & IOCB_HIPRI) || | ||
| 1684 | !dio->submit.last_queue || | ||
| 1685 | !blk_poll(dio->submit.last_queue, | ||
| 1686 | dio->submit.cookie, true)) | ||
| 1687 | io_schedule(); | ||
| 1688 | } | ||
| 1689 | __set_current_state(TASK_RUNNING); | ||
| 1690 | } | ||
| 1691 | |||
| 1692 | return iomap_dio_complete(dio); | ||
| 1693 | |||
| 1694 | out_free_dio: | ||
| 1695 | kfree(dio); | ||
| 1696 | return ret; | ||
| 1697 | } | ||
| 1698 | EXPORT_SYMBOL_GPL(iomap_dio_rw); | ||
| @@ -6,6 +6,7 @@ · 5 unmodified lines | |||
| 6 | obj-$(CONFIG_FS_IOMAP) += iomap.o | 6 | obj-$(CONFIG_FS_IOMAP) += iomap.o |
| 7 | 7 | ||
| 8 | iomap-y += \ | 8 | iomap-y += \ |
| 9 | direct-io.o \ | ||
| 9 | fiemap.o \ | 10 | fiemap.o \ |
| 10 | seek.o | 11 | seek.o |
| 11 | 12 | ||
| @@ -0,0 +1,562 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 2 | /* | ||
| 3 | * Copyright (C) 2010 Red Hat, Inc. | ||
| 4 | * Copyright (c) 2016-2018 Christoph Hellwig. | ||
| 5 | */ | ||
| 6 | #include <linux/module.h> | ||
| 7 | #include <linux/compiler.h> | ||
| 8 | #include <linux/fs.h> | ||
| 9 | #include <linux/iomap.h> | ||
| 10 | #include <linux/backing-dev.h> | ||
| 11 | #include <linux/uio.h> | ||
| 12 | #include <linux/task_io_accounting_ops.h> | ||
| 13 | |||
| 14 | #include "../internal.h" | ||
| 15 | |||
| 16 | /* | ||
| 17 | * Private flags for iomap_dio, must not overlap with the public ones in | ||
| 18 | * iomap.h: | ||
| 19 | */ | ||
| 20 | #define IOMAP_DIO_WRITE_FUA (1 << 28) | ||
| 21 | #define IOMAP_DIO_NEED_SYNC (1 << 29) | ||
| 22 | #define IOMAP_DIO_WRITE (1 << 30) | ||
| 23 | #define IOMAP_DIO_DIRTY (1 << 31) | ||
| 24 | |||
| 25 | struct iomap_dio { | ||
| 26 | struct kiocb *iocb; | ||
| 27 | iomap_dio_end_io_t *end_io; | ||
| 28 | loff_t i_size; | ||
| 29 | loff_t size; | ||
| 30 | atomic_t ref; | ||
| 31 | unsigned flags; | ||
| 32 | int error; | ||
| 33 | bool wait_for_completion; | ||
| 34 | |||
| 35 | union { | ||
| 36 | /* used during submission and for synchronous completion: */ | ||
| 37 | struct { | ||
| 38 | struct iov_iter *iter; | ||
| 39 | struct task_struct *waiter; | ||
| 40 | struct request_queue *last_queue; | ||
| 41 | blk_qc_t cookie; | ||
| 42 | } submit; | ||
| 43 | |||
| 44 | /* used for aio completion: */ | ||
| 45 | struct { | ||
| 46 | struct work_struct work; | ||
| 47 | } aio; | ||
| 48 | }; | ||
| 49 | }; | ||
| 50 | |||
| 51 | int iomap_dio_iopoll(struct kiocb *kiocb, bool spin) | ||
| 52 | { | ||
| 53 | struct request_queue *q = READ_ONCE(kiocb->private); | ||
| 54 | |||
| 55 | if (!q) | ||
| 56 | return 0; | ||
| 57 | return blk_poll(q, READ_ONCE(kiocb->ki_cookie), spin); | ||
| 58 | } | ||
| 59 | EXPORT_SYMBOL_GPL(iomap_dio_iopoll); | ||
| 60 | |||
| 61 | static void iomap_dio_submit_bio(struct iomap_dio *dio, struct iomap *iomap, | ||
| 62 | struct bio *bio) | ||
| 63 | { | ||
| 64 | atomic_inc(&dio->ref); | ||
| 65 | |||
| 66 | if (dio->iocb->ki_flags & IOCB_HIPRI) | ||
| 67 | bio_set_polled(bio, dio->iocb); | ||
| 68 | |||
| 69 | dio->submit.last_queue = bdev_get_queue(iomap->bdev); | ||
| 70 | dio->submit.cookie = submit_bio(bio); | ||
| 71 | } | ||
| 72 | |||
| 73 | static ssize_t iomap_dio_complete(struct iomap_dio *dio) | ||
| 74 | { | ||
| 75 | struct kiocb *iocb = dio->iocb; | ||
| 76 | struct inode *inode = file_inode(iocb->ki_filp); | ||
| 77 | loff_t offset = iocb->ki_pos; | ||
| 78 | ssize_t ret; | ||
| 79 | |||
| 80 | if (dio->end_io) { | ||
| 81 | ret = dio->end_io(iocb, | ||
| 82 | dio->error ? dio->error : dio->size, | ||
| 83 | dio->flags); | ||
| 84 | } else { | ||
| 85 | ret = dio->error; | ||
| 86 | } | ||
| 87 | |||
| 88 | if (likely(!ret)) { | ||
| 89 | ret = dio->size; | ||
| 90 | /* check for short read */ | ||
| 91 | if (offset + ret > dio->i_size && | ||
| 92 | !(dio->flags & IOMAP_DIO_WRITE)) | ||
| 93 | ret = dio->i_size - offset; | ||
| 94 | iocb->ki_pos += ret; | ||
| 95 | } | ||
| 96 | |||
| 97 | /* | ||
| 98 | * Try again to invalidate clean pages which might have been cached by | ||
| 99 | * non-direct readahead, or faulted in by get_user_pages() if the source | ||
| 100 | * of the write was an mmap'ed region of the file we're writing. Either | ||
| 101 | * one is a pretty crazy thing to do, so we don't support it 100%. If | ||
| 102 | * this invalidation fails, tough, the write still worked... | ||
| 103 | * | ||
| 104 | * And this page cache invalidation has to be after dio->end_io(), as | ||
| 105 | * some filesystems convert unwritten extents to real allocations in | ||
| 106 | * end_io() when necessary, otherwise a racing buffer read would cache | ||
| 107 | * zeros from unwritten extents. | ||
| 108 | */ | ||
| 109 | if (!dio->error && | ||
| 110 | (dio->flags & IOMAP_DIO_WRITE) && inode->i_mapping->nrpages) { | ||
| 111 | int err; | ||
| 112 | err = invalidate_inode_pages2_range(inode->i_mapping, | ||
| 113 | offset >> PAGE_SHIFT, | ||
| 114 | (offset + dio->size - 1) >> PAGE_SHIFT); | ||
| 115 | if (err) | ||
| 116 | dio_warn_stale_pagecache(iocb->ki_filp); | ||
| 117 | } | ||
| 118 | |||
| 119 | /* | ||
| 120 | * If this is a DSYNC write, make sure we push it to stable storage now | ||
| 121 | * that we've written data. | ||
| 122 | */ | ||
| 123 | if (ret > 0 && (dio->flags & IOMAP_DIO_NEED_SYNC)) | ||
| 124 | ret = generic_write_sync(iocb, ret); | ||
| 125 | |||
| 126 | inode_dio_end(file_inode(iocb->ki_filp)); | ||
| 127 | kfree(dio); | ||
| 128 | |||
| 129 | return ret; | ||
| 130 | } | ||
| 131 | |||
| 132 | static void iomap_dio_complete_work(struct work_struct *work) | ||
| 133 | { | ||
| 134 | struct iomap_dio *dio = container_of(work, struct iomap_dio, aio.work); | ||
| 135 | struct kiocb *iocb = dio->iocb; | ||
| 136 | |||
| 137 | iocb->ki_complete(iocb, iomap_dio_complete(dio), 0); | ||
| 138 | } | ||
| 139 | |||
| 140 | /* | ||
| 141 | * Set an error in the dio if none is set yet. We have to use cmpxchg | ||
| 142 | * as the submission context and the completion context(s) can race to | ||
| 143 | * update the error. | ||
| 144 | */ | ||
| 145 | static inline void iomap_dio_set_error(struct iomap_dio *dio, int ret) | ||
| 146 | { | ||
| 147 | cmpxchg(&dio->error, 0, ret); | ||
| 148 | } | ||
| 149 | |||
| 150 | static void iomap_dio_bio_end_io(struct bio *bio) | ||
| 151 | { | ||
| 152 | struct iomap_dio *dio = bio->bi_private; | ||
| 153 | bool should_dirty = (dio->flags & IOMAP_DIO_DIRTY); | ||
| 154 | |||
| 155 | if (bio->bi_status) | ||
| 156 | iomap_dio_set_error(dio, blk_status_to_errno(bio->bi_status)); | ||
| 157 | |||
| 158 | if (atomic_dec_and_test(&dio->ref)) { | ||
| 159 | if (dio->wait_for_completion) { | ||
| 160 | struct task_struct *waiter = dio->submit.waiter; | ||
| 161 | WRITE_ONCE(dio->submit.waiter, NULL); | ||
| 162 | blk_wake_io_task(waiter); | ||
| 163 | } else if (dio->flags & IOMAP_DIO_WRITE) { | ||
| 164 | struct inode *inode = file_inode(dio->iocb->ki_filp); | ||
| 165 | |||
| 166 | INIT_WORK(&dio->aio.work, iomap_dio_complete_work); | ||
| 167 | queue_work(inode->i_sb->s_dio_done_wq, &dio->aio.work); | ||
| 168 | } else { | ||
| 169 | iomap_dio_complete_work(&dio->aio.work); | ||
| 170 | } | ||
| 171 | } | ||
| 172 | |||
| 173 | if (should_dirty) { | ||
| 174 | bio_check_pages_dirty(bio); | ||
| 175 | } else { | ||
| 176 | bio_release_pages(bio, false); | ||
| 177 | bio_put(bio); | ||
| 178 | } | ||
| 179 | } | ||
| 180 | |||
| 181 | static void | ||
| 182 | iomap_dio_zero(struct iomap_dio *dio, struct iomap *iomap, loff_t pos, | ||
| 183 | unsigned len) | ||
| 184 | { | ||
| 185 | struct page *page = ZERO_PAGE(0); | ||
| 186 | int flags = REQ_SYNC | REQ_IDLE; | ||
| 187 | struct bio *bio; | ||
| 188 | |||
| 189 | bio = bio_alloc(GFP_KERNEL, 1); | ||
| 190 | bio_set_dev(bio, iomap->bdev); | ||
| 191 | bio->bi_iter.bi_sector = iomap_sector(iomap, pos); | ||
| 192 | bio->bi_private = dio; | ||
| 193 | bio->bi_end_io = iomap_dio_bio_end_io; | ||
| 194 | |||
| 195 | get_page(page); | ||
| 196 | __bio_add_page(bio, page, len, 0); | ||
| 197 | bio_set_op_attrs(bio, REQ_OP_WRITE, flags); | ||
| 198 | iomap_dio_submit_bio(dio, iomap, bio); | ||
| 199 | } | ||
| 200 | |||
| 201 | static loff_t | ||
| 202 | iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, | ||
| 203 | struct iomap_dio *dio, struct iomap *iomap) | ||
| 204 | { | ||
| 205 | unsigned int blkbits = blksize_bits(bdev_logical_block_size(iomap->bdev)); | ||
| 206 | unsigned int fs_block_size = i_blocksize(inode), pad; | ||
| 207 | unsigned int align = iov_iter_alignment(dio->submit.iter); | ||
| 208 | struct iov_iter iter; | ||
| 209 | struct bio *bio; | ||
| 210 | bool need_zeroout = false; | ||
| 211 | bool use_fua = false; | ||
| 212 | int nr_pages, ret = 0; | ||
| 213 | size_t copied = 0; | ||
| 214 | |||
| 215 | if ((pos | length | align) & ((1 << blkbits) - 1)) | ||
| 216 | return -EINVAL; | ||
| 217 | |||
| 218 | if (iomap->type == IOMAP_UNWRITTEN) { | ||
| 219 | dio->flags |= IOMAP_DIO_UNWRITTEN; | ||
| 220 | need_zeroout = true; | ||
| 221 | } | ||
| 222 | |||
| 223 | if (iomap->flags & IOMAP_F_SHARED) | ||
| 224 | dio->flags |= IOMAP_DIO_COW; | ||
| 225 | |||
| 226 | if (iomap->flags & IOMAP_F_NEW) { | ||
| 227 | need_zeroout = true; | ||
| 228 | } else if (iomap->type == IOMAP_MAPPED) { | ||
| 229 | /* | ||
| 230 | * Use a FUA write if we need datasync semantics, this is a pure | ||
| 231 | * data IO that doesn't require any metadata updates (including | ||
| 232 | * after IO completion such as unwritten extent conversion) and | ||
| 233 | * the underlying device supports FUA. This allows us to avoid | ||
| 234 | * cache flushes on IO completion. | ||
| 235 | */ | ||
| 236 | if (!(iomap->flags & (IOMAP_F_SHARED|IOMAP_F_DIRTY)) && | ||
| 237 | (dio->flags & IOMAP_DIO_WRITE_FUA) && | ||
| 238 | blk_queue_fua(bdev_get_queue(iomap->bdev))) | ||
| 239 | use_fua = true; | ||
| 240 | } | ||
| 241 | |||
| 242 | /* | ||
| 243 | * Operate on a partial iter trimmed to the extent we were called for. | ||
| 244 | * We'll update the iter in the dio once we're done with this extent. | ||
| 245 | */ | ||
| 246 | iter = *dio->submit.iter; | ||
| 247 | iov_iter_truncate(&iter, length); | ||
| 248 | |||
| 249 | nr_pages = iov_iter_npages(&iter, BIO_MAX_PAGES); | ||
| 250 | if (nr_pages <= 0) | ||
| 251 | return nr_pages; | ||
| 252 | |||
| 253 | if (need_zeroout) { | ||
| 254 | /* zero out from the start of the block to the write offset */ | ||
| 255 | pad = pos & (fs_block_size - 1); | ||
| 256 | if (pad) | ||
| 257 | iomap_dio_zero(dio, iomap, pos - pad, pad); | ||
| 258 | } | ||
| 259 | |||
| 260 | do { | ||
| 261 | size_t n; | ||
| 262 | if (dio->error) { | ||
| 263 | iov_iter_revert(dio->submit.iter, copied); | ||
| 264 | return 0; | ||
| 265 | } | ||
| 266 | |||
| 267 | bio = bio_alloc(GFP_KERNEL, nr_pages); | ||
| 268 | bio_set_dev(bio, iomap->bdev); | ||
| 269 | bio->bi_iter.bi_sector = iomap_sector(iomap, pos); | ||
| 270 | bio->bi_write_hint = dio->iocb->ki_hint; | ||
| 271 | bio->bi_ioprio = dio->iocb->ki_ioprio; | ||
| 272 | bio->bi_private = dio; | ||
| 273 | bio->bi_end_io = iomap_dio_bio_end_io; | ||
| 274 | |||
| 275 | ret = bio_iov_iter_get_pages(bio, &iter); | ||
| 276 | if (unlikely(ret)) { | ||
| 277 | /* | ||
| 278 | * We have to stop part way through an IO. We must fall | ||
| 279 | * through to the sub-block tail zeroing here, otherwise | ||
| 280 | * this short IO may expose stale data in the tail of | ||
| 281 | * the block we haven't written data to. | ||
| 282 | */ | ||
| 283 | bio_put(bio); | ||
| 284 | goto zero_tail; | ||
| 285 | } | ||
| 286 | |||
| 287 | n = bio->bi_iter.bi_size; | ||
| 288 | if (dio->flags & IOMAP_DIO_WRITE) { | ||
| 289 | bio->bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE; | ||
| 290 | if (use_fua) | ||
| 291 | bio->bi_opf |= REQ_FUA; | ||
| 292 | else | ||
| 293 | dio->flags &= ~IOMAP_DIO_WRITE_FUA; | ||
| 294 | task_io_account_write(n); | ||
| 295 | } else { | ||
| 296 | bio->bi_opf = REQ_OP_READ; | ||
| 297 | if (dio->flags & IOMAP_DIO_DIRTY) | ||
| 298 | bio_set_pages_dirty(bio); | ||
| 299 | } | ||
| 300 | |||
| 301 | iov_iter_advance(dio->submit.iter, n); | ||
| 302 | |||
| 303 | dio->size += n; | ||
| 304 | pos += n; | ||
| 305 | copied += n; | ||
| 306 | |||
| 307 | nr_pages = iov_iter_npages(&iter, BIO_MAX_PAGES); | ||
| 308 | iomap_dio_submit_bio(dio, iomap, bio); | ||
| 309 | } while (nr_pages); | ||
| 310 | |||
| 311 | /* | ||
| 312 | * We need to zeroout the tail of a sub-block write if the extent type | ||
| 313 | * requires zeroing or the write extends beyond EOF. If we don't zero | ||
| 314 | * the block tail in the latter case, we can expose stale data via mmap | ||
| 315 | * reads of the EOF block. | ||
| 316 | */ | ||
| 317 | zero_tail: | ||
| 318 | if (need_zeroout || | ||
| 319 | ((dio->flags & IOMAP_DIO_WRITE) && pos >= i_size_read(inode))) { | ||
| 320 | /* zero out from the end of the write to the end of the block */ | ||
| 321 | pad = pos & (fs_block_size - 1); | ||
| 322 | if (pad) | ||
| 323 | iomap_dio_zero(dio, iomap, pos, fs_block_size - pad); | ||
| 324 | } | ||
| 325 | return copied ? copied : ret; | ||
| 326 | } | ||
| 327 | |||
| 328 | static loff_t | ||
| 329 | iomap_dio_hole_actor(loff_t length, struct iomap_dio *dio) | ||
| 330 | { | ||
| 331 | length = iov_iter_zero(length, dio->submit.iter); | ||
| 332 | dio->size += length; | ||
| 333 | return length; | ||
| 334 | } | ||
| 335 | |||
| 336 | static loff_t | ||
| 337 | iomap_dio_inline_actor(struct inode *inode, loff_t pos, loff_t length, | ||
| 338 | struct iomap_dio *dio, struct iomap *iomap) | ||
| 339 | { | ||
| 340 | struct iov_iter *iter = dio->submit.iter; | ||
| 341 | size_t copied; | ||
| 342 | |||
| 343 | BUG_ON(pos + length > PAGE_SIZE - offset_in_page(iomap->inline_data)); | ||
| 344 | |||
| 345 | if (dio->flags & IOMAP_DIO_WRITE) { | ||
| 346 | loff_t size = inode->i_size; | ||
| 347 | |||
| 348 | if (pos > size) | ||
| 349 | memset(iomap->inline_data + size, 0, pos - size); | ||
| 350 | copied = copy_from_iter(iomap->inline_data + pos, length, iter); | ||
| 351 | if (copied) { | ||
| 352 | if (pos + copied > size) | ||
| 353 | i_size_write(inode, pos + copied); | ||
| 354 | mark_inode_dirty(inode); | ||
| 355 | } | ||
| 356 | } else { | ||
| 357 | copied = copy_to_iter(iomap->inline_data + pos, length, iter); | ||
| 358 | } | ||
| 359 | dio->size += copied; | ||
| 360 | return copied; | ||
| 361 | } | ||
| 362 | |||
| 363 | static loff_t | ||
| 364 | iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length, | ||
| 365 | void *data, struct iomap *iomap) | ||
| 366 | { | ||
| 367 | struct iomap_dio *dio = data; | ||
| 368 | |||
| 369 | switch (iomap->type) { | ||
| 370 | case IOMAP_HOLE: | ||
| 371 | if (WARN_ON_ONCE(dio->flags & IOMAP_DIO_WRITE)) | ||
| 372 | return -EIO; | ||
| 373 | return iomap_dio_hole_actor(length, dio); | ||
| 374 | case IOMAP_UNWRITTEN: | ||
| 375 | if (!(dio->flags & IOMAP_DIO_WRITE)) | ||
| 376 | return iomap_dio_hole_actor(length, dio); | ||
| 377 | return iomap_dio_bio_actor(inode, pos, length, dio, iomap); | ||
| 378 | case IOMAP_MAPPED: | ||
| 379 | return iomap_dio_bio_actor(inode, pos, length, dio, iomap); | ||
| 380 | case IOMAP_INLINE: | ||
| 381 | return iomap_dio_inline_actor(inode, pos, length, dio, iomap); | ||
| 382 | default: | ||
| 383 | WARN_ON_ONCE(1); | ||
| 384 | return -EIO; | ||
| 385 | } | ||
| 386 | } | ||
| 387 | |||
| 388 | /* | ||
| 389 | * iomap_dio_rw() always completes O_[D]SYNC writes regardless of whether the IO | ||
| 390 | * is being issued as AIO or not. This allows us to optimise pure data writes | ||
| 391 | * to use REQ_FUA rather than requiring generic_write_sync() to issue a | ||
| 392 | * REQ_FLUSH post write. This is slightly tricky because a single request here | ||
| 393 | * can be mapped into multiple disjoint IOs and only a subset of the IOs issued | ||
| 394 | * may be pure data writes. In that case, we still need to do a full data sync | ||
| 395 | * completion. | ||
| 396 | */ | ||
| 397 | ssize_t | ||
| 398 | iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, | ||
| 399 | const struct iomap_ops *ops, iomap_dio_end_io_t end_io) | ||
| 400 | { | ||
| 401 | struct address_space *mapping = iocb->ki_filp->f_mapping; | ||
| 402 | struct inode *inode = file_inode(iocb->ki_filp); | ||
| 403 | size_t count = iov_iter_count(iter); | ||
| 404 | loff_t pos = iocb->ki_pos, start = pos; | ||
| 405 | loff_t end = iocb->ki_pos + count - 1, ret = 0; | ||
| 406 | unsigned int flags = IOMAP_DIRECT; | ||
| 407 | bool wait_for_completion = is_sync_kiocb(iocb); | ||
| 408 | struct blk_plug plug; | ||
| 409 | struct iomap_dio *dio; | ||
| 410 | |||
| 411 | lockdep_assert_held(&inode->i_rwsem); | ||
| 412 | |||
| 413 | if (!count) | ||
| 414 | return 0; | ||
| 415 | |||
| 416 | dio = kmalloc(sizeof(*dio), GFP_KERNEL); | ||
| 417 | if (!dio) | ||
| 418 | return -ENOMEM; | ||
| 419 | |||
| 420 | dio->iocb = iocb; | ||
| 421 | atomic_set(&dio->ref, 1); | ||
| 422 | dio->size = 0; | ||
| 423 | dio->i_size = i_size_read(inode); | ||
| 424 | dio->end_io = end_io; | ||
| 425 | dio->error = 0; | ||
| 426 | dio->flags = 0; | ||
| 427 | |||
| 428 | dio->submit.iter = iter; | ||
| 429 | dio->submit.waiter = current; | ||
| 430 | dio->submit.cookie = BLK_QC_T_NONE; | ||
| 431 | dio->submit.last_queue = NULL; | ||
| 432 | |||
| 433 | if (iov_iter_rw(iter) == READ) { | ||
| 434 | if (pos >= dio->i_size) | ||
| 435 | goto out_free_dio; | ||
| 436 | |||
| 437 | if (iter_is_iovec(iter) && iov_iter_rw(iter) == READ) | ||
| 438 | dio->flags |= IOMAP_DIO_DIRTY; | ||
| 439 | } else { | ||
| 440 | flags |= IOMAP_WRITE; | ||
| 441 | dio->flags |= IOMAP_DIO_WRITE; | ||
| 442 | |||
| 443 | /* for data sync or sync, we need sync completion processing */ | ||
| 444 | if (iocb->ki_flags & IOCB_DSYNC) | ||
| 445 | dio->flags |= IOMAP_DIO_NEED_SYNC; | ||
| 446 | |||
| 447 | /* | ||
| 448 | * For datasync only writes, we optimistically try using FUA for | ||
| 449 | * this IO. Any non-FUA write that occurs will clear this flag, | ||
| 450 | * hence we know before completion whether a cache flush is | ||
| 451 | * necessary. | ||
| 452 | */ | ||
| 453 | if ((iocb->ki_flags & (IOCB_DSYNC | IOCB_SYNC)) == IOCB_DSYNC) | ||
| 454 | dio->flags |= IOMAP_DIO_WRITE_FUA; | ||
| 455 | } | ||
| 456 | |||
| 457 | if (iocb->ki_flags & IOCB_NOWAIT) { | ||
| 458 | if (filemap_range_has_page(mapping, start, end)) { | ||
| 459 | ret = -EAGAIN; | ||
| 460 | goto out_free_dio; | ||
| 461 | } | ||
| 462 | flags |= IOMAP_NOWAIT; | ||
| 463 | } | ||
| 464 | |||
| 465 | ret = filemap_write_and_wait_range(mapping, start, end); | ||
| 466 | if (ret) | ||
| 467 | goto out_free_dio; | ||
| 468 | |||
| 469 | /* | ||
| 470 | * Try to invalidate cache pages for the range we're direct | ||
| 471 | * writing. If this invalidation fails, tough, the write will | ||
| 472 | * still work, but racing two incompatible write paths is a | ||
| 473 | * pretty crazy thing to do, so we don't support it 100%. | ||
| 474 | */ | ||
| 475 | ret = invalidate_inode_pages2_range(mapping, | ||
| 476 | start >> PAGE_SHIFT, end >> PAGE_SHIFT); | ||
| 477 | if (ret) | ||
| 478 | dio_warn_stale_pagecache(iocb->ki_filp); | ||
| 479 | ret = 0; | ||
| 480 | |||
| 481 | if (iov_iter_rw(iter) == WRITE && !wait_for_completion && | ||
| 482 | !inode->i_sb->s_dio_done_wq) { | ||
| 483 | ret = sb_init_dio_done_wq(inode->i_sb); | ||
| 484 | if (ret < 0) | ||
| 485 | goto out_free_dio; | ||
| 486 | } | ||
| 487 | |||
| 488 | inode_dio_begin(inode); | ||
| 489 | |||
| 490 | blk_start_plug(&plug); | ||
| 491 | do { | ||
| 492 | ret = iomap_apply(inode, pos, count, flags, ops, dio, | ||
| 493 | iomap_dio_actor); | ||
| 494 | if (ret <= 0) { | ||
| 495 | /* magic error code to fall back to buffered I/O */ | ||
| 496 | if (ret == -ENOTBLK) { | ||
| 497 | wait_for_completion = true; | ||
| 498 | ret = 0; | ||
| 499 | } | ||
| 500 | break; | ||
| 501 | } | ||
| 502 | pos += ret; | ||
| 503 | |||
| 504 | if (iov_iter_rw(iter) == READ && pos >= dio->i_size) | ||
| 505 | break; | ||
| 506 | } while ((count = iov_iter_count(iter)) > 0); | ||
| 507 | blk_finish_plug(&plug); | ||
| 508 | |||
| 509 | if (ret < 0) | ||
| 510 | iomap_dio_set_error(dio, ret); | ||
| 511 | |||
| 512 | /* | ||
| 513 | * If all the writes we issued were FUA, we don't need to flush the | ||
| 514 | * cache on IO completion. Clear the sync flag for this case. | ||
| 515 | */ | ||
| 516 | if (dio->flags & IOMAP_DIO_WRITE_FUA) | ||
| 517 | dio->flags &= ~IOMAP_DIO_NEED_SYNC; | ||
| 518 | |||
| 519 | WRITE_ONCE(iocb->ki_cookie, dio->submit.cookie); | ||
| 520 | WRITE_ONCE(iocb->private, dio->submit.last_queue); | ||
| 521 | |||
| 522 | /* | ||
| 523 | * We are about to drop our additional submission reference, which | ||
| 524 | * might be the last reference to the dio. There are three three | ||
| 525 | * different ways we can progress here: | ||
| 526 | * | ||
| 527 | * (a) If this is the last reference we will always complete and free | ||
| 528 | * the dio ourselves. | ||
| 529 | * (b) If this is not the last reference, and we serve an asynchronous | ||
| 530 | * iocb, we must never touch the dio after the decrement, the | ||
| 531 | * I/O completion handler will complete and free it. | ||
| 532 | * (c) If this is not the last reference, but we serve a synchronous | ||
| 533 | * iocb, the I/O completion handler will wake us up on the drop | ||
| 534 | * of the final reference, and we will complete and free it here | ||
| 535 | * after we got woken by the I/O completion handler. | ||
| 536 | */ | ||
| 537 | dio->wait_for_completion = wait_for_completion; | ||
| 538 | if (!atomic_dec_and_test(&dio->ref)) { | ||
| 539 | if (!wait_for_completion) | ||
| 540 | return -EIOCBQUEUED; | ||
| 541 | |||
| 542 | for (;;) { | ||
| 543 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
| 544 | if (!READ_ONCE(dio->submit.waiter)) | ||
| 545 | break; | ||
| 546 | |||
| 547 | if (!(iocb->ki_flags & IOCB_HIPRI) || | ||
| 548 | !dio->submit.last_queue || | ||
| 549 | !blk_poll(dio->submit.last_queue, | ||
| 550 | dio->submit.cookie, true)) | ||
| 551 | io_schedule(); | ||
| 552 | } | ||
| 553 | __set_current_state(TASK_RUNNING); | ||
| 554 | } | ||
| 555 | |||
| 556 | return iomap_dio_complete(dio); | ||
| 557 | |||
| 558 | out_free_dio: | ||
| 559 | kfree(dio); | ||
| 560 | return ret; | ||
| 561 | } | ||
| 562 | EXPORT_SYMBOL_GPL(iomap_dio_rw); | ||
| @@ -7,6 +7,7 @@ · 6 unmodified lines | |||
| 7 | #include <linux/mm.h> | 7 | #include <linux/mm.h> |
| 8 | #include <linux/types.h> | 8 | #include <linux/types.h> |
| 9 | #include <linux/mm_types.h> | 9 | #include <linux/mm_types.h> |
| 10 | #include <linux/blkdev.h> | ||
| 10 | 11 | ||
| 11 | struct address_space; | 12 | struct address_space; |
| 12 | struct fiemap_extent_info; | 13 | struct fiemap_extent_info; |
| @@ -69,6 +70,12 @@ struct iomap { · 56 unmodified lines | |||
| 69 | const struct iomap_page_ops *page_ops; | 70 | const struct iomap_page_ops *page_ops; |
| 70 | }; | 71 | }; |
| 71 | 72 | ||
| 73 | static inline sector_t | ||
| 74 | iomap_sector(struct iomap *iomap, loff_t pos) | ||
| 75 | { | ||
| 76 | return (iomap->addr + pos - iomap->offset) >> SECTOR_SHIFT; | ||
| 77 | } | ||
| 78 | |||
| 72 | /* | 79 | /* |
| 73 | * When a filesystem sets page_ops in an iomap mapping it returns, page_prepare | 80 | * When a filesystem sets page_ops in an iomap mapping it returns, page_prepare |
| 74 | * and page_done will be called for each page written to. This only applies to | 81 | * and page_done will be called for each page written to. This only applies to |