]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/fs-io-direct.c
Disable pristine-tar option in gbp.conf, since there is no pristine-tar branch.
[bcachefs-tools-debian] / libbcachefs / fs-io-direct.c
1 // SPDX-License-Identifier: GPL-2.0
2 #ifndef NO_BCACHEFS_FS
3
4 #include "bcachefs.h"
5 #include "alloc_foreground.h"
6 #include "fs.h"
7 #include "fs-io.h"
8 #include "fs-io-direct.h"
9 #include "fs-io-pagecache.h"
10 #include "io_read.h"
11 #include "io_write.h"
12
13 #include <linux/kthread.h>
14 #include <linux/pagemap.h>
15 #include <linux/prefetch.h>
16 #include <linux/task_io_accounting_ops.h>
17
18 /* O_DIRECT reads */
19
20 struct dio_read {
21         struct closure                  cl;
22         struct kiocb                    *req;
23         long                            ret;
24         bool                            should_dirty;
25         struct bch_read_bio             rbio;
26 };
27
28 static void bio_check_or_release(struct bio *bio, bool check_dirty)
29 {
30         if (check_dirty) {
31                 bio_check_pages_dirty(bio);
32         } else {
33                 bio_release_pages(bio, false);
34                 bio_put(bio);
35         }
36 }
37
38 static CLOSURE_CALLBACK(bch2_dio_read_complete)
39 {
40         closure_type(dio, struct dio_read, cl);
41
42         dio->req->ki_complete(dio->req, dio->ret);
43         bio_check_or_release(&dio->rbio.bio, dio->should_dirty);
44 }
45
46 static void bch2_direct_IO_read_endio(struct bio *bio)
47 {
48         struct dio_read *dio = bio->bi_private;
49
50         if (bio->bi_status)
51                 dio->ret = blk_status_to_errno(bio->bi_status);
52
53         closure_put(&dio->cl);
54 }
55
56 static void bch2_direct_IO_read_split_endio(struct bio *bio)
57 {
58         struct dio_read *dio = bio->bi_private;
59         bool should_dirty = dio->should_dirty;
60
61         bch2_direct_IO_read_endio(bio);
62         bio_check_or_release(bio, should_dirty);
63 }
64
65 static int bch2_direct_IO_read(struct kiocb *req, struct iov_iter *iter)
66 {
67         struct file *file = req->ki_filp;
68         struct bch_inode_info *inode = file_bch_inode(file);
69         struct bch_fs *c = inode->v.i_sb->s_fs_info;
70         struct bch_io_opts opts;
71         struct dio_read *dio;
72         struct bio *bio;
73         loff_t offset = req->ki_pos;
74         bool sync = is_sync_kiocb(req);
75         size_t shorten;
76         ssize_t ret;
77
78         bch2_inode_opts_get(&opts, c, &inode->ei_inode);
79
80         /* bios must be 512 byte aligned: */
81         if ((offset|iter->count) & (SECTOR_SIZE - 1))
82                 return -EINVAL;
83
84         ret = min_t(loff_t, iter->count,
85                     max_t(loff_t, 0, i_size_read(&inode->v) - offset));
86
87         if (!ret)
88                 return ret;
89
90         shorten = iov_iter_count(iter) - round_up(ret, block_bytes(c));
91         if (shorten >= iter->count)
92                 shorten = 0;
93         iter->count -= shorten;
94
95         bio = bio_alloc_bioset(NULL,
96                                bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS),
97                                REQ_OP_READ,
98                                GFP_KERNEL,
99                                &c->dio_read_bioset);
100
101         bio->bi_end_io = bch2_direct_IO_read_endio;
102
103         dio = container_of(bio, struct dio_read, rbio.bio);
104         closure_init(&dio->cl, NULL);
105
106         /*
107          * this is a _really_ horrible hack just to avoid an atomic sub at the
108          * end:
109          */
110         if (!sync) {
111                 set_closure_fn(&dio->cl, bch2_dio_read_complete, NULL);
112                 atomic_set(&dio->cl.remaining,
113                            CLOSURE_REMAINING_INITIALIZER -
114                            CLOSURE_RUNNING +
115                            CLOSURE_DESTRUCTOR);
116         } else {
117                 atomic_set(&dio->cl.remaining,
118                            CLOSURE_REMAINING_INITIALIZER + 1);
119                 dio->cl.closure_get_happened = true;
120         }
121
122         dio->req        = req;
123         dio->ret        = ret;
124         /*
125          * This is one of the sketchier things I've encountered: we have to skip
126          * the dirtying of requests that are internal from the kernel (i.e. from
127          * loopback), because we'll deadlock on page_lock.
128          */
129         dio->should_dirty = iter_is_iovec(iter);
130
131         goto start;
132         while (iter->count) {
133                 bio = bio_alloc_bioset(NULL,
134                                        bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS),
135                                        REQ_OP_READ,
136                                        GFP_KERNEL,
137                                        &c->bio_read);
138                 bio->bi_end_io          = bch2_direct_IO_read_split_endio;
139 start:
140                 bio->bi_opf             = REQ_OP_READ|REQ_SYNC;
141                 bio->bi_iter.bi_sector  = offset >> 9;
142                 bio->bi_private         = dio;
143
144                 ret = bio_iov_iter_get_pages(bio, iter);
145                 if (ret < 0) {
146                         /* XXX: fault inject this path */
147                         bio->bi_status = BLK_STS_RESOURCE;
148                         bio_endio(bio);
149                         break;
150                 }
151
152                 offset += bio->bi_iter.bi_size;
153
154                 if (dio->should_dirty)
155                         bio_set_pages_dirty(bio);
156
157                 if (iter->count)
158                         closure_get(&dio->cl);
159
160                 bch2_read(c, rbio_init(bio, opts), inode_inum(inode));
161         }
162
163         iter->count += shorten;
164
165         if (sync) {
166                 closure_sync(&dio->cl);
167                 closure_debug_destroy(&dio->cl);
168                 ret = dio->ret;
169                 bio_check_or_release(&dio->rbio.bio, dio->should_dirty);
170                 return ret;
171         } else {
172                 return -EIOCBQUEUED;
173         }
174 }
175
176 ssize_t bch2_read_iter(struct kiocb *iocb, struct iov_iter *iter)
177 {
178         struct file *file = iocb->ki_filp;
179         struct bch_inode_info *inode = file_bch_inode(file);
180         struct address_space *mapping = file->f_mapping;
181         size_t count = iov_iter_count(iter);
182         ssize_t ret;
183
184         if (!count)
185                 return 0; /* skip atime */
186
187         if (iocb->ki_flags & IOCB_DIRECT) {
188                 struct blk_plug plug;
189
190                 if (unlikely(mapping->nrpages)) {
191                         ret = filemap_write_and_wait_range(mapping,
192                                                 iocb->ki_pos,
193                                                 iocb->ki_pos + count - 1);
194                         if (ret < 0)
195                                 goto out;
196                 }
197
198                 file_accessed(file);
199
200                 blk_start_plug(&plug);
201                 ret = bch2_direct_IO_read(iocb, iter);
202                 blk_finish_plug(&plug);
203
204                 if (ret >= 0)
205                         iocb->ki_pos += ret;
206         } else {
207                 bch2_pagecache_add_get(inode);
208                 ret = generic_file_read_iter(iocb, iter);
209                 bch2_pagecache_add_put(inode);
210         }
211 out:
212         return bch2_err_class(ret);
213 }
214
215 /* O_DIRECT writes */
216
217 struct dio_write {
218         struct kiocb                    *req;
219         struct address_space            *mapping;
220         struct bch_inode_info           *inode;
221         struct mm_struct                *mm;
222         const struct iovec              *iov;
223         unsigned                        loop:1,
224                                         extending:1,
225                                         sync:1,
226                                         flush:1;
227         struct quota_res                quota_res;
228         u64                             written;
229
230         struct iov_iter                 iter;
231         struct iovec                    inline_vecs[2];
232
233         /* must be last: */
234         struct bch_write_op             op;
235 };
236
237 static bool bch2_check_range_allocated(struct bch_fs *c, subvol_inum inum,
238                                        u64 offset, u64 size,
239                                        unsigned nr_replicas, bool compressed)
240 {
241         struct btree_trans *trans = bch2_trans_get(c);
242         struct btree_iter iter;
243         struct bkey_s_c k;
244         u64 end = offset + size;
245         u32 snapshot;
246         bool ret = true;
247         int err;
248 retry:
249         bch2_trans_begin(trans);
250
251         err = bch2_subvolume_get_snapshot(trans, inum.subvol, &snapshot);
252         if (err)
253                 goto err;
254
255         for_each_btree_key_norestart(trans, iter, BTREE_ID_extents,
256                            SPOS(inum.inum, offset, snapshot),
257                            BTREE_ITER_SLOTS, k, err) {
258                 if (bkey_ge(bkey_start_pos(k.k), POS(inum.inum, end)))
259                         break;
260
261                 if (k.k->p.snapshot != snapshot ||
262                     nr_replicas > bch2_bkey_replicas(c, k) ||
263                     (!compressed && bch2_bkey_sectors_compressed(k))) {
264                         ret = false;
265                         break;
266                 }
267         }
268
269         offset = iter.pos.offset;
270         bch2_trans_iter_exit(trans, &iter);
271 err:
272         if (bch2_err_matches(err, BCH_ERR_transaction_restart))
273                 goto retry;
274         bch2_trans_put(trans);
275
276         return err ? false : ret;
277 }
278
279 static noinline bool bch2_dio_write_check_allocated(struct dio_write *dio)
280 {
281         struct bch_fs *c = dio->op.c;
282         struct bch_inode_info *inode = dio->inode;
283         struct bio *bio = &dio->op.wbio.bio;
284
285         return bch2_check_range_allocated(c, inode_inum(inode),
286                                 dio->op.pos.offset, bio_sectors(bio),
287                                 dio->op.opts.data_replicas,
288                                 dio->op.opts.compression != 0);
289 }
290
291 static void bch2_dio_write_loop_async(struct bch_write_op *);
292 static __always_inline long bch2_dio_write_done(struct dio_write *dio);
293
294 /*
295  * We're going to return -EIOCBQUEUED, but we haven't finished consuming the
296  * iov_iter yet, so we need to stash a copy of the iovec: it might be on the
297  * caller's stack, we're not guaranteed that it will live for the duration of
298  * the IO:
299  */
300 static noinline int bch2_dio_write_copy_iov(struct dio_write *dio)
301 {
302         struct iovec *iov = dio->inline_vecs;
303
304         /*
305          * iov_iter has a single embedded iovec - nothing to do:
306          */
307         if (iter_is_ubuf(&dio->iter))
308                 return 0;
309
310         /*
311          * We don't currently handle non-iovec iov_iters here - return an error,
312          * and we'll fall back to doing the IO synchronously:
313          */
314         if (!iter_is_iovec(&dio->iter))
315                 return -1;
316
317         if (dio->iter.nr_segs > ARRAY_SIZE(dio->inline_vecs)) {
318                 dio->iov = iov = kmalloc_array(dio->iter.nr_segs, sizeof(*iov),
319                                     GFP_KERNEL);
320                 if (unlikely(!iov))
321                         return -ENOMEM;
322         }
323
324         memcpy(iov, dio->iter.__iov, dio->iter.nr_segs * sizeof(*iov));
325         dio->iter.__iov = iov;
326         return 0;
327 }
328
329 static CLOSURE_CALLBACK(bch2_dio_write_flush_done)
330 {
331         closure_type(dio, struct dio_write, op.cl);
332         struct bch_fs *c = dio->op.c;
333
334         closure_debug_destroy(cl);
335
336         dio->op.error = bch2_journal_error(&c->journal);
337
338         bch2_dio_write_done(dio);
339 }
340
341 static noinline void bch2_dio_write_flush(struct dio_write *dio)
342 {
343         struct bch_fs *c = dio->op.c;
344         struct bch_inode_unpacked inode;
345         int ret;
346
347         dio->flush = 0;
348
349         closure_init(&dio->op.cl, NULL);
350
351         if (!dio->op.error) {
352                 ret = bch2_inode_find_by_inum(c, inode_inum(dio->inode), &inode);
353                 if (ret) {
354                         dio->op.error = ret;
355                 } else {
356                         bch2_journal_flush_seq_async(&c->journal, inode.bi_journal_seq,
357                                                      &dio->op.cl);
358                         bch2_inode_flush_nocow_writes_async(c, dio->inode, &dio->op.cl);
359                 }
360         }
361
362         if (dio->sync) {
363                 closure_sync(&dio->op.cl);
364                 closure_debug_destroy(&dio->op.cl);
365         } else {
366                 continue_at(&dio->op.cl, bch2_dio_write_flush_done, NULL);
367         }
368 }
369
370 static __always_inline long bch2_dio_write_done(struct dio_write *dio)
371 {
372         struct kiocb *req = dio->req;
373         struct bch_inode_info *inode = dio->inode;
374         bool sync = dio->sync;
375         long ret;
376
377         if (unlikely(dio->flush)) {
378                 bch2_dio_write_flush(dio);
379                 if (!sync)
380                         return -EIOCBQUEUED;
381         }
382
383         bch2_pagecache_block_put(inode);
384
385         kfree(dio->iov);
386
387         ret = dio->op.error ?: ((long) dio->written << 9);
388         bio_put(&dio->op.wbio.bio);
389
390         /* inode->i_dio_count is our ref on inode and thus bch_fs */
391         inode_dio_end(&inode->v);
392
393         if (ret < 0)
394                 ret = bch2_err_class(ret);
395
396         if (!sync) {
397                 req->ki_complete(req, ret);
398                 ret = -EIOCBQUEUED;
399         }
400         return ret;
401 }
402
403 static __always_inline void bch2_dio_write_end(struct dio_write *dio)
404 {
405         struct bch_fs *c = dio->op.c;
406         struct kiocb *req = dio->req;
407         struct bch_inode_info *inode = dio->inode;
408         struct bio *bio = &dio->op.wbio.bio;
409
410         req->ki_pos     += (u64) dio->op.written << 9;
411         dio->written    += dio->op.written;
412
413         if (dio->extending) {
414                 spin_lock(&inode->v.i_lock);
415                 if (req->ki_pos > inode->v.i_size)
416                         i_size_write(&inode->v, req->ki_pos);
417                 spin_unlock(&inode->v.i_lock);
418         }
419
420         if (dio->op.i_sectors_delta || dio->quota_res.sectors) {
421                 mutex_lock(&inode->ei_quota_lock);
422                 __bch2_i_sectors_acct(c, inode, &dio->quota_res, dio->op.i_sectors_delta);
423                 __bch2_quota_reservation_put(c, inode, &dio->quota_res);
424                 mutex_unlock(&inode->ei_quota_lock);
425         }
426
427         bio_release_pages(bio, false);
428
429         if (unlikely(dio->op.error))
430                 set_bit(EI_INODE_ERROR, &inode->ei_flags);
431 }
432
433 static __always_inline long bch2_dio_write_loop(struct dio_write *dio)
434 {
435         struct bch_fs *c = dio->op.c;
436         struct kiocb *req = dio->req;
437         struct address_space *mapping = dio->mapping;
438         struct bch_inode_info *inode = dio->inode;
439         struct bch_io_opts opts;
440         struct bio *bio = &dio->op.wbio.bio;
441         unsigned unaligned, iter_count;
442         bool sync = dio->sync, dropped_locks;
443         long ret;
444
445         bch2_inode_opts_get(&opts, c, &inode->ei_inode);
446
447         while (1) {
448                 iter_count = dio->iter.count;
449
450                 EBUG_ON(current->faults_disabled_mapping);
451                 current->faults_disabled_mapping = mapping;
452
453                 ret = bio_iov_iter_get_pages(bio, &dio->iter);
454
455                 dropped_locks = fdm_dropped_locks();
456
457                 current->faults_disabled_mapping = NULL;
458
459                 /*
460                  * If the fault handler returned an error but also signalled
461                  * that it dropped & retook ei_pagecache_lock, we just need to
462                  * re-shoot down the page cache and retry:
463                  */
464                 if (dropped_locks && ret)
465                         ret = 0;
466
467                 if (unlikely(ret < 0))
468                         goto err;
469
470                 if (unlikely(dropped_locks)) {
471                         ret = bch2_write_invalidate_inode_pages_range(mapping,
472                                         req->ki_pos,
473                                         req->ki_pos + iter_count - 1);
474                         if (unlikely(ret))
475                                 goto err;
476
477                         if (!bio->bi_iter.bi_size)
478                                 continue;
479                 }
480
481                 unaligned = bio->bi_iter.bi_size & (block_bytes(c) - 1);
482                 bio->bi_iter.bi_size -= unaligned;
483                 iov_iter_revert(&dio->iter, unaligned);
484
485                 if (!bio->bi_iter.bi_size) {
486                         /*
487                          * bio_iov_iter_get_pages was only able to get <
488                          * blocksize worth of pages:
489                          */
490                         ret = -EFAULT;
491                         goto err;
492                 }
493
494                 bch2_write_op_init(&dio->op, c, opts);
495                 dio->op.end_io          = sync
496                         ? NULL
497                         : bch2_dio_write_loop_async;
498                 dio->op.target          = dio->op.opts.foreground_target;
499                 dio->op.write_point     = writepoint_hashed((unsigned long) current);
500                 dio->op.nr_replicas     = dio->op.opts.data_replicas;
501                 dio->op.subvol          = inode->ei_subvol;
502                 dio->op.pos             = POS(inode->v.i_ino, (u64) req->ki_pos >> 9);
503                 dio->op.devs_need_flush = &inode->ei_devs_need_flush;
504
505                 if (sync)
506                         dio->op.flags |= BCH_WRITE_SYNC;
507                 dio->op.flags |= BCH_WRITE_CHECK_ENOSPC;
508
509                 ret = bch2_quota_reservation_add(c, inode, &dio->quota_res,
510                                                  bio_sectors(bio), true);
511                 if (unlikely(ret))
512                         goto err;
513
514                 ret = bch2_disk_reservation_get(c, &dio->op.res, bio_sectors(bio),
515                                                 dio->op.opts.data_replicas, 0);
516                 if (unlikely(ret) &&
517                     !bch2_dio_write_check_allocated(dio))
518                         goto err;
519
520                 task_io_account_write(bio->bi_iter.bi_size);
521
522                 if (unlikely(dio->iter.count) &&
523                     !dio->sync &&
524                     !dio->loop &&
525                     bch2_dio_write_copy_iov(dio))
526                         dio->sync = sync = true;
527
528                 dio->loop = true;
529                 closure_call(&dio->op.cl, bch2_write, NULL, NULL);
530
531                 if (!sync)
532                         return -EIOCBQUEUED;
533
534                 bch2_dio_write_end(dio);
535
536                 if (likely(!dio->iter.count) || dio->op.error)
537                         break;
538
539                 bio_reset(bio, NULL, REQ_OP_WRITE);
540         }
541 out:
542         return bch2_dio_write_done(dio);
543 err:
544         dio->op.error = ret;
545
546         bio_release_pages(bio, false);
547
548         bch2_quota_reservation_put(c, inode, &dio->quota_res);
549         goto out;
550 }
551
552 static noinline __cold void bch2_dio_write_continue(struct dio_write *dio)
553 {
554         struct mm_struct *mm = dio->mm;
555
556         bio_reset(&dio->op.wbio.bio, NULL, REQ_OP_WRITE);
557
558         if (mm)
559                 kthread_use_mm(mm);
560         bch2_dio_write_loop(dio);
561         if (mm)
562                 kthread_unuse_mm(mm);
563 }
564
565 static void bch2_dio_write_loop_async(struct bch_write_op *op)
566 {
567         struct dio_write *dio = container_of(op, struct dio_write, op);
568
569         bch2_dio_write_end(dio);
570
571         if (likely(!dio->iter.count) || dio->op.error)
572                 bch2_dio_write_done(dio);
573         else
574                 bch2_dio_write_continue(dio);
575 }
576
577 ssize_t bch2_direct_write(struct kiocb *req, struct iov_iter *iter)
578 {
579         struct file *file = req->ki_filp;
580         struct address_space *mapping = file->f_mapping;
581         struct bch_inode_info *inode = file_bch_inode(file);
582         struct bch_fs *c = inode->v.i_sb->s_fs_info;
583         struct dio_write *dio;
584         struct bio *bio;
585         bool locked = true, extending;
586         ssize_t ret;
587
588         prefetch(&c->opts);
589         prefetch((void *) &c->opts + 64);
590         prefetch(&inode->ei_inode);
591         prefetch((void *) &inode->ei_inode + 64);
592
593         inode_lock(&inode->v);
594
595         ret = generic_write_checks(req, iter);
596         if (unlikely(ret <= 0))
597                 goto err;
598
599         ret = file_remove_privs(file);
600         if (unlikely(ret))
601                 goto err;
602
603         ret = file_update_time(file);
604         if (unlikely(ret))
605                 goto err;
606
607         if (unlikely((req->ki_pos|iter->count) & (block_bytes(c) - 1)))
608                 goto err;
609
610         inode_dio_begin(&inode->v);
611         bch2_pagecache_block_get(inode);
612
613         extending = req->ki_pos + iter->count > inode->v.i_size;
614         if (!extending) {
615                 inode_unlock(&inode->v);
616                 locked = false;
617         }
618
619         bio = bio_alloc_bioset(NULL,
620                                bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS),
621                                REQ_OP_WRITE,
622                                GFP_KERNEL,
623                                &c->dio_write_bioset);
624         dio = container_of(bio, struct dio_write, op.wbio.bio);
625         dio->req                = req;
626         dio->mapping            = mapping;
627         dio->inode              = inode;
628         dio->mm                 = current->mm;
629         dio->iov                = NULL;
630         dio->loop               = false;
631         dio->extending          = extending;
632         dio->sync               = is_sync_kiocb(req) || extending;
633         dio->flush              = iocb_is_dsync(req) && !c->opts.journal_flush_disabled;
634         dio->quota_res.sectors  = 0;
635         dio->written            = 0;
636         dio->iter               = *iter;
637         dio->op.c               = c;
638
639         if (unlikely(mapping->nrpages)) {
640                 ret = bch2_write_invalidate_inode_pages_range(mapping,
641                                                 req->ki_pos,
642                                                 req->ki_pos + iter->count - 1);
643                 if (unlikely(ret))
644                         goto err_put_bio;
645         }
646
647         ret = bch2_dio_write_loop(dio);
648 err:
649         if (locked)
650                 inode_unlock(&inode->v);
651         return ret;
652 err_put_bio:
653         bch2_pagecache_block_put(inode);
654         bio_put(bio);
655         inode_dio_end(&inode->v);
656         goto err;
657 }
658
659 void bch2_fs_fs_io_direct_exit(struct bch_fs *c)
660 {
661         bioset_exit(&c->dio_write_bioset);
662         bioset_exit(&c->dio_read_bioset);
663 }
664
665 int bch2_fs_fs_io_direct_init(struct bch_fs *c)
666 {
667         if (bioset_init(&c->dio_read_bioset,
668                         4, offsetof(struct dio_read, rbio.bio),
669                         BIOSET_NEED_BVECS))
670                 return -BCH_ERR_ENOMEM_dio_read_bioset_init;
671
672         if (bioset_init(&c->dio_write_bioset,
673                         4, offsetof(struct dio_write, op.wbio.bio),
674                         BIOSET_NEED_BVECS))
675                 return -BCH_ERR_ENOMEM_dio_write_bioset_init;
676
677         return 0;
678 }
679
680 #endif /* NO_BCACHEFS_FS */