summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2013-01-17 22:11:38 +0100
committerJan Kara <jack@suse.cz>2013-01-21 11:19:58 +0100
commit9734c971aa6be6db61226b0046e080ca10383748 (patch)
tree57d202ecd9b18e033c569129fce0c32a64983349
parentExt3: return ENOMEM rather than EIO if sb_getblk fails (diff)
downloadlinux-9734c971aa6be6db61226b0046e080ca10383748.tar.xz
linux-9734c971aa6be6db61226b0046e080ca10383748.zip
udf: Write LVID to disk after opening / closing
So far we just marked the buffer as dirty and left writing on flusher thread but especially on opening that opens possible race window where we could write other modified fs structures to disk before we mark filesystem as open. So sync LVID buffer to disk after opening and closing fs. Reported-by: Steve Nickel <snickel58@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r--fs/udf/super.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/udf/super.c b/fs/udf/super.c
index e9be396a558d..186adbf94b20 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -1866,6 +1866,8 @@ static void udf_open_lvid(struct super_block *sb)
mark_buffer_dirty(bh);
sbi->s_lvid_dirty = 0;
mutex_unlock(&sbi->s_alloc_mutex);
+ /* Make opening of filesystem visible on the media immediately */
+ sync_dirty_buffer(bh);
}
static void udf_close_lvid(struct super_block *sb)
@@ -1906,6 +1908,8 @@ static void udf_close_lvid(struct super_block *sb)
mark_buffer_dirty(bh);
sbi->s_lvid_dirty = 0;
mutex_unlock(&sbi->s_alloc_mutex);
+ /* Make closing of filesystem visible on the media immediately */
+ sync_dirty_buffer(bh);
}
u64 lvid_get_unique_id(struct super_block *sb)