Merge branch 'for-4.4/core' of git://git.kernel.dk/linux-block
Pull core block updates from Jens Axboe: "This is the core block pull request for 4.4. I've got a few more topic branches this time around, some of them will layer on top of the core+drivers changes and will come in a separate round. So not a huge chunk of changes in this round. This pull request contains: - Enable blk-mq page allocation tracking with kmemleak, from Catalin. - Unused prototype removal in blk-mq from Christoph. - Cleanup of the q->blk_trace exchange, using cmpxchg instead of two xchg()'s, from Davidlohr. - A plug flush fix from Jeff. - Also from Jeff, a fix that means we don't have to update shared tag sets at init time unless we do a state change. This cuts down boot times on thousands of devices a lot with scsi/blk-mq. - blk-mq waitqueue barrier fix from Kosuke. - Various fixes from Ming: - Fixes for segment merging and splitting, and checks, for the old core and blk-mq. - Potential blk-mq speedup by marking ctx pending at the end of a plug insertion batch in blk-mq. - direct-io no page dirty on kernel direct reads. - A WRITE_SYNC fix for mpage from Roman" * 'for-4.4/core' of git://git.kernel.dk/linux-block: blk-mq: avoid excessive boot delays with large lun counts blktrace: re-write setting q->blk_trace blk-mq: mark ctx as pending at batch in flush plug path blk-mq: fix for trace_block_plug() block: check bio_mergeable() early before merging blk-mq: check bio_mergeable() early before merging block: avoid to merge splitted bio block: setup bi_phys_segments after splitting block: fix plug list flushing for nomerge queues blk-mq: remove unused blk_mq_clone_flush_request prototype blk-mq: fix waitqueue_active without memory barrier in block/blk-mq-tag.c fs: direct-io: don't dirtying pages for ITER_BVEC/ITER_KVEC direct read fs/mpage.c: forgotten WRITE_SYNC in case of data integrity write block: kmemleak: Track the page allocations for struct request
This commit is contained in:
@ -437,7 +437,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
|
||||
struct block_device *bdev,
|
||||
struct blk_user_trace_setup *buts)
|
||||
{
|
||||
struct blk_trace *old_bt, *bt = NULL;
|
||||
struct blk_trace *bt = NULL;
|
||||
struct dentry *dir = NULL;
|
||||
int ret;
|
||||
|
||||
@ -519,11 +519,8 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
|
||||
bt->trace_state = Blktrace_setup;
|
||||
|
||||
ret = -EBUSY;
|
||||
old_bt = xchg(&q->blk_trace, bt);
|
||||
if (old_bt) {
|
||||
(void) xchg(&q->blk_trace, old_bt);
|
||||
if (cmpxchg(&q->blk_trace, NULL, bt))
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (atomic_inc_return(&blk_probes_ref) == 1)
|
||||
blk_register_tracepoints();
|
||||
@ -1481,7 +1478,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
|
||||
static int blk_trace_setup_queue(struct request_queue *q,
|
||||
struct block_device *bdev)
|
||||
{
|
||||
struct blk_trace *old_bt, *bt = NULL;
|
||||
struct blk_trace *bt = NULL;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
bt = kzalloc(sizeof(*bt), GFP_KERNEL);
|
||||
@ -1497,12 +1494,9 @@ static int blk_trace_setup_queue(struct request_queue *q,
|
||||
|
||||
blk_trace_setup_lba(bt, bdev);
|
||||
|
||||
old_bt = xchg(&q->blk_trace, bt);
|
||||
if (old_bt != NULL) {
|
||||
(void)xchg(&q->blk_trace, old_bt);
|
||||
ret = -EBUSY;
|
||||
ret = -EBUSY;
|
||||
if (cmpxchg(&q->blk_trace, NULL, bt))
|
||||
goto free_bt;
|
||||
}
|
||||
|
||||
if (atomic_inc_return(&blk_probes_ref) == 1)
|
||||
blk_register_tracepoints();
|
||||
|
Reference in New Issue
Block a user