summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-02-20 16:44:51 -0800
committerSage Weil <sage@newdream.net>2009-02-20 17:16:23 -0800
commit5ebb8d5c7c4f1583f253a8f2cedd25cdd3de16d8 (patch)
tree909a0ffc33f301b995aceab2154376b24692dfef
parent5cb6c31076a56338472e5e58ca1650c19ac7b72d (diff)
downloadceph-5ebb8d5c7c4f1583f253a8f2cedd25cdd3de16d8.tar.gz
mds: journal client prealloc ino
-rw-r--r--src/mds/MDCache.h1
-rw-r--r--src/mds/Server.cc6
-rw-r--r--src/mds/events/EMetaBlob.h8
3 files changed, 11 insertions, 4 deletions
diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h
index 173a02cac6c..c3401c2d57d 100644
--- a/src/mds/MDCache.h
+++ b/src/mds/MDCache.h
@@ -257,6 +257,7 @@ struct MDRequest : public Mutation {
inodeno_t alloc_ino, used_prealloc_ino;
deque<inodeno_t> prealloc_inos;
+ inodeno_t used_client_alloc;
Capability *cap;
int snap_caps;
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index ea4989acf39..3c95a6805c5 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -1440,8 +1440,7 @@ CInode* Server::prepare_new_inode(MDRequest *mdr, CDir *dir, inodeno_t useino, b
if (clientprealloc) {
// we need to journal the client prealloc use
-#warning write me
-
+ mdr->used_client_alloc = useino;
} else {
// assign ino
if (mdr->session->prealloc_inos.size()) {
@@ -1501,7 +1500,8 @@ void Server::journal_allocated_inos(MDRequest *mdr, EMetaBlob *blob)
mdr->prealloc_inos,
mdr->client_request->get_orig_source(),
mds->sessionmap.projected,
- mds->inotable->get_projected_version());
+ mds->inotable->get_projected_version(),
+ mdr->used_client_alloc);
}
void Server::apply_allocated_inos(MDRequest *mdr)
diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h
index dbd8ab51c37..a45d5525314 100644
--- a/src/mds/events/EMetaBlob.h
+++ b/src/mds/events/EMetaBlob.h
@@ -332,6 +332,8 @@ private:
inodeno_t used_preallocated_ino; // session
entity_name_t client_name; // session
+ inodeno_t used_client_alloc;
+
// inodes i've truncated
list<inodeno_t> truncate_start; // start truncate
map<inodeno_t,__u64> truncate_finish; // finished truncate (started in segment blah)
@@ -352,6 +354,7 @@ private:
::encode(preallocated_inos, bl);
::encode(client_name, bl);
::encode(inotablev, bl);
+ ::encode(used_client_alloc, bl);
::encode(sessionmapv, bl);
::encode(truncate_start, bl);
::encode(truncate_finish, bl);
@@ -368,6 +371,7 @@ private:
::decode(preallocated_inos, bl);
::decode(client_name, bl);
::decode(inotablev, bl);
+ ::decode(used_client_alloc, bl);
::decode(sessionmapv, bl);
::decode(truncate_start, bl);
::decode(truncate_finish, bl);
@@ -410,13 +414,15 @@ private:
inodeno_t used_prealloc,
deque<inodeno_t>& prealloc,
entity_name_t client,
- version_t sv, version_t iv) {
+ version_t sv, version_t iv,
+ inodeno_t client_alloc) {
allocated_ino = alloc;
used_preallocated_ino = used_prealloc;
preallocated_inos = prealloc;
client_name = client;
sessionmapv = sv;
inotablev = iv;
+ used_client_alloc = client_alloc;
}
void add_truncate_start(inodeno_t ino) {