diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2020-11-20 19:27:57 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2020-12-07 11:50:41 -0500 |
commit | 39c841f59dcaff71ea94e049e1a59a2c89e8555c (patch) | |
tree | cbdc835a6752ac56f387cda7607b37ca8e857ed7 | |
parent | e55722309e65040912837a6ff107007f6a6e18fd (diff) |
bcachefs: Optimize bch2_journal_flush_seq_async()
Avoid taking the journal lock if we don't have to.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | fs/bcachefs/journal.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/bcachefs/journal.c b/fs/bcachefs/journal.c index 1c4dce654aa0..5874a9ff2204 100644 --- a/fs/bcachefs/journal.c +++ b/fs/bcachefs/journal.c @@ -548,12 +548,20 @@ out: * necessary */ int bch2_journal_flush_seq_async(struct journal *j, u64 seq, - struct closure *parent) + struct closure *parent) { struct journal_buf *buf; int ret = 0; + if (seq <= j->err_seq) + return -EIO; + + if (seq <= j->seq_ondisk) + return 1; + spin_lock(&j->lock); + + /* Recheck under lock: */ if (seq <= j->err_seq) { ret = -EIO; goto out; |