From: NeilBrown <neilb@suse.de> To: Andrew Morton <akpm@linux-foundation.org>, Jaegeuk Kim <jaegeuk@kernel.org>, Chao Yu <chao@kernel.org>, Jeff Layton <jlayton@kernel.org>, Ilya Dryomov <idryomov@gmail.com>, Miklos Szeredi <miklos@szeredi.hu>, Trond Myklebust <trond.myklebust@hammerspace.com>, Anna Schumaker <anna.schumaker@netapp.com>, Ryusuke Konishi <konishi.ryusuke@gmail.com>, "Darrick J. Wong" <djwong@kernel.org>, Philipp Reisner <philipp.reisner@linbit.com>, Lars Ellenberg <lars.ellenberg@linbit.com>, Paolo Valente <paolo.valente@linaro.org>, Jens Axboe <axboe@kernel.dk> Cc: linux-mm@kvack.org, linux-nilfs@vger.kernel.org, linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-ext4@vger.kernel.org, ceph-devel@vger.kernel.org, drbd-dev@lists.linbit.com, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org Subject: [PATCH 3/9] f2fs: change retry waiting for f2fs_write_single_data_page() Date: Thu, 27 Jan 2022 13:46:29 +1100 [thread overview] Message-ID: <164325158956.29787.7016948342209980097.stgit@noble.brown> (raw) In-Reply-To: <164325106958.29787.4865219843242892726.stgit@noble.brown> f2fs_write_single_data_page() can return -EAGAIN if it cannot get the cp_rwsem lock - it holds a page lock and so cannot wait for it. Some code which calls f2fs_write_single_data_page() use congestion_wait() and then tries again. congestion_wait() doesn't do anything useful as congestion is no longer tracked. So this is just a simple sleep. A better approach is it wait until the cp_rwsem lock can be taken - then try again. There is certainly no point trying again *before* the lock can be taken. Signed-off-by: NeilBrown <neilb@suse.de> --- fs/f2fs/compress.c | 6 +++--- fs/f2fs/data.c | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c index d0c3aeba5945..58ff7f4b296c 100644 --- a/fs/f2fs/compress.c +++ b/fs/f2fs/compress.c @@ -1505,9 +1505,9 @@ static int f2fs_write_raw_pages(struct compress_ctx *cc, if (IS_NOQUOTA(cc->inode)) return 0; ret = 0; - cond_resched(); - congestion_wait(BLK_RW_ASYNC, - DEFAULT_IO_TIMEOUT); + /* Wait until we can get the lock, then try again. */ + f2fs_lock_op(F2FS_I_SB(cc->inode)); + f2fs_unlock_op(F2FS_I_SB(cc->inode)); goto retry_write; } return ret; diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 8c417864c66a..1d2341163e2c 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -3047,9 +3047,12 @@ static int f2fs_write_cache_pages(struct address_space *mapping, } else if (ret == -EAGAIN) { ret = 0; if (wbc->sync_mode == WB_SYNC_ALL) { - cond_resched(); - congestion_wait(BLK_RW_ASYNC, - DEFAULT_IO_TIMEOUT); + /* Wait until we can get the + * lock, then try again. + */ + f2fs_lock_op(F2FS_I_SB(mapping->host)); + f2fs_unlock_op(F2FS_I_SB(mapping->host)); + goto retry_write; } goto next;
WARNING: multiple messages have this Message-ID (diff)
From: NeilBrown <neilb@suse.de> To: Andrew Morton <akpm@linux-foundation.org>, Jaegeuk Kim <jaegeuk@kernel.org>, Chao Yu <chao@kernel.org>, Jeff Layton <jlayton@kernel.org>, Ilya Dryomov <idryomov@gmail.com>, Miklos Szeredi <miklos@szeredi.hu>, Trond Myklebust <trond.myklebust@hammerspace.com>, Anna Schumaker <anna.schumaker@netapp.com>, Ryusuke Konishi <konishi.ryusuke@gmail.com>, "Darrick J. Wong" <djwong@kernel.org>, Philipp Reisner <philipp.reisner@linbit.com>, Lars Ellenberg <lars.ellenberg@linbit.com>, Paolo Valente <paolo.valente@linaro.org>, Jens Axboe <axboe@kernel.dk> Cc: linux-nfs@vger.kernel.org, linux-nilfs@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-block@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, ceph-devel@vger.kernel.org, linux-ext4@vger.kernel.org, drbd-dev@lists.linbit.com Subject: [f2fs-dev] [PATCH 3/9] f2fs: change retry waiting for f2fs_write_single_data_page() Date: Thu, 27 Jan 2022 13:46:29 +1100 [thread overview] Message-ID: <164325158956.29787.7016948342209980097.stgit@noble.brown> (raw) In-Reply-To: <164325106958.29787.4865219843242892726.stgit@noble.brown> f2fs_write_single_data_page() can return -EAGAIN if it cannot get the cp_rwsem lock - it holds a page lock and so cannot wait for it. Some code which calls f2fs_write_single_data_page() use congestion_wait() and then tries again. congestion_wait() doesn't do anything useful as congestion is no longer tracked. So this is just a simple sleep. A better approach is it wait until the cp_rwsem lock can be taken - then try again. There is certainly no point trying again *before* the lock can be taken. Signed-off-by: NeilBrown <neilb@suse.de> --- fs/f2fs/compress.c | 6 +++--- fs/f2fs/data.c | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c index d0c3aeba5945..58ff7f4b296c 100644 --- a/fs/f2fs/compress.c +++ b/fs/f2fs/compress.c @@ -1505,9 +1505,9 @@ static int f2fs_write_raw_pages(struct compress_ctx *cc, if (IS_NOQUOTA(cc->inode)) return 0; ret = 0; - cond_resched(); - congestion_wait(BLK_RW_ASYNC, - DEFAULT_IO_TIMEOUT); + /* Wait until we can get the lock, then try again. */ + f2fs_lock_op(F2FS_I_SB(cc->inode)); + f2fs_unlock_op(F2FS_I_SB(cc->inode)); goto retry_write; } return ret; diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 8c417864c66a..1d2341163e2c 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -3047,9 +3047,12 @@ static int f2fs_write_cache_pages(struct address_space *mapping, } else if (ret == -EAGAIN) { ret = 0; if (wbc->sync_mode == WB_SYNC_ALL) { - cond_resched(); - congestion_wait(BLK_RW_ASYNC, - DEFAULT_IO_TIMEOUT); + /* Wait until we can get the + * lock, then try again. + */ + f2fs_lock_op(F2FS_I_SB(mapping->host)); + f2fs_unlock_op(F2FS_I_SB(mapping->host)); + goto retry_write; } goto next; _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2022-01-27 2:47 UTC|newest] Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-01-27 2:46 [PATCH 0/9] Remove remaining parts of congestions tracking code NeilBrown 2022-01-27 2:46 ` NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-27 2:46 ` [PATCH 2/9] Remove bdi_congested() and wb_congested() and related functions NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-27 9:54 ` kernel test robot 2022-01-27 9:54 ` kernel test robot 2022-01-27 22:10 ` Ryusuke Konishi 2022-01-27 22:10 ` Ryusuke Konishi 2022-01-27 22:10 ` [f2fs-dev] " Ryusuke Konishi 2022-01-27 2:46 ` [PATCH 5/9] cephfs: don't set/clear bdi_congestion NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-27 11:12 ` Jeff Layton 2022-01-27 11:12 ` [f2fs-dev] " Jeff Layton 2022-01-27 2:46 ` [PATCH 9/9] Remove congestion tracking framework NeilBrown 2022-01-27 2:46 ` NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-27 2:46 ` [PATCH 8/9] block/bfq-iosched.c: use "false" rather than "BLK_RW_ASYNC" NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-27 2:46 ` [PATCH 1/9] Remove inode_congested() NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-28 9:37 ` Miklos Szeredi 2022-01-28 9:37 ` Miklos Szeredi 2022-01-28 9:37 ` [f2fs-dev] " Miklos Szeredi 2022-01-28 21:36 ` NeilBrown 2022-01-28 21:36 ` NeilBrown 2022-01-28 21:36 ` [f2fs-dev] " NeilBrown 2022-01-27 2:46 ` [PATCH 6/9] fuse: don't set/clear bdi_congested NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-27 2:46 ` NeilBrown [this message] 2022-01-27 2:46 ` [f2fs-dev] [PATCH 3/9] f2fs: change retry waiting for f2fs_write_single_data_page() NeilBrown 2022-01-28 1:34 ` Jaegeuk Kim 2022-01-28 1:34 ` Jaegeuk Kim 2022-01-28 1:34 ` [f2fs-dev] " Jaegeuk Kim 2022-01-27 2:46 ` [PATCH 7/9] NFS: remove congestion control NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-27 2:46 ` [PATCH 4/9] f2f2: replace some congestion_wait() calls with io_schedule_timeout() NeilBrown 2022-01-27 2:46 ` [f2fs-dev] " NeilBrown 2022-01-28 1:27 ` Jaegeuk Kim 2022-01-28 1:27 ` Jaegeuk Kim 2022-01-28 1:27 ` [f2fs-dev] " Jaegeuk Kim 2022-01-27 22:42 ` [PATCH 0/9] Remove remaining parts of congestions tracking code Andrew Morton 2022-01-27 22:42 ` Andrew Morton 2022-01-27 22:42 ` [f2fs-dev] " Andrew Morton 2022-01-28 0:58 ` Jens Axboe 2022-01-28 0:58 ` Jens Axboe 2022-01-28 0:58 ` [f2fs-dev] " Jens Axboe
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=164325158956.29787.7016948342209980097.stgit@noble.brown \ --to=neilb@suse.de \ --cc=akpm@linux-foundation.org \ --cc=anna.schumaker@netapp.com \ --cc=axboe@kernel.dk \ --cc=ceph-devel@vger.kernel.org \ --cc=chao@kernel.org \ --cc=djwong@kernel.org \ --cc=drbd-dev@lists.linbit.com \ --cc=idryomov@gmail.com \ --cc=jaegeuk@kernel.org \ --cc=jlayton@kernel.org \ --cc=konishi.ryusuke@gmail.com \ --cc=lars.ellenberg@linbit.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-f2fs-devel@lists.sourceforge.net \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-nfs@vger.kernel.org \ --cc=linux-nilfs@vger.kernel.org \ --cc=miklos@szeredi.hu \ --cc=paolo.valente@linaro.org \ --cc=philipp.reisner@linbit.com \ --cc=trond.myklebust@hammerspace.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.