Loading fs/f2fs/data.c +38 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,44 @@ static void __submit_merged_bio(struct f2fs_bio_info *io) io->bio = NULL; } bool is_merged_page(struct f2fs_sb_info *sbi, struct page *page, enum page_type type) { enum page_type btype = PAGE_TYPE_OF_BIO(type); struct f2fs_bio_info *io = &sbi->write_io[btype]; struct bio_vec *bvec; struct page *target; int i; down_read(&io->io_rwsem); if (!io->bio) { up_read(&io->io_rwsem); return false; } bio_for_each_segment_all(bvec, io->bio, i) { if (bvec->bv_page->mapping) { target = bvec->bv_page; } else { struct f2fs_crypto_ctx *ctx; /* encrypted page */ ctx = (struct f2fs_crypto_ctx *)page_private( bvec->bv_page); target = ctx->w.control_page; } if (page == target) { up_read(&io->io_rwsem); return true; } } up_read(&io->io_rwsem); return false; } void f2fs_submit_merged_bio(struct f2fs_sb_info *sbi, enum page_type type, int rw) { Loading fs/f2fs/f2fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -1880,6 +1880,7 @@ void destroy_checkpoint_caches(void); /* * data.c */ bool is_merged_page(struct f2fs_sb_info *, struct page *, enum page_type); void f2fs_submit_merged_bio(struct f2fs_sb_info *, enum page_type, int); int f2fs_submit_page_bio(struct f2fs_io_info *); void f2fs_submit_page_mbio(struct f2fs_io_info *); Loading fs/f2fs/segment.c +0 −38 Original line number Diff line number Diff line Loading @@ -1415,44 +1415,6 @@ void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn, f2fs_update_extent_cache(dn); } static inline bool is_merged_page(struct f2fs_sb_info *sbi, struct page *page, enum page_type type) { enum page_type btype = PAGE_TYPE_OF_BIO(type); struct f2fs_bio_info *io = &sbi->write_io[btype]; struct bio_vec *bvec; struct page *target; int i; down_read(&io->io_rwsem); if (!io->bio) { up_read(&io->io_rwsem); return false; } bio_for_each_segment_all(bvec, io->bio, i) { if (bvec->bv_page->mapping) { target = bvec->bv_page; } else { struct f2fs_crypto_ctx *ctx; /* encrypted page */ ctx = (struct f2fs_crypto_ctx *)page_private( bvec->bv_page); target = ctx->w.control_page; } if (page == target) { up_read(&io->io_rwsem); return true; } } up_read(&io->io_rwsem); return false; } void f2fs_wait_on_page_writeback(struct page *page, enum page_type type) { Loading Loading
fs/f2fs/data.c +38 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,44 @@ static void __submit_merged_bio(struct f2fs_bio_info *io) io->bio = NULL; } bool is_merged_page(struct f2fs_sb_info *sbi, struct page *page, enum page_type type) { enum page_type btype = PAGE_TYPE_OF_BIO(type); struct f2fs_bio_info *io = &sbi->write_io[btype]; struct bio_vec *bvec; struct page *target; int i; down_read(&io->io_rwsem); if (!io->bio) { up_read(&io->io_rwsem); return false; } bio_for_each_segment_all(bvec, io->bio, i) { if (bvec->bv_page->mapping) { target = bvec->bv_page; } else { struct f2fs_crypto_ctx *ctx; /* encrypted page */ ctx = (struct f2fs_crypto_ctx *)page_private( bvec->bv_page); target = ctx->w.control_page; } if (page == target) { up_read(&io->io_rwsem); return true; } } up_read(&io->io_rwsem); return false; } void f2fs_submit_merged_bio(struct f2fs_sb_info *sbi, enum page_type type, int rw) { Loading
fs/f2fs/f2fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -1880,6 +1880,7 @@ void destroy_checkpoint_caches(void); /* * data.c */ bool is_merged_page(struct f2fs_sb_info *, struct page *, enum page_type); void f2fs_submit_merged_bio(struct f2fs_sb_info *, enum page_type, int); int f2fs_submit_page_bio(struct f2fs_io_info *); void f2fs_submit_page_mbio(struct f2fs_io_info *); Loading
fs/f2fs/segment.c +0 −38 Original line number Diff line number Diff line Loading @@ -1415,44 +1415,6 @@ void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn, f2fs_update_extent_cache(dn); } static inline bool is_merged_page(struct f2fs_sb_info *sbi, struct page *page, enum page_type type) { enum page_type btype = PAGE_TYPE_OF_BIO(type); struct f2fs_bio_info *io = &sbi->write_io[btype]; struct bio_vec *bvec; struct page *target; int i; down_read(&io->io_rwsem); if (!io->bio) { up_read(&io->io_rwsem); return false; } bio_for_each_segment_all(bvec, io->bio, i) { if (bvec->bv_page->mapping) { target = bvec->bv_page; } else { struct f2fs_crypto_ctx *ctx; /* encrypted page */ ctx = (struct f2fs_crypto_ctx *)page_private( bvec->bv_page); target = ctx->w.control_page; } if (page == target) { up_read(&io->io_rwsem); return true; } } up_read(&io->io_rwsem); return false; } void f2fs_wait_on_page_writeback(struct page *page, enum page_type type) { Loading