]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
objectcacher: fix object trimming
authorSage Weil <sage@newdream.net>
Tue, 20 Jan 2009 01:03:05 +0000 (17:03 -0800)
committerSage Weil <sage@newdream.net>
Tue, 20 Jan 2009 01:03:05 +0000 (17:03 -0800)
Do not trim object until it fully commits.

src/osdc/ObjectCacher.cc
src/osdc/ObjectCacher.h

index 78bb3bd96298eba287918134c13b577f0a59eabf..b5ba926085be95c85fe29633ae5e52d6d08dea68 100644 (file)
@@ -674,10 +674,13 @@ void ObjectCacher::bh_write_commit(object_t oid, loff_t start, size_t length, ti
     if (commit_set_callback &&
        ob->last_commit_tid == ob->last_write_tid) {
       ob->uncommitted_item.remove_myself();
-      if (uncommitted_by_ino[ob->get_ino()].empty()) {  // no uncommitted in flight
-       uncommitted_by_ino.erase(ob->get_ino());
-       if (dirty_tx_by_ino[ob->get_ino()] == 0)        // AND nothing dirty/tx
-         commit_set_callback(flush_set_callback_arg, ob->get_ino());      
+      inodeno_t ino = ob->get_ino();
+      if (ob->can_close())
+       close_object(ob);
+      if (uncommitted_by_ino[ino].empty()) {  // no uncommitted in flight
+       uncommitted_by_ino.erase(ino);
+       if (dirty_tx_by_ino[ino] == 0)        // AND nothing dirty/tx
+         commit_set_callback(flush_set_callback_arg, ino);      
       }
     }
   }
index 34a0f1c59e4858510f2c46f7e9af46fd5c8b8ae3..58b6a2cb2479d08ac5376610c7525e4fd508d788 100644 (file)
@@ -181,7 +181,8 @@ class ObjectCacher {
     bool can_close() {
       return data.empty() && lock_state == LOCK_NONE &&
         waitfor_ack.empty() && waitfor_commit.empty() &&
-        waitfor_rd.empty() && waitfor_wr.empty();
+        waitfor_rd.empty() && waitfor_wr.empty() &&
+       !uncommitted_item.is_on_xlist();
     }
 
     // bh