|
@@ -462,13 +462,12 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int f2fs_submit_page_write(struct f2fs_io_info *fio)
|
|
|
+void f2fs_submit_page_write(struct f2fs_io_info *fio)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = fio->sbi;
|
|
|
enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
|
|
|
struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
|
|
|
struct page *bio_page;
|
|
|
- int err = 0;
|
|
|
|
|
|
f2fs_bug_on(sbi, is_read_io(fio->op));
|
|
|
|
|
@@ -478,7 +477,7 @@ next:
|
|
|
spin_lock(&io->io_lock);
|
|
|
if (list_empty(&io->io_list)) {
|
|
|
spin_unlock(&io->io_lock);
|
|
|
- goto out_fail;
|
|
|
+ goto out;
|
|
|
}
|
|
|
fio = list_first_entry(&io->io_list,
|
|
|
struct f2fs_io_info, list);
|
|
@@ -505,9 +504,9 @@ alloc_new:
|
|
|
if (io->bio == NULL) {
|
|
|
if ((fio->type == DATA || fio->type == NODE) &&
|
|
|
fio->new_blkaddr & F2FS_IO_SIZE_MASK(sbi)) {
|
|
|
- err = -EAGAIN;
|
|
|
dec_page_count(sbi, WB_DATA_TYPE(bio_page));
|
|
|
- goto out_fail;
|
|
|
+ fio->retry = true;
|
|
|
+ goto skip;
|
|
|
}
|
|
|
io->bio = __bio_alloc(sbi, fio->new_blkaddr, fio->io_wbc,
|
|
|
BIO_MAX_PAGES, false,
|
|
@@ -527,12 +526,11 @@ alloc_new:
|
|
|
f2fs_trace_ios(fio, 0);
|
|
|
|
|
|
trace_f2fs_submit_page_write(fio->page, fio);
|
|
|
-
|
|
|
+skip:
|
|
|
if (fio->in_list)
|
|
|
goto next;
|
|
|
-out_fail:
|
|
|
+out:
|
|
|
up_write(&io->io_rwsem);
|
|
|
- return err;
|
|
|
}
|
|
|
|
|
|
static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
|