]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix forward truncation
authorSage Weil <sage@newdream.net>
Sat, 17 Jan 2009 19:45:18 +0000 (11:45 -0800)
committerSage Weil <sage@newdream.net>
Sat, 17 Jan 2009 19:45:18 +0000 (11:45 -0800)
src/mds/Server.cc

index ceb596f141f97f8ad9d7c6da80624603dabf20ae..999334e7d7229290c9e7368101ed1315694969a4 100644 (file)
@@ -4825,10 +4825,15 @@ public:
     // notify any clients
     mds->locker->issue_truncate(in);
 
-    // purge
-    mds->mdcache->purge_inode(in, in->inode.size, old_size, mdr->ls);
-    mds->mdcache->wait_for_purge(in, in->inode.size, 
-                                new C_MDS_truncate_purged(mds, mdr));
+    if (old_size <= in->inode.size) {
+      // forward truncate.  done!
+      mds->server->reply_request(mdr, 0);
+    } else {
+      // purge
+      mds->mdcache->purge_inode(in, in->inode.size, old_size, mdr->ls);
+      mds->mdcache->wait_for_purge(in, in->inode.size, 
+                                  new C_MDS_truncate_purged(mds, mdr));
+    }
   }
 };
 
@@ -4880,7 +4885,7 @@ void Server::handle_client_truncate(MDRequest *mdr)
   pi->mtime = ctime;
   pi->ctime = ctime;
   pi->version = pdv;
-  pi->size = le64_to_cpu(req->head.args.truncate.length);
+  pi->size = req->head.args.truncate.length;
   pi->rstat.rbytes = pi->size;
   pi->truncate_seq++;
   mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);