提交 1b9a9ab7 编写于 作者: M Mike Christie 提交者: Jens Axboe

blktrace: use op accessors

Have blktrace use the req/bio op accessor to get the REQ_OP.
Signed-off-by: NMike Christie <mchristi@redhat.com>
Reviewed-by: NChristoph Hellwig <hch@lst.de>
Reviewed-by: NHannes Reinecke <hare@suse.com>
Signed-off-by: NJens Axboe <axboe@fb.com>
上级 c2df40df
...@@ -118,7 +118,7 @@ static inline int blk_cmd_buf_len(struct request *rq) ...@@ -118,7 +118,7 @@ static inline int blk_cmd_buf_len(struct request *rq)
} }
extern void blk_dump_cmd(char *buf, struct request *rq); extern void blk_dump_cmd(char *buf, struct request *rq);
extern void blk_fill_rwbs(char *rwbs, u32 rw, int bytes); extern void blk_fill_rwbs(char *rwbs, int op, u32 rw, int bytes);
#endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */ #endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */
......
...@@ -27,7 +27,8 @@ DECLARE_EVENT_CLASS(bcache_request, ...@@ -27,7 +27,8 @@ DECLARE_EVENT_CLASS(bcache_request,
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->orig_sector = bio->bi_iter.bi_sector - 16; __entry->orig_sector = bio->bi_iter.bi_sector - 16;
__entry->nr_sector = bio->bi_iter.bi_size >> 9; __entry->nr_sector = bio->bi_iter.bi_size >> 9;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
), ),
TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)", TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)",
...@@ -101,7 +102,8 @@ DECLARE_EVENT_CLASS(bcache_bio, ...@@ -101,7 +102,8 @@ DECLARE_EVENT_CLASS(bcache_bio,
__entry->dev = bio->bi_bdev->bd_dev; __entry->dev = bio->bi_bdev->bd_dev;
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->nr_sector = bio->bi_iter.bi_size >> 9; __entry->nr_sector = bio->bi_iter.bi_size >> 9;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
), ),
TP_printk("%d,%d %s %llu + %u", TP_printk("%d,%d %s %llu + %u",
...@@ -136,7 +138,8 @@ TRACE_EVENT(bcache_read, ...@@ -136,7 +138,8 @@ TRACE_EVENT(bcache_read,
__entry->dev = bio->bi_bdev->bd_dev; __entry->dev = bio->bi_bdev->bd_dev;
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->nr_sector = bio->bi_iter.bi_size >> 9; __entry->nr_sector = bio->bi_iter.bi_size >> 9;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
__entry->cache_hit = hit; __entry->cache_hit = hit;
__entry->bypass = bypass; __entry->bypass = bypass;
), ),
...@@ -167,7 +170,8 @@ TRACE_EVENT(bcache_write, ...@@ -167,7 +170,8 @@ TRACE_EVENT(bcache_write,
__entry->inode = inode; __entry->inode = inode;
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->nr_sector = bio->bi_iter.bi_size >> 9; __entry->nr_sector = bio->bi_iter.bi_size >> 9;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
__entry->writeback = writeback; __entry->writeback = writeback;
__entry->bypass = bypass; __entry->bypass = bypass;
), ),
......
...@@ -84,7 +84,8 @@ DECLARE_EVENT_CLASS(block_rq_with_error, ...@@ -84,7 +84,8 @@ DECLARE_EVENT_CLASS(block_rq_with_error,
0 : blk_rq_sectors(rq); 0 : blk_rq_sectors(rq);
__entry->errors = rq->errors; __entry->errors = rq->errors;
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq)); blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags,
blk_rq_bytes(rq));
blk_dump_cmd(__get_str(cmd), rq); blk_dump_cmd(__get_str(cmd), rq);
), ),
...@@ -162,7 +163,7 @@ TRACE_EVENT(block_rq_complete, ...@@ -162,7 +163,7 @@ TRACE_EVENT(block_rq_complete,
__entry->nr_sector = nr_bytes >> 9; __entry->nr_sector = nr_bytes >> 9;
__entry->errors = rq->errors; __entry->errors = rq->errors;
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, nr_bytes); blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags, nr_bytes);
blk_dump_cmd(__get_str(cmd), rq); blk_dump_cmd(__get_str(cmd), rq);
), ),
...@@ -198,7 +199,8 @@ DECLARE_EVENT_CLASS(block_rq, ...@@ -198,7 +199,8 @@ DECLARE_EVENT_CLASS(block_rq,
__entry->bytes = (rq->cmd_type == REQ_TYPE_BLOCK_PC) ? __entry->bytes = (rq->cmd_type == REQ_TYPE_BLOCK_PC) ?
blk_rq_bytes(rq) : 0; blk_rq_bytes(rq) : 0;
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq)); blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags,
blk_rq_bytes(rq));
blk_dump_cmd(__get_str(cmd), rq); blk_dump_cmd(__get_str(cmd), rq);
memcpy(__entry->comm, current->comm, TASK_COMM_LEN); memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
), ),
...@@ -272,7 +274,8 @@ TRACE_EVENT(block_bio_bounce, ...@@ -272,7 +274,8 @@ TRACE_EVENT(block_bio_bounce,
bio->bi_bdev->bd_dev : 0; bio->bi_bdev->bd_dev : 0;
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->nr_sector = bio_sectors(bio); __entry->nr_sector = bio_sectors(bio);
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
memcpy(__entry->comm, current->comm, TASK_COMM_LEN); memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
), ),
...@@ -310,7 +313,8 @@ TRACE_EVENT(block_bio_complete, ...@@ -310,7 +313,8 @@ TRACE_EVENT(block_bio_complete,
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->nr_sector = bio_sectors(bio); __entry->nr_sector = bio_sectors(bio);
__entry->error = error; __entry->error = error;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
), ),
TP_printk("%d,%d %s %llu + %u [%d]", TP_printk("%d,%d %s %llu + %u [%d]",
...@@ -337,7 +341,8 @@ DECLARE_EVENT_CLASS(block_bio_merge, ...@@ -337,7 +341,8 @@ DECLARE_EVENT_CLASS(block_bio_merge,
__entry->dev = bio->bi_bdev->bd_dev; __entry->dev = bio->bi_bdev->bd_dev;
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->nr_sector = bio_sectors(bio); __entry->nr_sector = bio_sectors(bio);
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
memcpy(__entry->comm, current->comm, TASK_COMM_LEN); memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
), ),
...@@ -404,7 +409,8 @@ TRACE_EVENT(block_bio_queue, ...@@ -404,7 +409,8 @@ TRACE_EVENT(block_bio_queue,
__entry->dev = bio->bi_bdev->bd_dev; __entry->dev = bio->bi_bdev->bd_dev;
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->nr_sector = bio_sectors(bio); __entry->nr_sector = bio_sectors(bio);
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
memcpy(__entry->comm, current->comm, TASK_COMM_LEN); memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
), ),
...@@ -432,7 +438,7 @@ DECLARE_EVENT_CLASS(block_get_rq, ...@@ -432,7 +438,7 @@ DECLARE_EVENT_CLASS(block_get_rq,
__entry->dev = bio ? bio->bi_bdev->bd_dev : 0; __entry->dev = bio ? bio->bi_bdev->bd_dev : 0;
__entry->sector = bio ? bio->bi_iter.bi_sector : 0; __entry->sector = bio ? bio->bi_iter.bi_sector : 0;
__entry->nr_sector = bio ? bio_sectors(bio) : 0; __entry->nr_sector = bio ? bio_sectors(bio) : 0;
blk_fill_rwbs(__entry->rwbs, blk_fill_rwbs(__entry->rwbs, bio ? bio_op(bio) : 0,
bio ? bio->bi_rw : 0, __entry->nr_sector); bio ? bio->bi_rw : 0, __entry->nr_sector);
memcpy(__entry->comm, current->comm, TASK_COMM_LEN); memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
), ),
...@@ -567,7 +573,8 @@ TRACE_EVENT(block_split, ...@@ -567,7 +573,8 @@ TRACE_EVENT(block_split,
__entry->dev = bio->bi_bdev->bd_dev; __entry->dev = bio->bi_bdev->bd_dev;
__entry->sector = bio->bi_iter.bi_sector; __entry->sector = bio->bi_iter.bi_sector;
__entry->new_sector = new_sector; __entry->new_sector = new_sector;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
memcpy(__entry->comm, current->comm, TASK_COMM_LEN); memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
), ),
...@@ -610,7 +617,8 @@ TRACE_EVENT(block_bio_remap, ...@@ -610,7 +617,8 @@ TRACE_EVENT(block_bio_remap,
__entry->nr_sector = bio_sectors(bio); __entry->nr_sector = bio_sectors(bio);
__entry->old_dev = dev; __entry->old_dev = dev;
__entry->old_sector = from; __entry->old_sector = from;
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size); blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
bio->bi_iter.bi_size);
), ),
TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu", TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu",
...@@ -656,7 +664,8 @@ TRACE_EVENT(block_rq_remap, ...@@ -656,7 +664,8 @@ TRACE_EVENT(block_rq_remap,
__entry->old_dev = dev; __entry->old_dev = dev;
__entry->old_sector = from; __entry->old_sector = from;
__entry->nr_bios = blk_rq_count_bios(rq); __entry->nr_bios = blk_rq_count_bios(rq);
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq)); blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags,
blk_rq_bytes(rq));
), ),
TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu %u", TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu %u",
......
...@@ -199,7 +199,8 @@ static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ), ...@@ -199,7 +199,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. * 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, 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 task_struct *tsk = current;
struct ring_buffer_event *event = NULL; struct ring_buffer_event *event = NULL;
...@@ -214,13 +215,14 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, ...@@ -214,13 +215,14 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer)) if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer))
return; return;
what |= ddir_act[rw & WRITE]; what |= ddir_act[op_is_write(op) ? WRITE : READ];
what |= MASK_TC_BIT(rw, SYNC); what |= MASK_TC_BIT(op_flags, SYNC);
what |= MASK_TC_BIT(rw, RAHEAD); what |= MASK_TC_BIT(op_flags, RAHEAD);
what |= MASK_TC_BIT(rw, META); what |= MASK_TC_BIT(op_flags, META);
what |= MASK_TC_BIT(rw, DISCARD); what |= MASK_TC_BIT(op_flags, FLUSH);
what |= MASK_TC_BIT(rw, FLUSH); what |= MASK_TC_BIT(op_flags, FUA);
what |= MASK_TC_BIT(rw, FUA); if (op == REQ_OP_DISCARD)
what |= BLK_TC_ACT(BLK_TC_DISCARD);
pid = tsk->pid; pid = tsk->pid;
if (act_log_check(bt, what, sector, pid)) if (act_log_check(bt, what, sector, pid))
...@@ -708,11 +710,11 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq, ...@@ -708,11 +710,11 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
if (rq->cmd_type == REQ_TYPE_BLOCK_PC) { if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
what |= BLK_TC_ACT(BLK_TC_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); what, rq->errors, rq->cmd_len, rq->cmd);
} else { } else {
what |= BLK_TC_ACT(BLK_TC_FS); 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); rq->cmd_flags, what, rq->errors, 0, NULL);
} }
} }
...@@ -770,7 +772,7 @@ static void blk_add_trace_bio(struct request_queue *q, struct bio *bio, ...@@ -770,7 +772,7 @@ static void blk_add_trace_bio(struct request_queue *q, struct bio *bio,
return; return;
__blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, __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, static void blk_add_trace_bio_bounce(void *ignore,
...@@ -818,7 +820,8 @@ static void blk_add_trace_getrq(void *ignore, ...@@ -818,7 +820,8 @@ static void blk_add_trace_getrq(void *ignore,
struct blk_trace *bt = q->blk_trace; struct blk_trace *bt = q->blk_trace;
if (bt) 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 +836,7 @@ static void blk_add_trace_sleeprq(void *ignore, ...@@ -833,7 +836,7 @@ static void blk_add_trace_sleeprq(void *ignore,
struct blk_trace *bt = q->blk_trace; struct blk_trace *bt = q->blk_trace;
if (bt) 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); 0, 0, NULL);
} }
} }
...@@ -843,7 +846,7 @@ static void blk_add_trace_plug(void *ignore, struct request_queue *q) ...@@ -843,7 +846,7 @@ static void blk_add_trace_plug(void *ignore, struct request_queue *q)
struct blk_trace *bt = q->blk_trace; struct blk_trace *bt = q->blk_trace;
if (bt) 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, static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
...@@ -860,7 +863,7 @@ static void blk_add_trace_unplug(void *ignore, struct request_queue *q, ...@@ -860,7 +863,7 @@ static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
else else
what = BLK_TA_UNPLUG_TIMER; 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 +877,9 @@ static void blk_add_trace_split(void *ignore, ...@@ -874,8 +877,9 @@ static void blk_add_trace_split(void *ignore,
__be64 rpdu = cpu_to_be64(pdu); __be64 rpdu = cpu_to_be64(pdu);
__blk_add_trace(bt, bio->bi_iter.bi_sector, __blk_add_trace(bt, bio->bi_iter.bi_sector,
bio->bi_iter.bi_size, bio->bi_rw, BLK_TA_SPLIT, bio->bi_iter.bi_size, bio_op(bio), bio->bi_rw,
bio->bi_error, sizeof(rpdu), &rpdu); BLK_TA_SPLIT, bio->bi_error, sizeof(rpdu),
&rpdu);
} }
} }
...@@ -907,7 +911,7 @@ static void blk_add_trace_bio_remap(void *ignore, ...@@ -907,7 +911,7 @@ static void blk_add_trace_bio_remap(void *ignore,
r.sector_from = cpu_to_be64(from); r.sector_from = cpu_to_be64(from);
__blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, __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); sizeof(r), &r);
} }
...@@ -940,7 +944,7 @@ static void blk_add_trace_rq_remap(void *ignore, ...@@ -940,7 +944,7 @@ static void blk_add_trace_rq_remap(void *ignore,
r.sector_from = cpu_to_be64(from); r.sector_from = cpu_to_be64(from);
__blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), __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); sizeof(r), &r);
} }
...@@ -965,10 +969,10 @@ void blk_add_driver_data(struct request_queue *q, ...@@ -965,10 +969,10 @@ void blk_add_driver_data(struct request_queue *q,
return; return;
if (rq->cmd_type == REQ_TYPE_BLOCK_PC) 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); BLK_TA_DRV_DATA, rq->errors, len, data);
else 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); BLK_TA_DRV_DATA, rq->errors, len, data);
} }
EXPORT_SYMBOL_GPL(blk_add_driver_data); EXPORT_SYMBOL_GPL(blk_add_driver_data);
...@@ -1769,21 +1773,27 @@ void blk_dump_cmd(char *buf, struct request *rq) ...@@ -1769,21 +1773,27 @@ 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; int i = 0;
if (rw & REQ_FLUSH) if (rw & REQ_FLUSH)
rwbs[i++] = 'F'; rwbs[i++] = 'F';
if (rw & WRITE) switch (op) {
case REQ_OP_WRITE:
case REQ_OP_WRITE_SAME:
rwbs[i++] = 'W'; rwbs[i++] = 'W';
else if (rw & REQ_DISCARD) break;
case REQ_OP_DISCARD:
rwbs[i++] = 'D'; rwbs[i++] = 'D';
else if (bytes) break;
case REQ_OP_READ:
rwbs[i++] = 'R'; rwbs[i++] = 'R';
else break;
default:
rwbs[i++] = 'N'; rwbs[i++] = 'N';
}
if (rw & REQ_FUA) if (rw & REQ_FUA)
rwbs[i++] = 'F'; rwbs[i++] = 'F';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册