Merge branch 'for-linus' of git://git.kernel.dk/linux-block
Pull block layer fixes from Jens Axboe: "A small collection of fixes that should go in before -rc1. The pull request contains: - A two patch fix for a regression with block enabled tagging caused by a commit in the initial pull request. One patch is from Martin and ensures that SCSI doesn't truncate 64-bit block flags, the other one is from me and prevents us from double using struct request queuelist for both completion and busy tags. This caused anything from a boot crash for some, to crashes under load. - A blk-mq fix for a potential soft stall when hot unplugging CPUs with busy IO. - percpu_counter fix is listed in here, that caused a suspend issue with virtio-blk due to percpu counters having an inconsistent state during CPU removal. Andrew sent this in separately a few days ago, but it's here. JFYI. - A few fixes for block integrity from Martin. - A ratelimit fix for loop from Mike Galbraith, to avoid spewing too much in error cases" * 'for-linus' of git://git.kernel.dk/linux-block: block: fix regression with block enabled tagging scsi: Make sure cmd_flags are 64-bit block: Ensure we only enable integrity metadata for reads and writes block: Fix integrity verification block: Fix for_each_bvec() drivers/block/loop.c: ratelimit error messages blk-mq: fix potential stall during CPU unplug with IO pending percpu_counter: fix bad counter state during suspend
This commit is contained in:
@@ -216,9 +216,9 @@ static inline void bvec_iter_advance(struct bio_vec *bv, struct bvec_iter *iter,
|
||||
}
|
||||
|
||||
#define for_each_bvec(bvl, bio_vec, iter, start) \
|
||||
for ((iter) = start; \
|
||||
(bvl) = bvec_iter_bvec((bio_vec), (iter)), \
|
||||
(iter).bi_size; \
|
||||
for (iter = (start); \
|
||||
(iter).bi_size && \
|
||||
((bvl = bvec_iter_bvec((bio_vec), (iter))), 1); \
|
||||
bvec_iter_advance((bio_vec), &(iter), (bvl).bv_len))
|
||||
|
||||
|
||||
|
@@ -189,6 +189,7 @@ enum rq_flag_bits {
|
||||
__REQ_KERNEL, /* direct IO to kernel pages */
|
||||
__REQ_PM, /* runtime pm request */
|
||||
__REQ_END, /* last of chain of requests */
|
||||
__REQ_HASHED, /* on IO scheduler merge hash */
|
||||
__REQ_NR_BITS, /* stops here */
|
||||
};
|
||||
|
||||
@@ -241,5 +242,6 @@ enum rq_flag_bits {
|
||||
#define REQ_KERNEL (1ULL << __REQ_KERNEL)
|
||||
#define REQ_PM (1ULL << __REQ_PM)
|
||||
#define REQ_END (1ULL << __REQ_END)
|
||||
#define REQ_HASHED (1ULL << __REQ_HASHED)
|
||||
|
||||
#endif /* __LINUX_BLK_TYPES_H */
|
||||
|
@@ -118,7 +118,18 @@ struct request {
|
||||
struct bio *bio;
|
||||
struct bio *biotail;
|
||||
|
||||
struct hlist_node hash; /* merge hash */
|
||||
/*
|
||||
* The hash is used inside the scheduler, and killed once the
|
||||
* request reaches the dispatch list. The ipi_list is only used
|
||||
* to queue the request for softirq completion, which is long
|
||||
* after the request has been unhashed (and even removed from
|
||||
* the dispatch list).
|
||||
*/
|
||||
union {
|
||||
struct hlist_node hash; /* merge hash */
|
||||
struct list_head ipi_list;
|
||||
};
|
||||
|
||||
/*
|
||||
* The rb_node is only used inside the io scheduler, requests
|
||||
* are pruned when moved to the dispatch queue. So let the
|
||||
|
Reference in New Issue
Block a user