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 ...
This commit is contained in:
@@ -127,12 +127,13 @@ static void trace_note_tsk(struct task_struct *tsk)
|
||||
|
||||
static void trace_note_time(struct blk_trace *bt)
|
||||
{
|
||||
struct timespec now;
|
||||
struct timespec64 now;
|
||||
unsigned long flags;
|
||||
u32 words[2];
|
||||
|
||||
getnstimeofday(&now);
|
||||
words[0] = now.tv_sec;
|
||||
/* need to check user space to see if this breaks in y2038 or y2106 */
|
||||
ktime_get_real_ts64(&now);
|
||||
words[0] = (u32)now.tv_sec;
|
||||
words[1] = now.tv_nsec;
|
||||
|
||||
local_irq_save(flags);
|
||||
@@ -189,6 +190,7 @@ static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ),
|
||||
BLK_TC_ACT(BLK_TC_WRITE) };
|
||||
|
||||
#define BLK_TC_RAHEAD BLK_TC_AHEAD
|
||||
#define BLK_TC_PREFLUSH BLK_TC_FLUSH
|
||||
|
||||
/* The ilog2() calls fall out because they're constant */
|
||||
#define MASK_TC_BIT(rw, __name) ((rw & REQ_ ## __name) << \
|
||||
@@ -199,7 +201,8 @@ static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ),
|
||||
* blk_io_trace structure and places it in a per-cpu subbuffer.
|
||||
*/
|
||||
static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
|
||||
int rw, u32 what, int error, int pdu_len, void *pdu_data)
|
||||
int op, int op_flags, u32 what, int error, int pdu_len,
|
||||
void *pdu_data)
|
||||
{
|
||||
struct task_struct *tsk = current;
|
||||
struct ring_buffer_event *event = NULL;
|
||||
@@ -214,13 +217,16 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
|
||||
if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer))
|
||||
return;
|
||||
|
||||
what |= ddir_act[rw & WRITE];
|
||||
what |= MASK_TC_BIT(rw, SYNC);
|
||||
what |= MASK_TC_BIT(rw, RAHEAD);
|
||||
what |= MASK_TC_BIT(rw, META);
|
||||
what |= MASK_TC_BIT(rw, DISCARD);
|
||||
what |= MASK_TC_BIT(rw, FLUSH);
|
||||
what |= MASK_TC_BIT(rw, FUA);
|
||||
what |= ddir_act[op_is_write(op) ? WRITE : READ];
|
||||
what |= MASK_TC_BIT(op_flags, SYNC);
|
||||
what |= MASK_TC_BIT(op_flags, RAHEAD);
|
||||
what |= MASK_TC_BIT(op_flags, META);
|
||||
what |= MASK_TC_BIT(op_flags, PREFLUSH);
|
||||
what |= MASK_TC_BIT(op_flags, FUA);
|
||||
if (op == REQ_OP_DISCARD)
|
||||
what |= BLK_TC_ACT(BLK_TC_DISCARD);
|
||||
if (op == REQ_OP_FLUSH)
|
||||
what |= BLK_TC_ACT(BLK_TC_FLUSH);
|
||||
|
||||
pid = tsk->pid;
|
||||
if (act_log_check(bt, what, sector, pid))
|
||||
@@ -708,11 +714,11 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
|
||||
|
||||
if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
|
||||
what |= BLK_TC_ACT(BLK_TC_PC);
|
||||
__blk_add_trace(bt, 0, nr_bytes, rq->cmd_flags,
|
||||
__blk_add_trace(bt, 0, nr_bytes, req_op(rq), rq->cmd_flags,
|
||||
what, rq->errors, rq->cmd_len, rq->cmd);
|
||||
} else {
|
||||
what |= BLK_TC_ACT(BLK_TC_FS);
|
||||
__blk_add_trace(bt, blk_rq_pos(rq), nr_bytes,
|
||||
__blk_add_trace(bt, blk_rq_pos(rq), nr_bytes, req_op(rq),
|
||||
rq->cmd_flags, what, rq->errors, 0, NULL);
|
||||
}
|
||||
}
|
||||
@@ -770,7 +776,7 @@ static void blk_add_trace_bio(struct request_queue *q, struct bio *bio,
|
||||
return;
|
||||
|
||||
__blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
|
||||
bio->bi_rw, what, error, 0, NULL);
|
||||
bio_op(bio), bio->bi_rw, what, error, 0, NULL);
|
||||
}
|
||||
|
||||
static void blk_add_trace_bio_bounce(void *ignore,
|
||||
@@ -818,7 +824,8 @@ static void blk_add_trace_getrq(void *ignore,
|
||||
struct blk_trace *bt = q->blk_trace;
|
||||
|
||||
if (bt)
|
||||
__blk_add_trace(bt, 0, 0, rw, BLK_TA_GETRQ, 0, 0, NULL);
|
||||
__blk_add_trace(bt, 0, 0, rw, 0, BLK_TA_GETRQ, 0, 0,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -833,7 +840,7 @@ static void blk_add_trace_sleeprq(void *ignore,
|
||||
struct blk_trace *bt = q->blk_trace;
|
||||
|
||||
if (bt)
|
||||
__blk_add_trace(bt, 0, 0, rw, BLK_TA_SLEEPRQ,
|
||||
__blk_add_trace(bt, 0, 0, rw, 0, BLK_TA_SLEEPRQ,
|
||||
0, 0, NULL);
|
||||
}
|
||||
}
|
||||
@@ -843,7 +850,7 @@ static void blk_add_trace_plug(void *ignore, struct request_queue *q)
|
||||
struct blk_trace *bt = q->blk_trace;
|
||||
|
||||
if (bt)
|
||||
__blk_add_trace(bt, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL);
|
||||
__blk_add_trace(bt, 0, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL);
|
||||
}
|
||||
|
||||
static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
|
||||
@@ -860,7 +867,7 @@ static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
|
||||
else
|
||||
what = BLK_TA_UNPLUG_TIMER;
|
||||
|
||||
__blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu);
|
||||
__blk_add_trace(bt, 0, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -874,8 +881,9 @@ static void blk_add_trace_split(void *ignore,
|
||||
__be64 rpdu = cpu_to_be64(pdu);
|
||||
|
||||
__blk_add_trace(bt, bio->bi_iter.bi_sector,
|
||||
bio->bi_iter.bi_size, bio->bi_rw, BLK_TA_SPLIT,
|
||||
bio->bi_error, sizeof(rpdu), &rpdu);
|
||||
bio->bi_iter.bi_size, bio_op(bio), bio->bi_rw,
|
||||
BLK_TA_SPLIT, bio->bi_error, sizeof(rpdu),
|
||||
&rpdu);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -907,7 +915,7 @@ static void blk_add_trace_bio_remap(void *ignore,
|
||||
r.sector_from = cpu_to_be64(from);
|
||||
|
||||
__blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
|
||||
bio->bi_rw, BLK_TA_REMAP, bio->bi_error,
|
||||
bio_op(bio), bio->bi_rw, BLK_TA_REMAP, bio->bi_error,
|
||||
sizeof(r), &r);
|
||||
}
|
||||
|
||||
@@ -940,7 +948,7 @@ static void blk_add_trace_rq_remap(void *ignore,
|
||||
r.sector_from = cpu_to_be64(from);
|
||||
|
||||
__blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq),
|
||||
rq_data_dir(rq), BLK_TA_REMAP, !!rq->errors,
|
||||
rq_data_dir(rq), 0, BLK_TA_REMAP, !!rq->errors,
|
||||
sizeof(r), &r);
|
||||
}
|
||||
|
||||
@@ -965,10 +973,10 @@ void blk_add_driver_data(struct request_queue *q,
|
||||
return;
|
||||
|
||||
if (rq->cmd_type == REQ_TYPE_BLOCK_PC)
|
||||
__blk_add_trace(bt, 0, blk_rq_bytes(rq), 0,
|
||||
__blk_add_trace(bt, 0, blk_rq_bytes(rq), 0, 0,
|
||||
BLK_TA_DRV_DATA, rq->errors, len, data);
|
||||
else
|
||||
__blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), 0,
|
||||
__blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), 0, 0,
|
||||
BLK_TA_DRV_DATA, rq->errors, len, data);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(blk_add_driver_data);
|
||||
@@ -1769,21 +1777,30 @@ void blk_dump_cmd(char *buf, struct request *rq)
|
||||
}
|
||||
}
|
||||
|
||||
void blk_fill_rwbs(char *rwbs, u32 rw, int bytes)
|
||||
void blk_fill_rwbs(char *rwbs, int op, u32 rw, int bytes)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (rw & REQ_FLUSH)
|
||||
if (rw & REQ_PREFLUSH)
|
||||
rwbs[i++] = 'F';
|
||||
|
||||
if (rw & WRITE)
|
||||
switch (op) {
|
||||
case REQ_OP_WRITE:
|
||||
case REQ_OP_WRITE_SAME:
|
||||
rwbs[i++] = 'W';
|
||||
else if (rw & REQ_DISCARD)
|
||||
break;
|
||||
case REQ_OP_DISCARD:
|
||||
rwbs[i++] = 'D';
|
||||
else if (bytes)
|
||||
break;
|
||||
case REQ_OP_FLUSH:
|
||||
rwbs[i++] = 'F';
|
||||
break;
|
||||
case REQ_OP_READ:
|
||||
rwbs[i++] = 'R';
|
||||
else
|
||||
break;
|
||||
default:
|
||||
rwbs[i++] = 'N';
|
||||
}
|
||||
|
||||
if (rw & REQ_FUA)
|
||||
rwbs[i++] = 'F';
|
||||
|
Reference in New Issue
Block a user