Skip to content

Commit cfbece0

Browse files
Jaegeuk Kimpundiramit
authored andcommitted
f2fs: resolve op and op_flags confilcts
commit 70fd76140a6cb63262bd47b68d57b42e889c10ee upstream. This patch backported ("block,fs: use REQ_* flags directly") Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
1 parent 80bd534 commit cfbece0

9 files changed

Lines changed: 98 additions & 53 deletions

File tree

fs/f2fs/checkpoint.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,15 @@ static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
6464
struct f2fs_io_info fio = {
6565
.sbi = sbi,
6666
.type = META,
67-
.rw = READ_SYNC | REQ_META | REQ_PRIO,
67+
.op = REQ_OP_READ,
68+
.op_flags = REQ_SYNC | REQ_META | REQ_PRIO,
6869
.old_blkaddr = index,
6970
.new_blkaddr = index,
7071
.encrypted_page = NULL,
7172
};
7273

7374
if (unlikely(!is_meta))
74-
fio.rw &= ~REQ_META;
75+
fio.op_flags &= ~REQ_META;
7576
repeat:
7677
page = f2fs_grab_cache_page(mapping, index, false);
7778
if (!page) {
@@ -158,13 +159,15 @@ int ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
158159
struct f2fs_io_info fio = {
159160
.sbi = sbi,
160161
.type = META,
161-
.rw = sync ? (READ_SYNC | REQ_META | REQ_PRIO) : READA,
162+
.op = REQ_OP_READ,
163+
.op_flags = sync ? (REQ_SYNC | REQ_META | REQ_PRIO) :
164+
REQ_RAHEAD,
162165
.encrypted_page = NULL,
163166
};
164167
struct blk_plug plug;
165168

166169
if (unlikely(type == META_POR))
167-
fio.rw &= ~REQ_META;
170+
fio.op_flags &= ~REQ_META;
168171

169172
blk_start_plug(&plug);
170173
for (; nrpages-- > 0; blkno++) {

fs/f2fs/data.c

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,15 @@ static struct bio *__bio_alloc(struct f2fs_sb_info *sbi, block_t blk_addr,
168168
return bio;
169169
}
170170

171-
static inline void __submit_bio(struct f2fs_sb_info *sbi, int rw,
172-
struct bio *bio, enum page_type type)
171+
static inline void __submit_bio(struct f2fs_sb_info *sbi,
172+
struct bio *bio, enum page_type type)
173173
{
174-
if (!is_read_io(rw)) {
174+
if (!is_read_io(bio_op(bio))) {
175175
if (f2fs_sb_mounted_blkzoned(sbi->sb) &&
176176
current->plug && (type == DATA || type == NODE))
177177
blk_finish_plug(current->plug);
178178
}
179-
submit_bio(rw, bio);
179+
submit_bio(0, bio);
180180
}
181181

182182
static void __submit_merged_bio(struct f2fs_bio_info *io)
@@ -186,12 +186,14 @@ static void __submit_merged_bio(struct f2fs_bio_info *io)
186186
if (!io->bio)
187187
return;
188188

189-
if (is_read_io(fio->rw))
189+
if (is_read_io(fio->op))
190190
trace_f2fs_submit_read_bio(io->sbi->sb, fio, io->bio);
191191
else
192192
trace_f2fs_submit_write_bio(io->sbi->sb, fio, io->bio);
193193

194-
__submit_bio(io->sbi, fio->rw, io->bio, fio->type);
194+
bio_set_op_attrs(io->bio, fio->op, fio->op_flags);
195+
196+
__submit_bio(io->sbi, io->bio, fio->type);
195197
io->bio = NULL;
196198
}
197199

@@ -257,10 +259,10 @@ static void __f2fs_submit_merged_bio(struct f2fs_sb_info *sbi,
257259
/* change META to META_FLUSH in the checkpoint procedure */
258260
if (type >= META_FLUSH) {
259261
io->fio.type = META_FLUSH;
260-
if (test_opt(sbi, NOBARRIER))
261-
io->fio.rw = WRITE_FLUSH | REQ_META | REQ_PRIO;
262-
else
263-
io->fio.rw = WRITE_FLUSH_FUA | REQ_META | REQ_PRIO;
262+
io->fio.op = REQ_OP_WRITE;
263+
io->fio.op_flags = WRITE_FLUSH | REQ_META | REQ_PRIO;
264+
if (!test_opt(sbi, NOBARRIER))
265+
io->fio.op_flags |= REQ_FUA;
264266
}
265267
__submit_merged_bio(io);
266268
out:
@@ -302,14 +304,15 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
302304
f2fs_trace_ios(fio, 0);
303305

304306
/* Allocate a new bio */
305-
bio = __bio_alloc(fio->sbi, fio->new_blkaddr, 1, is_read_io(fio->rw));
307+
bio = __bio_alloc(fio->sbi, fio->new_blkaddr, 1, is_read_io(fio->op));
306308

307309
if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
308310
bio_put(bio);
309311
return -EFAULT;
310312
}
313+
bio_set_op_attrs(bio, fio->op, fio->op_flags);
311314

312-
__submit_bio(fio->sbi, fio->rw, bio, fio->type);
315+
__submit_bio(fio->sbi, bio, fio->type);
313316
return 0;
314317
}
315318

@@ -318,7 +321,7 @@ void f2fs_submit_page_mbio(struct f2fs_io_info *fio)
318321
struct f2fs_sb_info *sbi = fio->sbi;
319322
enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
320323
struct f2fs_bio_info *io;
321-
bool is_read = is_read_io(fio->rw);
324+
bool is_read = is_read_io(fio->op);
322325
struct page *bio_page;
323326

324327
io = is_read ? &sbi->read_io : &sbi->write_io[btype];
@@ -335,7 +338,7 @@ void f2fs_submit_page_mbio(struct f2fs_io_info *fio)
335338
down_write(&io->io_rwsem);
336339

337340
if (io->bio && (io->last_block_in_bio != fio->new_blkaddr - 1 ||
338-
(io->fio.rw != fio->rw) ||
341+
(io->fio.op != fio->op || io->fio.op_flags != fio->op_flags) ||
339342
!__same_bdev(sbi, fio->new_blkaddr, io->bio)))
340343
__submit_merged_bio(io);
341344
alloc_new:
@@ -463,7 +466,7 @@ int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index)
463466
}
464467

465468
struct page *get_read_data_page(struct inode *inode, pgoff_t index,
466-
int rw, bool for_write)
469+
int op_flags, bool for_write)
467470
{
468471
struct address_space *mapping = inode->i_mapping;
469472
struct dnode_of_data dn;
@@ -473,7 +476,8 @@ struct page *get_read_data_page(struct inode *inode, pgoff_t index,
473476
struct f2fs_io_info fio = {
474477
.sbi = F2FS_I_SB(inode),
475478
.type = DATA,
476-
.rw = rw,
479+
.op = REQ_OP_READ,
480+
.op_flags = op_flags,
477481
.encrypted_page = NULL,
478482
};
479483

@@ -541,7 +545,7 @@ struct page *find_data_page(struct inode *inode, pgoff_t index)
541545
return page;
542546
f2fs_put_page(page, 0);
543547

544-
page = get_read_data_page(inode, index, READ_SYNC, false);
548+
page = get_read_data_page(inode, index, REQ_SYNC, false);
545549
if (IS_ERR(page))
546550
return page;
547551

@@ -567,7 +571,7 @@ struct page *get_lock_data_page(struct inode *inode, pgoff_t index,
567571
struct address_space *mapping = inode->i_mapping;
568572
struct page *page;
569573
repeat:
570-
page = get_read_data_page(inode, index, READ_SYNC, for_write);
574+
page = get_read_data_page(inode, index, REQ_SYNC, for_write);
571575
if (IS_ERR(page))
572576
return page;
573577

@@ -1145,7 +1149,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
11451149
if (bio && (last_block_in_bio != block_nr - 1 ||
11461150
!__same_bdev(F2FS_I_SB(inode), block_nr, bio))) {
11471151
submit_and_realloc:
1148-
__submit_bio(F2FS_I_SB(inode), READ, bio, DATA);
1152+
__submit_bio(F2FS_I_SB(inode), bio, DATA);
11491153
bio = NULL;
11501154
}
11511155
if (bio == NULL) {
@@ -1154,6 +1158,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
11541158
bio = NULL;
11551159
goto set_error_page;
11561160
}
1161+
bio_set_op_attrs(bio, REQ_OP_READ, 0);
11571162
}
11581163

11591164
if (bio_add_page(bio, page, blocksize, 0) < blocksize)
@@ -1168,7 +1173,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
11681173
goto next_page;
11691174
confused:
11701175
if (bio) {
1171-
__submit_bio(F2FS_I_SB(inode), READ, bio, DATA);
1176+
__submit_bio(F2FS_I_SB(inode), bio, DATA);
11721177
bio = NULL;
11731178
}
11741179
unlock_page(page);
@@ -1178,7 +1183,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
11781183
}
11791184
BUG_ON(pages && !list_empty(pages));
11801185
if (bio)
1181-
__submit_bio(F2FS_I_SB(inode), READ, bio, DATA);
1186+
__submit_bio(F2FS_I_SB(inode), bio, DATA);
11821187
return 0;
11831188
}
11841189

@@ -1296,7 +1301,8 @@ static int f2fs_write_data_page(struct page *page,
12961301
struct f2fs_io_info fio = {
12971302
.sbi = sbi,
12981303
.type = DATA,
1299-
.rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC : WRITE,
1304+
.op = REQ_OP_WRITE,
1305+
.op_flags = wbc_to_write_flags(wbc),
13001306
.page = page,
13011307
.encrypted_page = NULL,
13021308
};
@@ -1728,14 +1734,14 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
17281734
err = PTR_ERR(bio);
17291735
goto fail;
17301736
}
1731-
1737+
bio->bi_rw = READ_SYNC;
17321738
if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
17331739
bio_put(bio);
17341740
err = -EFAULT;
17351741
goto fail;
17361742
}
17371743

1738-
__submit_bio(sbi, READ_SYNC, bio, DATA);
1744+
__submit_bio(sbi, bio, DATA);
17391745

17401746
lock_page(page);
17411747
if (unlikely(page->mapping != mapping)) {

fs/f2fs/f2fs.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <linux/blkdev.h>
2525
#include <linux/fscrypto.h>
2626
#include <crypto/hash.h>
27+
#include <linux/writeback.h>
2728

2829
#ifdef CONFIG_F2FS_CHECK_FS
2930
#define f2fs_bug_on(sbi, condition) BUG_ON(condition)
@@ -112,6 +113,24 @@ struct f2fs_mount_info {
112113
#define F2FS_CLEAR_FEATURE(sb, mask) \
113114
F2FS_SB(sb)->raw_super->feature &= ~cpu_to_le32(mask)
114115

116+
/* bio stuffs */
117+
#define REQ_OP_READ READ
118+
#define REQ_OP_WRITE WRITE
119+
#define bio_op(bio) ((bio)->bi_rw & 1)
120+
121+
static inline void bio_set_op_attrs(struct bio *bio, unsigned op,
122+
unsigned op_flags)
123+
{
124+
bio->bi_rw = op | op_flags;
125+
}
126+
127+
static inline int wbc_to_write_flags(struct writeback_control *wbc)
128+
{
129+
if (wbc->sync_mode == WB_SYNC_ALL)
130+
return REQ_SYNC;
131+
return 0;
132+
}
133+
115134
/**
116135
* wq_has_sleeper - check if there are any waiting processes
117136
* @wq: wait queue head
@@ -746,14 +765,15 @@ enum page_type {
746765
struct f2fs_io_info {
747766
struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */
748767
enum page_type type; /* contains DATA/NODE/META/META_FLUSH */
749-
int rw; /* contains R/RS/W/WS with REQ_META/REQ_PRIO */
768+
int op; /* contains REQ_OP_ */
769+
int op_flags; /* req_flag_bits */
750770
block_t new_blkaddr; /* new block address to be written */
751771
block_t old_blkaddr; /* old block address before Cow */
752772
struct page *page; /* page to be written */
753773
struct page *encrypted_page; /* encrypted page */
754774
};
755775

756-
#define is_read_io(rw) (((rw) & 1) == READ)
776+
#define is_read_io(rw) (rw == READ)
757777
struct f2fs_bio_info {
758778
struct f2fs_sb_info *sbi; /* f2fs superblock */
759779
struct bio *bio; /* bios to merge */

fs/f2fs/gc.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,8 @@ static void move_encrypted_block(struct inode *inode, block_t bidx,
550550
struct f2fs_io_info fio = {
551551
.sbi = F2FS_I_SB(inode),
552552
.type = DATA,
553-
.rw = READ_SYNC,
553+
.op = REQ_OP_READ,
554+
.op_flags = REQ_SYNC,
554555
.encrypted_page = NULL,
555556
};
556557
struct dnode_of_data dn;
@@ -627,7 +628,8 @@ static void move_encrypted_block(struct inode *inode, block_t bidx,
627628
/* allocate block address */
628629
f2fs_wait_on_page_writeback(dn.node_page, NODE, true);
629630

630-
fio.rw = WRITE_SYNC;
631+
fio.op = REQ_OP_WRITE;
632+
fio.op_flags = REQ_SYNC | REQ_NOIDLE;
631633
fio.new_blkaddr = newaddr;
632634
f2fs_submit_page_mbio(&fio);
633635

@@ -668,7 +670,8 @@ static void move_data_page(struct inode *inode, block_t bidx, int gc_type,
668670
struct f2fs_io_info fio = {
669671
.sbi = F2FS_I_SB(inode),
670672
.type = DATA,
671-
.rw = WRITE_SYNC,
673+
.op = REQ_OP_WRITE,
674+
.op_flags = REQ_SYNC | REQ_NOIDLE,
672675
.page = page,
673676
.encrypted_page = NULL,
674677
};
@@ -767,7 +770,8 @@ static void gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
767770

768771
start_bidx = start_bidx_of_node(nofs, inode);
769772
data_page = get_read_data_page(inode,
770-
start_bidx + ofs_in_node, READA, true);
773+
start_bidx + ofs_in_node, REQ_RAHEAD,
774+
true);
771775
if (IS_ERR(data_page)) {
772776
iput(inode);
773777
continue;

fs/f2fs/inline.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
128128
struct f2fs_io_info fio = {
129129
.sbi = F2FS_I_SB(dn->inode),
130130
.type = DATA,
131-
.rw = WRITE_SYNC | REQ_PRIO,
131+
.op = REQ_OP_WRITE,
132+
.op_flags = REQ_SYNC | REQ_NOIDLE | REQ_PRIO,
132133
.page = page,
133134
.encrypted_page = NULL,
134135
};

fs/f2fs/node.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,14 +1068,15 @@ struct page *new_node_page(struct dnode_of_data *dn,
10681068
* 0: f2fs_put_page(page, 0)
10691069
* LOCKED_PAGE or error: f2fs_put_page(page, 1)
10701070
*/
1071-
static int read_node_page(struct page *page, int rw)
1071+
static int read_node_page(struct page *page, int op_flags)
10721072
{
10731073
struct f2fs_sb_info *sbi = F2FS_P_SB(page);
10741074
struct node_info ni;
10751075
struct f2fs_io_info fio = {
10761076
.sbi = sbi,
10771077
.type = NODE,
1078-
.rw = rw,
1078+
.op = REQ_OP_READ,
1079+
.op_flags = op_flags,
10791080
.page = page,
10801081
.encrypted_page = NULL,
10811082
};
@@ -1116,7 +1117,7 @@ void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
11161117
if (!apage)
11171118
return;
11181119

1119-
err = read_node_page(apage, READA);
1120+
err = read_node_page(apage, REQ_RAHEAD);
11201121
f2fs_put_page(apage, err ? 1 : 0);
11211122
}
11221123

@@ -1134,7 +1135,7 @@ static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid,
11341135
if (!page)
11351136
return ERR_PTR(-ENOMEM);
11361137

1137-
err = read_node_page(page, READ_SYNC);
1138+
err = read_node_page(page, REQ_SYNC);
11381139
if (err < 0) {
11391140
f2fs_put_page(page, 1);
11401141
return ERR_PTR(err);
@@ -1575,7 +1576,8 @@ static int f2fs_write_node_page(struct page *page,
15751576
struct f2fs_io_info fio = {
15761577
.sbi = sbi,
15771578
.type = NODE,
1578-
.rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC : WRITE,
1579+
.op = REQ_OP_WRITE,
1580+
.op_flags = wbc_to_write_flags(wbc),
15791581
.page = page,
15801582
.encrypted_page = NULL,
15811583
};

0 commit comments

Comments
 (0)