libceph: report defined but unsupported osd ops
authorAlex Elder <elder@inktank.com>
Fri, 15 Feb 2013 17:42:30 +0000 (11:42 -0600)
committerAlex Elder <elder@inktank.com>
Mon, 18 Feb 2013 18:20:22 +0000 (12:20 -0600)
If osd_req_encode_op() is given any opcode it doesn't recognize
it reports an error.

This patch fleshes out that routine to distinguish between
well-defined but unsupported values and values that are simply
bogus.

This and the next commit are related to:
    http://tracker.ceph.com/issues/4126

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
net/ceph/osd_client.c

index ad6b8b35f5cace5c40c6e56d3f06d53fda4b4195..ac7bcbf195743ddb0ec729490c7f0727a241a701 100644 (file)
@@ -281,6 +281,60 @@ static void osd_req_encode_op(struct ceph_osd_request *req,
                pr_err("unrecognized osd opcode %d\n", dst->op);
                WARN_ON(1);
                break;
+       case CEPH_OSD_OP_STAT:
+       case CEPH_OSD_OP_MAPEXT:
+       case CEPH_OSD_OP_MASKTRUNC:
+       case CEPH_OSD_OP_SPARSE_READ:
+       case CEPH_OSD_OP_ASSERT_VER:
+       case CEPH_OSD_OP_WRITEFULL:
+       case CEPH_OSD_OP_TRUNCATE:
+       case CEPH_OSD_OP_ZERO:
+       case CEPH_OSD_OP_DELETE:
+       case CEPH_OSD_OP_APPEND:
+       case CEPH_OSD_OP_SETTRUNC:
+       case CEPH_OSD_OP_TRIMTRUNC:
+       case CEPH_OSD_OP_TMAPUP:
+       case CEPH_OSD_OP_TMAPPUT:
+       case CEPH_OSD_OP_TMAPGET:
+       case CEPH_OSD_OP_CREATE:
+       case CEPH_OSD_OP_OMAPGETKEYS:
+       case CEPH_OSD_OP_OMAPGETVALS:
+       case CEPH_OSD_OP_OMAPGETHEADER:
+       case CEPH_OSD_OP_OMAPGETVALSBYKEYS:
+       case CEPH_OSD_OP_MODE_RD:
+       case CEPH_OSD_OP_OMAPSETVALS:
+       case CEPH_OSD_OP_OMAPSETHEADER:
+       case CEPH_OSD_OP_OMAPCLEAR:
+       case CEPH_OSD_OP_OMAPRMKEYS:
+       case CEPH_OSD_OP_OMAP_CMP:
+       case CEPH_OSD_OP_CLONERANGE:
+       case CEPH_OSD_OP_ASSERT_SRC_VERSION:
+       case CEPH_OSD_OP_SRC_CMPXATTR:
+       case CEPH_OSD_OP_GETXATTRS:
+       case CEPH_OSD_OP_SETXATTRS:
+       case CEPH_OSD_OP_RESETXATTRS:
+       case CEPH_OSD_OP_RMXATTR:
+       case CEPH_OSD_OP_PULL:
+       case CEPH_OSD_OP_PUSH:
+       case CEPH_OSD_OP_BALANCEREADS:
+       case CEPH_OSD_OP_UNBALANCEREADS:
+       case CEPH_OSD_OP_SCRUB:
+       case CEPH_OSD_OP_SCRUB_RESERVE:
+       case CEPH_OSD_OP_SCRUB_UNRESERVE:
+       case CEPH_OSD_OP_SCRUB_STOP:
+       case CEPH_OSD_OP_SCRUB_MAP:
+       case CEPH_OSD_OP_WRLOCK:
+       case CEPH_OSD_OP_WRUNLOCK:
+       case CEPH_OSD_OP_RDLOCK:
+       case CEPH_OSD_OP_RDUNLOCK:
+       case CEPH_OSD_OP_UPLOCK:
+       case CEPH_OSD_OP_DNLOCK:
+       case CEPH_OSD_OP_PGLS:
+       case CEPH_OSD_OP_PGLS_FILTER:
+               pr_err("unsupported osd opcode %s\n",
+                       ceph_osd_op_name(dst->op));
+               WARN_ON(1);
+               break;
        }
        dst->payload_len = cpu_to_le32(src->payload_len);
 }