From 888236906aadeab9d22ae2302597072fc90a20fd Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 9 Dec 2009 13:38:25 -0800 Subject: [PATCH] filestore: avoid string copy after collection_list sort --- src/include/object.h | 10 ++++++++++ src/os/FileStore.cc | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/include/object.h b/src/include/object.h index 4e26cf4c4a48f..1a3d5b0577e36 100644 --- a/src/include/object.h +++ b/src/include/object.h @@ -33,6 +33,9 @@ struct object_t { nstring name; object_t(const char *s = 0) : name(s) {} + void swap(object_t& o) { + name.swap(o.name); + } void encode(bufferlist &bl) const { ::encode(name, bl); @@ -128,6 +131,13 @@ struct sobject_t { sobject_t() : snap(0) {} sobject_t(object_t o, snapid_t s) : oid(o), snap(s) {} + void swap(sobject_t& o) { + oid.swap(o.oid); + snapid_t t = snap; + snap = o.snap; + o.snap = t; + } + void encode(bufferlist& bl) const { ::encode(oid, bl); ::encode(snap, bl); diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 1f03fa80b28da..7b1160bc53382 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -2256,7 +2256,7 @@ int FileStore::collection_list(coll_t c, vector& ls) ls.resize(inolist.size()); int i = 0; for (vector< pair >::iterator p = inolist.begin(); p != inolist.end(); p++) - ls[i++] = p->second; + ls[i++].swap(p->second); dout(10) << "collection_list " << fn << " = 0 (" << ls.size() << " objects)" << dendl; ::closedir(dir); -- 2.39.5