summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-03-13 17:41:46 -0800
committerKent Overstreet <kent.overstreet@gmail.com>2017-03-17 19:49:25 -0800
commita1493d4e1340546ec09ccffe93582daeee1d8fe3 (patch)
treeb241ec0e25c27dd90badd79bb580fd66efd0d65f
parent6507fe680d2632ada790ae04c6a70b3241f9fb5b (diff)
bcachefs: add plugging to dio path
-rw-r--r--fs/bcachefs/bcachefs_format.h4
-rw-r--r--fs/bcachefs/fs-io.c8
-rw-r--r--fs/bcachefs/io.c3
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);