]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/FileStore: fix mount/remount force_sync race
authorSage Weil <sage@redhat.com>
Sat, 16 Aug 2014 19:42:33 +0000 (12:42 -0700)
committerSage Weil <sage@redhat.com>
Wed, 10 Sep 2014 14:45:31 +0000 (07:45 -0700)
Consider:

 - mount
 - sync_entry is doing some work
 - umount
   - set force_sync = true
   - set done = true
 - sync_entry exits (due to done)
   - ..but does not set force_sync = false
 - mount
 - journal replay starts
 - sync_entry sees force_sync and does a commit while op_seq == 0
 ...crash...

Fixes: #9144
Backport: firefly, dumpling
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit dd11042f969b94f7a461d02e1475794031c79f61)

Conflicts:
src/os/FileStore.cc

src/os/FileStore.cc

index d462be13e1883da62af07c9bba874090ffca9080..a11e0777a97c1a81a0bb3239cb323cf90cc50f3a 100644 (file)
@@ -1961,6 +1961,9 @@ int FileStore::umount()
     TEMP_FAILURE_RETRY(::close(basedir_fd));
     basedir_fd = -1;
   }
+
+  force_sync = false;
+
   object_map.reset();
 
   {