Andrew Morton
2022-Sep-01 19:06 UTC
[Ocfs2-devel] + fs-buffer-remove-__breadahead_gfp.patch added to mm-unstable branch
The patch titled Subject: fs/buffer: remove __breadahead_gfp() has been added to the -mm mm-unstable branch. Its filename is fs-buffer-remove-__breadahead_gfp.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/fs-buffer-remove-__breadahead_gfp.patch This patch will later appear in the mm-unstable branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via the mm-everything branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there every 2-3 working days ------------------------------------------------------ From: Zhang Yi <yi.zhang at huawei.com> Subject: fs/buffer: remove __breadahead_gfp() Date: Thu, 1 Sep 2022 21:34:52 +0800 Patch series "fs/buffer: remove ll_rw_block()", v2. ll_rw_block() will skip locked buffer before submitting IO, it assumes that locked buffer means it is under IO. This assumption is not always true because we cannot guarantee every buffer lock path would submit IO. After commit 88dbcbb3a484 ("blkdev: avoid migration stalls for blkdev pages"), buffer_migrate_folio_norefs() becomes one exceptional case, and there may be others. So ll_rw_block() is not safe on the sync read path, we could get false positive EIO return value when filesystem reading metadata. It seems that it could be only used on the readahead path. Unfortunately, many filesystem misuse the ll_rw_block() on the sync read path. This patch set just remove ll_rw_block() and add new friendly helpers, which could prevent false positive EIO on the read metadata path. Thanks for the suggestion from Jan, the original discussion is at [1]. patch 1: remove unused helpers in fs/buffer.c patch 2: add new bh_read_[*] helpers patch 3-11: remove all ll_rw_block() calls in filesystems patch 12-14: do some leftover cleanups. [1]. https://lore.kernel.org/linux-mm/20220825080146.2021641-1-chengzhihao1 at huawei.com/ This patch (of 14): No one use __breadahead_gfp() and sb_breadahead_unmovable() any more, remove them. Link: https://lkml.kernel.org/r/20220901133505.2510834-1-yi.zhang at huawei.com Link: https://lkml.kernel.org/r/20220901133505.2510834-2-yi.zhang at huawei.com Signed-off-by: Zhang Yi <yi.zhang at huawei.com> Reviewed-by: Jan Kara <jack at suse.cz> Cc: Alexander Viro <viro at zeniv.linux.org.uk> Cc: Andreas Gruenbacher <agruenba at redhat.com> Cc: Bob Peterson <rpeterso at redhat.com> Cc: Christoph Hellwig <hch at infradead.org> Cc: Evgeniy Dushistov <dushistov at mail.ru> Cc: Heming Zhao <ocfs2-devel at oss.oracle.com> Cc: Jens Axboe <axboe at kernel.dk> Cc: Konstantin Komarov <almaz.alexandrovich at paragon-software.com> Cc: Mark Fasheh <mark at fasheh.com> Cc: Theodore Ts'o <tytso at mit.edu> Cc: Yu Kuai <yukuai3 at huawei.com> Cc: Zhihao Cheng <chengzhihao1 at huawei.com> Signed-off-by: Andrew Morton <akpm at linux-foundation.org> --- fs/buffer.c | 11 ----------- include/linux/buffer_head.h | 8 -------- 2 files changed, 19 deletions(-) --- a/fs/buffer.c~fs-buffer-remove-__breadahead_gfp +++ a/fs/buffer.c @@ -1348,17 +1348,6 @@ void __breadahead(struct block_device *b } EXPORT_SYMBOL(__breadahead); -void __breadahead_gfp(struct block_device *bdev, sector_t block, unsigned size, - gfp_t gfp) -{ - struct buffer_head *bh = __getblk_gfp(bdev, block, size, gfp); - if (likely(bh)) { - ll_rw_block(REQ_OP_READ | REQ_RAHEAD, 1, &bh); - brelse(bh); - } -} -EXPORT_SYMBOL(__breadahead_gfp); - /** * __bread_gfp() - reads a specified block and returns the bh * @bdev: the block_device to read from --- a/include/linux/buffer_head.h~fs-buffer-remove-__breadahead_gfp +++ a/include/linux/buffer_head.h @@ -214,8 +214,6 @@ struct buffer_head *__getblk_gfp(struct void __brelse(struct buffer_head *); void __bforget(struct buffer_head *); void __breadahead(struct block_device *, sector_t block, unsigned int size); -void __breadahead_gfp(struct block_device *, sector_t block, unsigned int size, - gfp_t gfp); struct buffer_head *__bread_gfp(struct block_device *, sector_t block, unsigned size, gfp_t gfp); void invalidate_bh_lrus(void); @@ -340,12 +338,6 @@ sb_breadahead(struct super_block *sb, se __breadahead(sb->s_bdev, block, sb->s_blocksize); } -static inline void -sb_breadahead_unmovable(struct super_block *sb, sector_t block) -{ - __breadahead_gfp(sb->s_bdev, block, sb->s_blocksize, 0); -} - static inline struct buffer_head * sb_getblk(struct super_block *sb, sector_t block) { _ Patches currently in -mm which might be from yi.zhang at huawei.com are fs-buffer-remove-__breadahead_gfp.patch fs-buffer-add-some-new-buffer-read-helpers.patch fs-buffer-replace-ll_rw_block.patch gfs2-replace-ll_rw_block.patch isofs-replace-ll_rw_block.patch jbd2-replace-ll_rw_block.patch ntfs3-replace-ll_rw_block.patch ocfs2-replace-ll_rw_block.patch reiserfs-replace-ll_rw_block.patch udf-replace-ll_rw_block.patch ufs-replace-ll_rw_block.patch fs-buffer-remove-ll_rw_block-helper.patch ext2-replace-bh_submit_read-helper-with-bh_read_locked.patch fs-buffer-remove-bh_submit_read-helper.patch