diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-03-13 17:41:46 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-03-17 19:49:25 -0800 |
commit | a1493d4e1340546ec09ccffe93582daeee1d8fe3 (patch) | |
tree | b241ec0e25c27dd90badd79bb580fd66efd0d65f | |
parent | 6507fe680d2632ada790ae04c6a70b3241f9fb5b (diff) |
bcachefs: add plugging to dio path
-rw-r--r-- | fs/bcachefs/bcachefs_format.h | 4 | ||||
-rw-r--r-- | fs/bcachefs/fs-io.c | 8 | ||||
-rw-r--r-- | fs/bcachefs/io.c | 3 |
3 files changed, 13 insertions, 2 deletions
diff --git a/fs/bcachefs/bcachefs_format.h b/fs/bcachefs/bcachefs_format.h index f4c2f275bf78..c221747b4a4b 100644 --- a/fs/bcachefs/bcachefs_format.h +++ b/fs/bcachefs/bcachefs_format.h @@ -886,6 +886,10 @@ LE64_BITMASK(BCH_KDF_SCRYPT_N, struct bch_sb_field_crypt, kdf_flags, 0, 16); LE64_BITMASK(BCH_KDF_SCRYPT_R, struct bch_sb_field_crypt, kdf_flags, 16, 32); LE64_BITMASK(BCH_KDF_SCRYPT_P, struct bch_sb_field_crypt, kdf_flags, 32, 48); +struct bch_sb_field_replication { + struct bch_sb_field field; +}; + /* * @offset - sector where this sb was written * @version - on disk format version diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index 272ba04bf6e8..af9936f23c67 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -1613,10 +1613,16 @@ ssize_t bch_direct_IO(struct kiocb *req, struct iov_iter *iter) struct file *file = req->ki_filp; struct inode *inode = file->f_inode; struct bch_fs *c = inode->i_sb->s_fs_info; + struct blk_plug plug; + ssize_t ret; - return ((iov_iter_rw(iter) == WRITE) + blk_start_plug(&plug); + ret = ((iov_iter_rw(iter) == WRITE) ? bch_direct_IO_write : bch_direct_IO_read)(c, req, file, inode, iter, req->ki_pos); + blk_finish_plug(&plug); + + return ret; } static ssize_t diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index fbcc40427f23..206cc6c9601a 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -354,8 +354,9 @@ static void bch_write_endio(struct bio *bio) struct bch_dev *ca = wbio->ca; if (bch_dev_nonfatal_io_err_on(bio->bi_error, ca, - "data write")) + "data write")) { set_closure_fn(cl, bch_write_io_error, index_update_wq(op)); + } bch_account_io_completion_time(ca, wbio->submit_time_us, REQ_OP_WRITE); |