diff options
author | Jan Kara <jack@suse.cz> | 2017-04-05 14:09:48 +0200 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2017-04-05 14:24:16 +0200 |
commit | 71b0576bdb862e964a82c73327cdd1a249c53e67 (patch) | |
tree | 172df641c17c0d88efb755bbc7e8ff35d619ec40 /fs/reiserfs/journal.c | |
parent | 65547661500885dde26ca4a75d4d7f7df587c88e (diff) |
reiserfs: Make cancel_old_flush() reliable
Currently canceling of delayed work that flushes old data using
cancel_old_flush() does not prevent work from being requeued. Thus
in theory new work can be queued after cancel_old_flush() from
reiserfs_freeze() has run. This will become larger problem once
flush_old_commits() can requeue the work itself.
Fix the problem by recording in sbi->work_queue that flushing work is
canceled and should not be requeued.
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/reiserfs/journal.c')
-rw-r--r-- | fs/reiserfs/journal.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index aa40c242f1db..da01f497180a 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c @@ -1961,7 +1961,7 @@ static int do_journal_release(struct reiserfs_transaction_handle *th, * will be requeued because superblock is being shutdown and doesn't * have MS_ACTIVE set. */ - cancel_delayed_work_sync(&REISERFS_SB(sb)->old_work); + reiserfs_cancel_old_flush(sb); /* wait for all commits to finish */ cancel_delayed_work_sync(&SB_JOURNAL(sb)->j_work); |