reiserfs: Make cancel_old_flush() reliable
authorJan Kara <jack@suse.cz>
Wed, 5 Apr 2017 12:09:48 +0000 (14:09 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Mar 2018 08:23:24 +0000 (09:23 +0100)
commit0628003f0dce308b1fb45ab3ed119321c8a70d76
treedad65d37a868feaef651e34c6ecef2559fd2a57f
parent5f73ddaefa4b15949a7beeea4978b7b2a2e2569c
reiserfs: Make cancel_old_flush() reliable

[ Upstream commit 71b0576bdb862e964a82c73327cdd1a249c53e67 ]

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>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/reiserfs/journal.c
fs/reiserfs/reiserfs.h
fs/reiserfs/super.c