From patchwork Wed Jul 7 22:11:30 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yehuda Sadeh X-Patchwork-Id: 110737 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o67LphMO031422 for ; Wed, 7 Jul 2010 21:52:17 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756463Ab0GGVve (ORCPT ); Wed, 7 Jul 2010 17:51:34 -0400 Received: from mail.hq.newdream.net ([66.33.206.127]:34453 "EHLO mail.hq.newdream.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757825Ab0GGVu1 (ORCPT ); Wed, 7 Jul 2010 17:50:27 -0400 Received: from mail.hq.newdream.net (localhost [127.0.0.1]) by mail.hq.newdream.net (Postfix) with ESMTP id 93D192705A; Wed, 7 Jul 2010 14:50:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=hq.newdream.net; h=from:to :cc:subject:date:message-id:in-reply-to:references:in-reply-to :references; s=drama; bh=UTC92kY0lGvRFV3HKAFnSRLSiHI=; b=f2Zrq1p GYkLOkJfrUYRcLCQTXQ6wIu9w6abcbDD+SargS+I+UlZtUHZ7p8MNTAOS1UMEoMD uIqnwqlz59GK+jgzVkx0xTOakaDAC+Xw1b3d38ehj23PRyDjAmxvUVi18jY7wVb1 mhwmoCZMhod+0gLBRftn7Pvhcn/atxj/uRtw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=hq.newdream.net; h=from:to :cc:subject:date:message-id:in-reply-to:references:in-reply-to :references; q=dns; s=drama; b=kZqDPx0Zo7MrR9lO7NpuOUBnIU3v03kz+ /swc5ijMHpUuYuPGxf628Yej+THe6e3Xidx0aOez2aL4gMnV5/JjOD7e2ar1Orhn ImNxBP5xFrkj0Z4RR1znyrav/G5RSpip+VK/OvxtVvMXTnlhPhauIvxW9SZQUsNy YO27bSyb9w= Received: from localhost.localdomain (ip-66-33-206-8.dreamhost.com [66.33.206.8]) by mail.hq.newdream.net (Postfix) with ESMTP id 8055C2705E; Wed, 7 Jul 2010 14:50:26 -0700 (PDT) From: Yehuda Sadeh To: linux-kernel@vger.kernel.org Cc: ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, sage@newdream.net, Yehuda Sadeh Subject: [PATCH v3 08/10] ceph-rbd: osdc support for osd call and rollback operations Date: Wed, 7 Jul 2010 15:11:30 -0700 Message-Id: X-Mailer: git-send-email 1.5.6.5 In-Reply-To: References: In-Reply-To: References: Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Wed, 07 Jul 2010 21:52:17 +0000 (UTC) diff --git a/fs/ceph/decode.h b/fs/ceph/decode.h index 65b3e02..5f2d803 100644 --- a/fs/ceph/decode.h +++ b/fs/ceph/decode.h @@ -189,6 +189,11 @@ static inline void ceph_encode_string(void **p, void *end, ceph_encode_need(p, end, n, bad); \ ceph_encode_copy(p, pv, n); \ } while (0) +#define ceph_encode_string_safe(p, end, s, n, bad) \ + do { \ + ceph_encode_need(p, end, n, bad); \ + ceph_encode_string(p, end, s, n); \ + } while (0) #endif diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c index 1cb9533..8b718cb 100644 --- a/fs/ceph/osd_client.c +++ b/fs/ceph/osd_client.c @@ -136,6 +136,7 @@ static int op_needs_trail(int op) case CEPH_OSD_OP_GETXATTR: case CEPH_OSD_OP_SETXATTR: case CEPH_OSD_OP_CMPXATTR: + case CEPH_OSD_OP_CALL: return 1; default: return 0; @@ -286,6 +287,27 @@ static void osd_req_encode_op(struct ceph_osd_request *req, dst->payload_len = cpu_to_le32(src->xattr.name_len + src->xattr.value_len); break; + case CEPH_OSD_OP_CALL: + BUG_ON(!req->r_trail); + + dst->cls.class_len = src->cls.class_len; + dst->cls.method_len = src->cls.method_len; + dst->cls.indata_len = cpu_to_le32(src->cls.indata_len); + + ceph_pagelist_append(req->r_trail, src->cls.class_name, + src->cls.class_len); + ceph_pagelist_append(req->r_trail, src->cls.method_name, + src->cls.method_len); + ceph_pagelist_append(req->r_trail, src->cls.indata, + src->cls.indata_len); + dst->payload_len = cpu_to_le32(src->cls.class_len + + src->cls.method_len + + src->cls.indata_len); + + break; + case CEPH_OSD_OP_ROLLBACK: + dst->snap.snapid = cpu_to_le64(src->snap.snapid); + break; } dst->payload_len = cpu_to_le32(src->payload_len); } diff --git a/fs/ceph/osd_client.h b/fs/ceph/osd_client.h index 38c4615..979efce 100644 --- a/fs/ceph/osd_client.h +++ b/fs/ceph/osd_client.h @@ -135,14 +135,20 @@ struct ceph_osd_req_op { __u8 cmp_mode; /* CEPH_OSD_CMPXATTR_MODE_* */ } xattr; struct { + const char *class_name; __u8 class_len; + const char *method_name; __u8 method_len; __u8 argc; + const char *indata; u32 indata_len; } cls; struct { u64 cookie, count; } pgls; + struct { + u64 snapid; + } snap; }; u32 payload_len; };