OGAWA Hirofumi 3730ea003a fat: work around race with userspace's read via blockdev while mounting
[ Upstream commit 07bfa4415ab607e459b69bd86aa7e7602ce10b4f ]

If userspace reads the buffer via blockdev while mounting,
sb_getblk()+modify can race with buffer read via blockdev.

For example,

            FS                               userspace
    bh = sb_getblk()
    modify bh->b_data
                                  read
				    ll_rw_block(bh)
				      fill bh->b_data by on-disk data
				      /* lost modified data by FS */
				      set_buffer_uptodate(bh)
    set_buffer_uptodate(bh)

Userspace should not use the blockdev while mounting though, the udev
seems to be already doing this.  Although I think the udev should try to
avoid this, workaround the race by small overhead.

Link: http://lkml.kernel.org/r/87pnk7l3sw.fsf_-_@mail.parknet.co.jp
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Reported-by: Jan Stancek <jstancek@redhat.com>
Tested-by: Jan Stancek <jstancek@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-10-07 18:53:18 +02:00
..
2016-10-15 12:09:13 -07:00
2019-08-06 18:29:38 +02:00
2019-05-31 06:48:13 -07:00
2018-12-17 09:38:35 +01:00
2017-11-30 08:39:04 +00:00
2019-03-13 14:04:52 -07:00
2019-09-21 07:14:16 +02:00
2018-12-21 14:11:31 +01:00
2016-09-27 21:20:53 -04:00
2018-02-17 13:21:15 +01:00
2017-06-14 15:06:01 +02:00