summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-04-04 14:27:38 -0700
committerSage Weil <sage@newdream.net>2009-04-04 14:29:21 -0700
commitb1c0073f7eace29c9cf9cd1bc54c4d2f0598a27b (patch)
treee894d35a6bc29b86730d50e71ef470db04962b20
parent365105fa07ba459b453d8ec61efb54db00afa242 (diff)
downloadceph-b1c0073f7eace29c9cf9cd1bc54c4d2f0598a27b.tar.gz
osd: implement GETXATTR read op
-rw-r--r--src/osd/ReplicatedPG.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index e69f84b9af9..e27e6d8c4da 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -653,6 +653,7 @@ void ReplicatedPG::op_read(MOSDOp *op)
return;
+ bufferlist::iterator bp = op->get_data().begin();
bufferlist data;
int data_off = 0;
int result = 0;
@@ -747,6 +748,20 @@ void ReplicatedPG::op_read(MOSDOp *op)
result = r;
}
break;
+
+ case CEPH_OSD_OP_GETXATTR:
+ {
+ nstring name(p->name_len + 1);
+ name[0] = '_';
+ bp.copy(p->name_len, name.data()+1);
+ int r = osd->store->getattr(info.pgid.to_coll(), poid, name.c_str(), data);
+ if (r >= 0) {
+ p->value_len = r;
+ result = 0;
+ } else
+ result = r;
+ }
+ break;
case CEPH_OSD_OP_GREP:
{