提交 93dbb393 编写于 作者: J Jens Axboe

block: fix bad definition of BIO_RW_SYNC

We can't OR shift values, so get rid of BIO_RW_SYNC and use BIO_RW_SYNCIO
and BIO_RW_UNPLUG explicitly. This brings back the behaviour from before
213d9417.
Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
上级 c1c20120
...@@ -142,7 +142,7 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, ...@@ -142,7 +142,7 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
what |= ddir_act[rw & WRITE]; what |= ddir_act[rw & WRITE];
what |= MASK_TC_BIT(rw, BARRIER); what |= MASK_TC_BIT(rw, BARRIER);
what |= MASK_TC_BIT(rw, SYNC); what |= MASK_TC_BIT(rw, SYNCIO);
what |= MASK_TC_BIT(rw, AHEAD); what |= MASK_TC_BIT(rw, AHEAD);
what |= MASK_TC_BIT(rw, META); what |= MASK_TC_BIT(rw, META);
what |= MASK_TC_BIT(rw, DISCARD); what |= MASK_TC_BIT(rw, DISCARD);
......
...@@ -328,7 +328,7 @@ static void dispatch_io(int rw, unsigned int num_regions, ...@@ -328,7 +328,7 @@ static void dispatch_io(int rw, unsigned int num_regions,
struct dpages old_pages = *dp; struct dpages old_pages = *dp;
if (sync) if (sync)
rw |= (1 << BIO_RW_SYNC); rw |= (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG);
/* /*
* For multiple regions we need to be careful to rewind * For multiple regions we need to be careful to rewind
......
...@@ -344,7 +344,7 @@ static int run_io_job(struct kcopyd_job *job) ...@@ -344,7 +344,7 @@ static int run_io_job(struct kcopyd_job *job)
{ {
int r; int r;
struct dm_io_request io_req = { struct dm_io_request io_req = {
.bi_rw = job->rw | (1 << BIO_RW_SYNC), .bi_rw = job->rw | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG),
.mem.type = DM_IO_PAGE_LIST, .mem.type = DM_IO_PAGE_LIST,
.mem.ptr.pl = job->pages, .mem.ptr.pl = job->pages,
.mem.offset = job->offset, .mem.offset = job->offset,
......
...@@ -474,7 +474,7 @@ void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev, ...@@ -474,7 +474,7 @@ void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev,
* causes ENOTSUPP, we allocate a spare bio... * causes ENOTSUPP, we allocate a spare bio...
*/ */
struct bio *bio = bio_alloc(GFP_NOIO, 1); struct bio *bio = bio_alloc(GFP_NOIO, 1);
int rw = (1<<BIO_RW) | (1<<BIO_RW_SYNC); int rw = (1<<BIO_RW) | (1<<BIO_RW_SYNCIO) | (1<<BIO_RW_UNPLUG);
bio->bi_bdev = rdev->bdev; bio->bi_bdev = rdev->bdev;
bio->bi_sector = sector; bio->bi_sector = sector;
...@@ -531,7 +531,7 @@ int sync_page_io(struct block_device *bdev, sector_t sector, int size, ...@@ -531,7 +531,7 @@ int sync_page_io(struct block_device *bdev, sector_t sector, int size,
struct completion event; struct completion event;
int ret; int ret;
rw |= (1 << BIO_RW_SYNC); rw |= (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG);
bio->bi_bdev = bdev; bio->bi_bdev = bdev;
bio->bi_sector = sector; bio->bi_sector = sector;
......
...@@ -171,8 +171,6 @@ struct bio { ...@@ -171,8 +171,6 @@ struct bio {
#define BIO_RW_FAILFAST_TRANSPORT 8 #define BIO_RW_FAILFAST_TRANSPORT 8
#define BIO_RW_FAILFAST_DRIVER 9 #define BIO_RW_FAILFAST_DRIVER 9
#define BIO_RW_SYNC (BIO_RW_SYNCIO | BIO_RW_UNPLUG)
#define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag)))
/* /*
......
...@@ -15,6 +15,7 @@ enum blktrace_cat { ...@@ -15,6 +15,7 @@ enum blktrace_cat {
BLK_TC_WRITE = 1 << 1, /* writes */ BLK_TC_WRITE = 1 << 1, /* writes */
BLK_TC_BARRIER = 1 << 2, /* barrier */ BLK_TC_BARRIER = 1 << 2, /* barrier */
BLK_TC_SYNC = 1 << 3, /* sync IO */ BLK_TC_SYNC = 1 << 3, /* sync IO */
BLK_TC_SYNCIO = BLK_TC_SYNC,
BLK_TC_QUEUE = 1 << 4, /* queueing/merging */ BLK_TC_QUEUE = 1 << 4, /* queueing/merging */
BLK_TC_REQUEUE = 1 << 5, /* requeueing */ BLK_TC_REQUEUE = 1 << 5, /* requeueing */
BLK_TC_ISSUE = 1 << 6, /* issue */ BLK_TC_ISSUE = 1 << 6, /* issue */
......
...@@ -87,10 +87,10 @@ struct inodes_stat_t { ...@@ -87,10 +87,10 @@ struct inodes_stat_t {
#define WRITE 1 #define WRITE 1
#define READA 2 /* read-ahead - don't block if no resources */ #define READA 2 /* read-ahead - don't block if no resources */
#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ #define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
#define READ_SYNC (READ | (1 << BIO_RW_SYNC)) #define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
#define READ_META (READ | (1 << BIO_RW_META)) #define READ_META (READ | (1 << BIO_RW_META))
#define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNC)) #define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
#define SWRITE_SYNC (SWRITE | (1 << BIO_RW_SYNC)) #define SWRITE_SYNC (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) #define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER))
#define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD)
#define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER))
......
...@@ -60,6 +60,7 @@ static struct block_device *resume_bdev; ...@@ -60,6 +60,7 @@ static struct block_device *resume_bdev;
static int submit(int rw, pgoff_t page_off, struct page *page, static int submit(int rw, pgoff_t page_off, struct page *page,
struct bio **bio_chain) struct bio **bio_chain)
{ {
const int bio_rw = rw | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG);
struct bio *bio; struct bio *bio;
bio = bio_alloc(__GFP_WAIT | __GFP_HIGH, 1); bio = bio_alloc(__GFP_WAIT | __GFP_HIGH, 1);
...@@ -80,7 +81,7 @@ static int submit(int rw, pgoff_t page_off, struct page *page, ...@@ -80,7 +81,7 @@ static int submit(int rw, pgoff_t page_off, struct page *page,
bio_get(bio); bio_get(bio);
if (bio_chain == NULL) { if (bio_chain == NULL) {
submit_bio(rw | (1 << BIO_RW_SYNC), bio); submit_bio(bio_rw, bio);
wait_on_page_locked(page); wait_on_page_locked(page);
if (rw == READ) if (rw == READ)
bio_set_pages_dirty(bio); bio_set_pages_dirty(bio);
...@@ -90,7 +91,7 @@ static int submit(int rw, pgoff_t page_off, struct page *page, ...@@ -90,7 +91,7 @@ static int submit(int rw, pgoff_t page_off, struct page *page,
get_page(page); /* These pages are freed later */ get_page(page); /* These pages are freed later */
bio->bi_private = *bio_chain; bio->bi_private = *bio_chain;
*bio_chain = bio; *bio_chain = bio;
submit_bio(rw | (1 << BIO_RW_SYNC), bio); submit_bio(bio_rw, bio);
} }
return 0; return 0;
} }
......
...@@ -111,7 +111,7 @@ int swap_writepage(struct page *page, struct writeback_control *wbc) ...@@ -111,7 +111,7 @@ int swap_writepage(struct page *page, struct writeback_control *wbc)
goto out; goto out;
} }
if (wbc->sync_mode == WB_SYNC_ALL) if (wbc->sync_mode == WB_SYNC_ALL)
rw |= (1 << BIO_RW_SYNC); rw |= (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG);
count_vm_event(PSWPOUT); count_vm_event(PSWPOUT);
set_page_writeback(page); set_page_writeback(page);
unlock_page(page); unlock_page(page);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册