diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-26 18:03:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-26 18:03:07 -0400 |
commit | d05d7f40791ccbb6e543cc5dd6a6aa08fc71d635 (patch) | |
tree | dc0039fe490a41a70de10d58fe8e6136db46463a /fs/nilfs2 | |
parent | 75a442efb1ca613f8d1cc71a32c2c9b0aefae4a5 (diff) | |
parent | 17007f3994cdb4643355c73f54f0adad006cf59e (diff) |
Merge branch 'for-4.8/core' of git://git.kernel.dk/linux-block
Pull core block updates from Jens Axboe:
- the big change is the cleanup from Mike Christie, cleaning up our
uses of command types and modified flags. This is what will throw
some merge conflicts
- regression fix for the above for btrfs, from Vincent
- following up to the above, better packing of struct request from
Christoph
- a 2038 fix for blktrace from Arnd
- a few trivial/spelling fixes from Bart Van Assche
- a front merge check fix from Damien, which could cause issues on
SMR drives
- Atari partition fix from Gabriel
- convert cfq to highres timers, since jiffies isn't granular enough
for some devices these days. From Jan and Jeff
- CFQ priority boost fix idle classes, from me
- cleanup series from Ming, improving our bio/bvec iteration
- a direct issue fix for blk-mq from Omar
- fix for plug merging not involving the IO scheduler, like we do for
other types of merges. From Tahsin
- expose DAX type internally and through sysfs. From Toshi and Yigal
* 'for-4.8/core' of git://git.kernel.dk/linux-block: (76 commits)
block: Fix front merge check
block: do not merge requests without consulting with io scheduler
block: Fix spelling in a source code comment
block: expose QUEUE_FLAG_DAX in sysfs
block: add QUEUE_FLAG_DAX for devices to advertise their DAX support
Btrfs: fix comparison in __btrfs_map_block()
block: atari: Return early for unsupported sector size
Doc: block: Fix a typo in queue-sysfs.txt
cfq-iosched: Charge at least 1 jiffie instead of 1 ns
cfq-iosched: Fix regression in bonnie++ rewrite performance
cfq-iosched: Convert slice_resid from u64 to s64
block: Convert fifo_time from ulong to u64
blktrace: avoid using timespec
block/blk-cgroup.c: Declare local symbols static
block/bio-integrity.c: Add #include "blk.h"
block/partition-generic.c: Remove a set-but-not-used variable
block: bio: kill BIO_MAX_SIZE
cfq-iosched: temporarily boost queue priority for idle classes
block: drbd: avoid to use BIO_MAX_SIZE
block: bio: remove BIO_MAX_SECTORS
...
Diffstat (limited to 'fs/nilfs2')
-rw-r--r-- | fs/nilfs2/btnode.c | 6 | ||||
-rw-r--r-- | fs/nilfs2/btnode.h | 2 | ||||
-rw-r--r-- | fs/nilfs2/btree.c | 6 | ||||
-rw-r--r-- | fs/nilfs2/gcinode.c | 5 | ||||
-rw-r--r-- | fs/nilfs2/mdt.c | 11 | ||||
-rw-r--r-- | fs/nilfs2/segbuf.c | 18 |
6 files changed, 27 insertions, 21 deletions
diff --git a/fs/nilfs2/btnode.c b/fs/nilfs2/btnode.c index 0576033699bc..4cca998ec7a0 100644 --- a/fs/nilfs2/btnode.c +++ b/fs/nilfs2/btnode.c | |||
@@ -62,7 +62,7 @@ nilfs_btnode_create_block(struct address_space *btnc, __u64 blocknr) | |||
62 | } | 62 | } |
63 | 63 | ||
64 | int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr, | 64 | int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr, |
65 | sector_t pblocknr, int mode, | 65 | sector_t pblocknr, int mode, int mode_flags, |
66 | struct buffer_head **pbh, sector_t *submit_ptr) | 66 | struct buffer_head **pbh, sector_t *submit_ptr) |
67 | { | 67 | { |
68 | struct buffer_head *bh; | 68 | struct buffer_head *bh; |
@@ -95,7 +95,7 @@ int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr, | |||
95 | } | 95 | } |
96 | } | 96 | } |
97 | 97 | ||
98 | if (mode == READA) { | 98 | if (mode_flags & REQ_RAHEAD) { |
99 | if (pblocknr != *submit_ptr + 1 || !trylock_buffer(bh)) { | 99 | if (pblocknr != *submit_ptr + 1 || !trylock_buffer(bh)) { |
100 | err = -EBUSY; /* internal code */ | 100 | err = -EBUSY; /* internal code */ |
101 | brelse(bh); | 101 | brelse(bh); |
@@ -114,7 +114,7 @@ int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr, | |||
114 | bh->b_blocknr = pblocknr; /* set block address for read */ | 114 | bh->b_blocknr = pblocknr; /* set block address for read */ |
115 | bh->b_end_io = end_buffer_read_sync; | 115 | bh->b_end_io = end_buffer_read_sync; |
116 | get_bh(bh); | 116 | get_bh(bh); |
117 | submit_bh(mode, bh); | 117 | submit_bh(mode, mode_flags, bh); |
118 | bh->b_blocknr = blocknr; /* set back to the given block address */ | 118 | bh->b_blocknr = blocknr; /* set back to the given block address */ |
119 | *submit_ptr = pblocknr; | 119 | *submit_ptr = pblocknr; |
120 | err = 0; | 120 | err = 0; |
diff --git a/fs/nilfs2/btnode.h b/fs/nilfs2/btnode.h index 2cc1b80e18f7..4e8aaa1aeb65 100644 --- a/fs/nilfs2/btnode.h +++ b/fs/nilfs2/btnode.h | |||
@@ -43,7 +43,7 @@ void nilfs_btnode_cache_clear(struct address_space *); | |||
43 | struct buffer_head *nilfs_btnode_create_block(struct address_space *btnc, | 43 | struct buffer_head *nilfs_btnode_create_block(struct address_space *btnc, |
44 | __u64 blocknr); | 44 | __u64 blocknr); |
45 | int nilfs_btnode_submit_block(struct address_space *, __u64, sector_t, int, | 45 | int nilfs_btnode_submit_block(struct address_space *, __u64, sector_t, int, |
46 | struct buffer_head **, sector_t *); | 46 | int, struct buffer_head **, sector_t *); |
47 | void nilfs_btnode_delete(struct buffer_head *); | 47 | void nilfs_btnode_delete(struct buffer_head *); |
48 | int nilfs_btnode_prepare_change_key(struct address_space *, | 48 | int nilfs_btnode_prepare_change_key(struct address_space *, |
49 | struct nilfs_btnode_chkey_ctxt *); | 49 | struct nilfs_btnode_chkey_ctxt *); |
diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c index eccb1c89ccbb..982d1e3df3a5 100644 --- a/fs/nilfs2/btree.c +++ b/fs/nilfs2/btree.c | |||
@@ -476,7 +476,8 @@ static int __nilfs_btree_get_block(const struct nilfs_bmap *btree, __u64 ptr, | |||
476 | sector_t submit_ptr = 0; | 476 | sector_t submit_ptr = 0; |
477 | int ret; | 477 | int ret; |
478 | 478 | ||
479 | ret = nilfs_btnode_submit_block(btnc, ptr, 0, READ, &bh, &submit_ptr); | 479 | ret = nilfs_btnode_submit_block(btnc, ptr, 0, REQ_OP_READ, 0, &bh, |
480 | &submit_ptr); | ||
480 | if (ret) { | 481 | if (ret) { |
481 | if (ret != -EEXIST) | 482 | if (ret != -EEXIST) |
482 | return ret; | 483 | return ret; |
@@ -492,7 +493,8 @@ static int __nilfs_btree_get_block(const struct nilfs_bmap *btree, __u64 ptr, | |||
492 | n > 0 && i < ra->ncmax; n--, i++) { | 493 | n > 0 && i < ra->ncmax; n--, i++) { |
493 | ptr2 = nilfs_btree_node_get_ptr(ra->node, i, ra->ncmax); | 494 | ptr2 = nilfs_btree_node_get_ptr(ra->node, i, ra->ncmax); |
494 | 495 | ||
495 | ret = nilfs_btnode_submit_block(btnc, ptr2, 0, READA, | 496 | ret = nilfs_btnode_submit_block(btnc, ptr2, 0, |
497 | REQ_OP_READ, REQ_RAHEAD, | ||
496 | &ra_bh, &submit_ptr); | 498 | &ra_bh, &submit_ptr); |
497 | if (likely(!ret || ret == -EEXIST)) | 499 | if (likely(!ret || ret == -EEXIST)) |
498 | brelse(ra_bh); | 500 | brelse(ra_bh); |
diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c index 693aded72498..e9148f94d696 100644 --- a/fs/nilfs2/gcinode.c +++ b/fs/nilfs2/gcinode.c | |||
@@ -101,7 +101,7 @@ int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff, | |||
101 | bh->b_blocknr = pbn; | 101 | bh->b_blocknr = pbn; |
102 | bh->b_end_io = end_buffer_read_sync; | 102 | bh->b_end_io = end_buffer_read_sync; |
103 | get_bh(bh); | 103 | get_bh(bh); |
104 | submit_bh(READ, bh); | 104 | submit_bh(REQ_OP_READ, 0, bh); |
105 | if (vbn) | 105 | if (vbn) |
106 | bh->b_blocknr = vbn; | 106 | bh->b_blocknr = vbn; |
107 | out: | 107 | out: |
@@ -138,7 +138,8 @@ int nilfs_gccache_submit_read_node(struct inode *inode, sector_t pbn, | |||
138 | int ret; | 138 | int ret; |
139 | 139 | ||
140 | ret = nilfs_btnode_submit_block(&NILFS_I(inode)->i_btnode_cache, | 140 | ret = nilfs_btnode_submit_block(&NILFS_I(inode)->i_btnode_cache, |
141 | vbn ? : pbn, pbn, READ, out_bh, &pbn); | 141 | vbn ? : pbn, pbn, REQ_OP_READ, 0, |
142 | out_bh, &pbn); | ||
142 | if (ret == -EEXIST) /* internal code (cache hit) */ | 143 | if (ret == -EEXIST) /* internal code (cache hit) */ |
143 | ret = 0; | 144 | ret = 0; |
144 | return ret; | 145 | return ret; |
diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c index 3417d859a03c..0d7b71fbeff8 100644 --- a/fs/nilfs2/mdt.c +++ b/fs/nilfs2/mdt.c | |||
@@ -121,7 +121,7 @@ static int nilfs_mdt_create_block(struct inode *inode, unsigned long block, | |||
121 | 121 | ||
122 | static int | 122 | static int |
123 | nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff, | 123 | nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff, |
124 | int mode, struct buffer_head **out_bh) | 124 | int mode, int mode_flags, struct buffer_head **out_bh) |
125 | { | 125 | { |
126 | struct buffer_head *bh; | 126 | struct buffer_head *bh; |
127 | __u64 blknum = 0; | 127 | __u64 blknum = 0; |
@@ -135,7 +135,7 @@ nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff, | |||
135 | if (buffer_uptodate(bh)) | 135 | if (buffer_uptodate(bh)) |
136 | goto out; | 136 | goto out; |
137 | 137 | ||
138 | if (mode == READA) { | 138 | if (mode_flags & REQ_RAHEAD) { |
139 | if (!trylock_buffer(bh)) { | 139 | if (!trylock_buffer(bh)) { |
140 | ret = -EBUSY; | 140 | ret = -EBUSY; |
141 | goto failed_bh; | 141 | goto failed_bh; |
@@ -157,7 +157,7 @@ nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff, | |||
157 | 157 | ||
158 | bh->b_end_io = end_buffer_read_sync; | 158 | bh->b_end_io = end_buffer_read_sync; |
159 | get_bh(bh); | 159 | get_bh(bh); |
160 | submit_bh(mode, bh); | 160 | submit_bh(mode, mode_flags, bh); |
161 | ret = 0; | 161 | ret = 0; |
162 | 162 | ||
163 | trace_nilfs2_mdt_submit_block(inode, inode->i_ino, blkoff, mode); | 163 | trace_nilfs2_mdt_submit_block(inode, inode->i_ino, blkoff, mode); |
@@ -181,7 +181,7 @@ static int nilfs_mdt_read_block(struct inode *inode, unsigned long block, | |||
181 | int i, nr_ra_blocks = NILFS_MDT_MAX_RA_BLOCKS; | 181 | int i, nr_ra_blocks = NILFS_MDT_MAX_RA_BLOCKS; |
182 | int err; | 182 | int err; |
183 | 183 | ||
184 | err = nilfs_mdt_submit_block(inode, block, READ, &first_bh); | 184 | err = nilfs_mdt_submit_block(inode, block, REQ_OP_READ, 0, &first_bh); |
185 | if (err == -EEXIST) /* internal code */ | 185 | if (err == -EEXIST) /* internal code */ |
186 | goto out; | 186 | goto out; |
187 | 187 | ||
@@ -191,7 +191,8 @@ static int nilfs_mdt_read_block(struct inode *inode, unsigned long block, | |||
191 | if (readahead) { | 191 | if (readahead) { |
192 | blkoff = block + 1; | 192 | blkoff = block + 1; |
193 | for (i = 0; i < nr_ra_blocks; i++, blkoff++) { | 193 | for (i = 0; i < nr_ra_blocks; i++, blkoff++) { |
194 | err = nilfs_mdt_submit_block(inode, blkoff, READA, &bh); | 194 | err = nilfs_mdt_submit_block(inode, blkoff, REQ_OP_READ, |
195 | REQ_RAHEAD, &bh); | ||
195 | if (likely(!err || err == -EEXIST)) | 196 | if (likely(!err || err == -EEXIST)) |
196 | brelse(bh); | 197 | brelse(bh); |
197 | else if (err != -EBUSY) | 198 | else if (err != -EBUSY) |
diff --git a/fs/nilfs2/segbuf.c b/fs/nilfs2/segbuf.c index bf36df10540b..a962d7d83447 100644 --- a/fs/nilfs2/segbuf.c +++ b/fs/nilfs2/segbuf.c | |||
@@ -346,7 +346,8 @@ static void nilfs_end_bio_write(struct bio *bio) | |||
346 | } | 346 | } |
347 | 347 | ||
348 | static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf, | 348 | static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf, |
349 | struct nilfs_write_info *wi, int mode) | 349 | struct nilfs_write_info *wi, int mode, |
350 | int mode_flags) | ||
350 | { | 351 | { |
351 | struct bio *bio = wi->bio; | 352 | struct bio *bio = wi->bio; |
352 | int err; | 353 | int err; |
@@ -364,7 +365,8 @@ static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf, | |||
364 | 365 | ||
365 | bio->bi_end_io = nilfs_end_bio_write; | 366 | bio->bi_end_io = nilfs_end_bio_write; |
366 | bio->bi_private = segbuf; | 367 | bio->bi_private = segbuf; |
367 | submit_bio(mode, bio); | 368 | bio_set_op_attrs(bio, mode, mode_flags); |
369 | submit_bio(bio); | ||
368 | segbuf->sb_nbio++; | 370 | segbuf->sb_nbio++; |
369 | 371 | ||
370 | wi->bio = NULL; | 372 | wi->bio = NULL; |
@@ -437,7 +439,7 @@ static int nilfs_segbuf_submit_bh(struct nilfs_segment_buffer *segbuf, | |||
437 | return 0; | 439 | return 0; |
438 | } | 440 | } |
439 | /* bio is FULL */ | 441 | /* bio is FULL */ |
440 | err = nilfs_segbuf_submit_bio(segbuf, wi, mode); | 442 | err = nilfs_segbuf_submit_bio(segbuf, wi, mode, 0); |
441 | /* never submit current bh */ | 443 | /* never submit current bh */ |
442 | if (likely(!err)) | 444 | if (likely(!err)) |
443 | goto repeat; | 445 | goto repeat; |
@@ -461,19 +463,19 @@ static int nilfs_segbuf_write(struct nilfs_segment_buffer *segbuf, | |||
461 | { | 463 | { |
462 | struct nilfs_write_info wi; | 464 | struct nilfs_write_info wi; |
463 | struct buffer_head *bh; | 465 | struct buffer_head *bh; |
464 | int res = 0, rw = WRITE; | 466 | int res = 0; |
465 | 467 | ||
466 | wi.nilfs = nilfs; | 468 | wi.nilfs = nilfs; |
467 | nilfs_segbuf_prepare_write(segbuf, &wi); | 469 | nilfs_segbuf_prepare_write(segbuf, &wi); |
468 | 470 | ||
469 | list_for_each_entry(bh, &segbuf->sb_segsum_buffers, b_assoc_buffers) { | 471 | list_for_each_entry(bh, &segbuf->sb_segsum_buffers, b_assoc_buffers) { |
470 | res = nilfs_segbuf_submit_bh(segbuf, &wi, bh, rw); | 472 | res = nilfs_segbuf_submit_bh(segbuf, &wi, bh, REQ_OP_WRITE); |
471 | if (unlikely(res)) | 473 | if (unlikely(res)) |
472 | goto failed_bio; | 474 | goto failed_bio; |
473 | } | 475 | } |
474 | 476 | ||
475 | list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) { | 477 | list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) { |
476 | res = nilfs_segbuf_submit_bh(segbuf, &wi, bh, rw); | 478 | res = nilfs_segbuf_submit_bh(segbuf, &wi, bh, REQ_OP_WRITE); |
477 | if (unlikely(res)) | 479 | if (unlikely(res)) |
478 | goto failed_bio; | 480 | goto failed_bio; |
479 | } | 481 | } |
@@ -483,8 +485,8 @@ static int nilfs_segbuf_write(struct nilfs_segment_buffer *segbuf, | |||
483 | * Last BIO is always sent through the following | 485 | * Last BIO is always sent through the following |
484 | * submission. | 486 | * submission. |
485 | */ | 487 | */ |
486 | rw |= REQ_SYNC; | 488 | res = nilfs_segbuf_submit_bio(segbuf, &wi, REQ_OP_WRITE, |
487 | res = nilfs_segbuf_submit_bio(segbuf, &wi, rw); | 489 | REQ_SYNC); |
488 | } | 490 | } |
489 | 491 | ||
490 | failed_bio: | 492 | failed_bio: |