diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-03-08 17:12:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-03-08 17:12:17 -0500 |
commit | 80201fe175cbf7f3e372f53eba0a881a702ad926 (patch) | |
tree | 8026c68d52763614268a9c3c80759ad386bd5967 /fs/gfs2 | |
parent | 4221b807d1f73c03d22543416d303b60a5d1ef31 (diff) | |
parent | aaeee62c841cc1e48231e1d60c304d2da9c4e41c (diff) |
Merge tag 'for-5.1/block-20190302' of git://git.kernel.dk/linux-block
Pull block layer updates from Jens Axboe:
"Not a huge amount of changes in this round, the biggest one is that we
finally have Mings multi-page bvec support merged. Apart from that,
this pull request contains:
- Small series that avoids quiescing the queue for sysfs changes that
match what we currently have (Aleksei)
- Series of bcache fixes (via Coly)
- Series of lightnvm fixes (via Mathias)
- NVMe pull request from Christoph. Nothing major, just SPDX/license
cleanups, RR mp policy (Hannes), and little fixes (Bart,
Chaitanya).
- BFQ series (Paolo)
- Save blk-mq cpu -> hw queue mapping, removing a pointer indirection
for the fast path (Jianchao)
- fops->iopoll() added for async IO polling, this is a feature that
the upcoming io_uring interface will use (Christoph, me)
- Partition scan loop fixes (Dongli)
- mtip32xx conversion from managed resource API (Christoph)
- cdrom registration race fix (Guenter)
- MD pull from Song, two minor fixes.
- Various documentation fixes (Marcos)
- Multi-page bvec feature. This brings a lot of nice improvements
with it, like more efficient splitting, larger IOs can be supported
without growing the bvec table size, and so on. (Ming)
- Various little fixes to core and drivers"
* tag 'for-5.1/block-20190302' of git://git.kernel.dk/linux-block: (117 commits)
block: fix updating bio's front segment size
block: Replace function name in string with __func__
nbd: propagate genlmsg_reply return code
floppy: remove set but not used variable 'q'
null_blk: fix checking for REQ_FUA
block: fix NULL pointer dereference in register_disk
fs: fix guard_bio_eod to check for real EOD errors
blk-mq: use HCTX_TYPE_DEFAULT but not 0 to index blk_mq_tag_set->map
block: optimize bvec iteration in bvec_iter_advance
block: introduce mp_bvec_for_each_page() for iterating over page
block: optimize blk_bio_segment_split for single-page bvec
block: optimize __blk_segment_map_sg() for single-page bvec
block: introduce bvec_nth_page()
iomap: wire up the iopoll method
block: add bio_set_polled() helper
block: wire up block device iopoll method
fs: add an iopoll method to struct file_operations
loop: set GENHD_FL_NO_PART_SCAN after blkdev_reread_part()
loop: do not print warn message if partition scan is successful
block: bounce: make sure that bvec table is updated
...
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/file.c | 2 | ||||
-rw-r--r-- | fs/gfs2/lops.c | 6 | ||||
-rw-r--r-- | fs/gfs2/meta_io.c | 3 |
3 files changed, 8 insertions, 3 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index a2dea5bc0427..58a768e59712 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c | |||
@@ -1280,6 +1280,7 @@ const struct file_operations gfs2_file_fops = { | |||
1280 | .llseek = gfs2_llseek, | 1280 | .llseek = gfs2_llseek, |
1281 | .read_iter = gfs2_file_read_iter, | 1281 | .read_iter = gfs2_file_read_iter, |
1282 | .write_iter = gfs2_file_write_iter, | 1282 | .write_iter = gfs2_file_write_iter, |
1283 | .iopoll = iomap_dio_iopoll, | ||
1283 | .unlocked_ioctl = gfs2_ioctl, | 1284 | .unlocked_ioctl = gfs2_ioctl, |
1284 | .mmap = gfs2_mmap, | 1285 | .mmap = gfs2_mmap, |
1285 | .open = gfs2_open, | 1286 | .open = gfs2_open, |
@@ -1310,6 +1311,7 @@ const struct file_operations gfs2_file_fops_nolock = { | |||
1310 | .llseek = gfs2_llseek, | 1311 | .llseek = gfs2_llseek, |
1311 | .read_iter = gfs2_file_read_iter, | 1312 | .read_iter = gfs2_file_read_iter, |
1312 | .write_iter = gfs2_file_write_iter, | 1313 | .write_iter = gfs2_file_write_iter, |
1314 | .iopoll = iomap_dio_iopoll, | ||
1313 | .unlocked_ioctl = gfs2_ioctl, | 1315 | .unlocked_ioctl = gfs2_ioctl, |
1314 | .mmap = gfs2_mmap, | 1316 | .mmap = gfs2_mmap, |
1315 | .open = gfs2_open, | 1317 | .open = gfs2_open, |
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c index 2295042bc625..8722c60b11fe 100644 --- a/fs/gfs2/lops.c +++ b/fs/gfs2/lops.c | |||
@@ -168,7 +168,8 @@ u64 gfs2_log_bmap(struct gfs2_sbd *sdp) | |||
168 | * that is pinned in the pagecache. | 168 | * that is pinned in the pagecache. |
169 | */ | 169 | */ |
170 | 170 | ||
171 | static void gfs2_end_log_write_bh(struct gfs2_sbd *sdp, struct bio_vec *bvec, | 171 | static void gfs2_end_log_write_bh(struct gfs2_sbd *sdp, |
172 | struct bio_vec *bvec, | ||
172 | blk_status_t error) | 173 | blk_status_t error) |
173 | { | 174 | { |
174 | struct buffer_head *bh, *next; | 175 | struct buffer_head *bh, *next; |
@@ -207,6 +208,7 @@ static void gfs2_end_log_write(struct bio *bio) | |||
207 | struct bio_vec *bvec; | 208 | struct bio_vec *bvec; |
208 | struct page *page; | 209 | struct page *page; |
209 | int i; | 210 | int i; |
211 | struct bvec_iter_all iter_all; | ||
210 | 212 | ||
211 | if (bio->bi_status) { | 213 | if (bio->bi_status) { |
212 | fs_err(sdp, "Error %d writing to journal, jid=%u\n", | 214 | fs_err(sdp, "Error %d writing to journal, jid=%u\n", |
@@ -214,7 +216,7 @@ static void gfs2_end_log_write(struct bio *bio) | |||
214 | wake_up(&sdp->sd_logd_waitq); | 216 | wake_up(&sdp->sd_logd_waitq); |
215 | } | 217 | } |
216 | 218 | ||
217 | bio_for_each_segment_all(bvec, bio, i) { | 219 | bio_for_each_segment_all(bvec, bio, i, iter_all) { |
218 | page = bvec->bv_page; | 220 | page = bvec->bv_page; |
219 | if (page_has_buffers(page)) | 221 | if (page_has_buffers(page)) |
220 | gfs2_end_log_write_bh(sdp, bvec, bio->bi_status); | 222 | gfs2_end_log_write_bh(sdp, bvec, bio->bi_status); |
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c index be9c0bf697fe..3201342404a7 100644 --- a/fs/gfs2/meta_io.c +++ b/fs/gfs2/meta_io.c | |||
@@ -190,8 +190,9 @@ static void gfs2_meta_read_endio(struct bio *bio) | |||
190 | { | 190 | { |
191 | struct bio_vec *bvec; | 191 | struct bio_vec *bvec; |
192 | int i; | 192 | int i; |
193 | struct bvec_iter_all iter_all; | ||
193 | 194 | ||
194 | bio_for_each_segment_all(bvec, bio, i) { | 195 | bio_for_each_segment_all(bvec, bio, i, iter_all) { |
195 | struct page *page = bvec->bv_page; | 196 | struct page *page = bvec->bv_page; |
196 | struct buffer_head *bh = page_buffers(page); | 197 | struct buffer_head *bh = page_buffers(page); |
197 | unsigned int len = bvec->bv_len; | 198 | unsigned int len = bvec->bv_len; |