block: Hold invalidate_lock in BLKRESETZONE ioctl
authorShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Thu, 11 Nov 2021 08:52:38 +0000 (17:52 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 18:17:15 +0000 (19:17 +0100)
commit5e84e9d61dba1f3f91a979b4e510bdea80ece17e
tree47e3829e43dbed91df1fef312e920a6a01a29583
parent373c2bfecb064f0e5bb7f7fffa5d1f2e5f9e5571
block: Hold invalidate_lock in BLKRESETZONE ioctl

commit 86399ea071099ec8ee0a83ac9ad67f7df96a50ad upstream.

When BLKRESETZONE ioctl and data read race, the data read leaves stale
page cache. The commit e5113505904e ("block: Discard page cache of zone
reset target range") added page cache truncation to avoid stale page
cache after the ioctl. However, the stale page cache still can be read
during the reset zone operation for the ioctl. To avoid the stale page
cache completely, hold invalidate_lock of the block device file mapping.

Fixes: e5113505904e ("block: Discard page cache of zone reset target range")
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Cc: stable@vger.kernel.org # v5.15
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20211111085238.942492-1-shinichiro.kawasaki@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
block/blk-zoned.c