diff options
Diffstat (limited to 'fs/fat/fatent.c')
-rw-r--r-- | fs/fat/fatent.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c index 265983635f2b..3647c65a0f48 100644 --- a/fs/fat/fatent.c +++ b/fs/fat/fatent.c | |||
@@ -388,8 +388,11 @@ static int fat_mirror_bhs(struct super_block *sb, struct buffer_head **bhs, | |||
388 | err = -ENOMEM; | 388 | err = -ENOMEM; |
389 | goto error; | 389 | goto error; |
390 | } | 390 | } |
391 | /* Avoid race with userspace read via bdev */ | ||
392 | lock_buffer(c_bh); | ||
391 | memcpy(c_bh->b_data, bhs[n]->b_data, sb->s_blocksize); | 393 | memcpy(c_bh->b_data, bhs[n]->b_data, sb->s_blocksize); |
392 | set_buffer_uptodate(c_bh); | 394 | set_buffer_uptodate(c_bh); |
395 | unlock_buffer(c_bh); | ||
393 | mark_buffer_dirty_inode(c_bh, sbi->fat_inode); | 396 | mark_buffer_dirty_inode(c_bh, sbi->fat_inode); |
394 | if (sb->s_flags & SB_SYNCHRONOUS) | 397 | if (sb->s_flags & SB_SYNCHRONOUS) |
395 | err = sync_dirty_buffer(c_bh); | 398 | err = sync_dirty_buffer(c_bh); |