block: unify flags for struct bio and struct request
Remove the current bio flags and reuse the request flags for the bio, too. This allows to more easily trace the type of I/O from the filesystem down to the block driver. There were two flags in the bio that were missing in the requests: BIO_RW_UNPLUG and BIO_RW_AHEAD. Also I've renamed two request flags that had a superflous RW in them. Note that the flags are in bio.h despite having the REQ_ name - as blkdev.h includes bio.h that is the only way to go for now. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
This commit is contained in:
committed by
Jens Axboe
parent
33659ebbae
commit
7b6d91daee
@@ -169,9 +169,12 @@ static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector,
|
||||
static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ),
|
||||
BLK_TC_ACT(BLK_TC_WRITE) };
|
||||
|
||||
#define BLK_TC_HARDBARRIER BLK_TC_BARRIER
|
||||
#define BLK_TC_RAHEAD BLK_TC_AHEAD
|
||||
|
||||
/* The ilog2() calls fall out because they're constant */
|
||||
#define MASK_TC_BIT(rw, __name) ((rw & (1 << BIO_RW_ ## __name)) << \
|
||||
(ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - BIO_RW_ ## __name))
|
||||
#define MASK_TC_BIT(rw, __name) ((rw & REQ_ ## __name) << \
|
||||
(ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - __REQ_ ## __name))
|
||||
|
||||
/*
|
||||
* The worker for the various blk_add_trace*() types. Fills out a
|
||||
@@ -194,9 +197,9 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
|
||||
return;
|
||||
|
||||
what |= ddir_act[rw & WRITE];
|
||||
what |= MASK_TC_BIT(rw, BARRIER);
|
||||
what |= MASK_TC_BIT(rw, SYNCIO);
|
||||
what |= MASK_TC_BIT(rw, AHEAD);
|
||||
what |= MASK_TC_BIT(rw, HARDBARRIER);
|
||||
what |= MASK_TC_BIT(rw, SYNC);
|
||||
what |= MASK_TC_BIT(rw, RAHEAD);
|
||||
what |= MASK_TC_BIT(rw, META);
|
||||
what |= MASK_TC_BIT(rw, DISCARD);
|
||||
|
||||
@@ -662,7 +665,7 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
|
||||
return;
|
||||
|
||||
if (rq->cmd_flags & REQ_DISCARD)
|
||||
rw |= (1 << BIO_RW_DISCARD);
|
||||
rw |= REQ_DISCARD;
|
||||
|
||||
if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
|
||||
what |= BLK_TC_ACT(BLK_TC_PC);
|
||||
@@ -1755,20 +1758,20 @@ void blk_fill_rwbs(char *rwbs, u32 rw, int bytes)
|
||||
|
||||
if (rw & WRITE)
|
||||
rwbs[i++] = 'W';
|
||||
else if (rw & 1 << BIO_RW_DISCARD)
|
||||
else if (rw & REQ_DISCARD)
|
||||
rwbs[i++] = 'D';
|
||||
else if (bytes)
|
||||
rwbs[i++] = 'R';
|
||||
else
|
||||
rwbs[i++] = 'N';
|
||||
|
||||
if (rw & 1 << BIO_RW_AHEAD)
|
||||
if (rw & REQ_RAHEAD)
|
||||
rwbs[i++] = 'A';
|
||||
if (rw & 1 << BIO_RW_BARRIER)
|
||||
if (rw & REQ_HARDBARRIER)
|
||||
rwbs[i++] = 'B';
|
||||
if (rw & 1 << BIO_RW_SYNCIO)
|
||||
if (rw & REQ_SYNC)
|
||||
rwbs[i++] = 'S';
|
||||
if (rw & 1 << BIO_RW_META)
|
||||
if (rw & REQ_META)
|
||||
rwbs[i++] = 'M';
|
||||
|
||||
rwbs[i] = '\0';
|
||||
@@ -1780,7 +1783,7 @@ void blk_fill_rwbs_rq(char *rwbs, struct request *rq)
|
||||
int bytes;
|
||||
|
||||
if (rq->cmd_flags & REQ_DISCARD)
|
||||
rw |= (1 << BIO_RW_DISCARD);
|
||||
rw |= REQ_DISCARD;
|
||||
|
||||
bytes = blk_rq_bytes(rq);
|
||||
|
||||
|
Reference in New Issue
Block a user