Commit 864e9197f10c77053bbaf12932f5b200bb4ed3c5

Authored by Yan, Zheng
Committed by Ilya Dryomov
1 parent d74b50bed0

libceph: add CREATE osd operation support

Add CEPH_OSD_OP_CREATE support.  Also change libceph to not treat
CEPH_OSD_OP_DELETE as an extent op and add an assert to that end.

Signed-off-by: Yan, Zheng <zyan@redhat.com>
Reviewed-by: Ilya Dryomov <idryomov@redhat.com>

Showing 1 changed file with 22 additions and 20 deletions Side-by-side Diff

net/ceph/osd_client.c
... ... @@ -480,8 +480,7 @@
480 480 size_t payload_len = 0;
481 481  
482 482 BUG_ON(opcode != CEPH_OSD_OP_READ && opcode != CEPH_OSD_OP_WRITE &&
483   - opcode != CEPH_OSD_OP_DELETE && opcode != CEPH_OSD_OP_ZERO &&
484   - opcode != CEPH_OSD_OP_TRUNCATE);
  483 + opcode != CEPH_OSD_OP_ZERO && opcode != CEPH_OSD_OP_TRUNCATE);
485 484  
486 485 op->extent.offset = offset;
487 486 op->extent.length = length;
... ... @@ -663,7 +662,6 @@
663 662 case CEPH_OSD_OP_READ:
664 663 case CEPH_OSD_OP_WRITE:
665 664 case CEPH_OSD_OP_ZERO:
666   - case CEPH_OSD_OP_DELETE:
667 665 case CEPH_OSD_OP_TRUNCATE:
668 666 if (src->op == CEPH_OSD_OP_WRITE)
669 667 request_data_len = src->extent.length;
... ... @@ -723,6 +721,9 @@
723 721 ceph_osdc_msg_data_add(req->r_request, osd_data);
724 722 request_data_len = osd_data->pagelist->length;
725 723 break;
  724 + case CEPH_OSD_OP_CREATE:
  725 + case CEPH_OSD_OP_DELETE:
  726 + break;
726 727 default:
727 728 pr_err("unsupported osd opcode %s\n",
728 729 ceph_osd_op_name(src->op));
729 730  
... ... @@ -763,13 +764,11 @@
763 764 u64 objnum = 0;
764 765 u64 objoff = 0;
765 766 u64 objlen = 0;
766   - u32 object_size;
767   - u64 object_base;
768 767 int r;
769 768  
770 769 BUG_ON(opcode != CEPH_OSD_OP_READ && opcode != CEPH_OSD_OP_WRITE &&
771   - opcode != CEPH_OSD_OP_DELETE && opcode != CEPH_OSD_OP_ZERO &&
772   - opcode != CEPH_OSD_OP_TRUNCATE);
  770 + opcode != CEPH_OSD_OP_ZERO && opcode != CEPH_OSD_OP_TRUNCATE &&
  771 + opcode != CEPH_OSD_OP_CREATE && opcode != CEPH_OSD_OP_DELETE);
773 772  
774 773 req = ceph_osdc_alloc_request(osdc, snapc, num_ops, use_mempool,
775 774 GFP_NOFS);
776 775  
777 776  
... ... @@ -785,21 +784,24 @@
785 784 return ERR_PTR(r);
786 785 }
787 786  
788   - object_size = le32_to_cpu(layout->fl_object_size);
789   - object_base = off - objoff;
790   - if (!(truncate_seq == 1 && truncate_size == -1ULL)) {
791   - if (truncate_size <= object_base) {
792   - truncate_size = 0;
793   - } else {
794   - truncate_size -= object_base;
795   - if (truncate_size > object_size)
796   - truncate_size = object_size;
  787 + if (opcode == CEPH_OSD_OP_CREATE || opcode == CEPH_OSD_OP_DELETE) {
  788 + osd_req_op_init(req, 0, opcode);
  789 + } else {
  790 + u32 object_size = le32_to_cpu(layout->fl_object_size);
  791 + u32 object_base = off - objoff;
  792 + if (!(truncate_seq == 1 && truncate_size == -1ULL)) {
  793 + if (truncate_size <= object_base) {
  794 + truncate_size = 0;
  795 + } else {
  796 + truncate_size -= object_base;
  797 + if (truncate_size > object_size)
  798 + truncate_size = object_size;
  799 + }
797 800 }
798   - }
799 801  
800   - osd_req_op_extent_init(req, 0, opcode, objoff, objlen,
801   - truncate_size, truncate_seq);
802   -
  802 + osd_req_op_extent_init(req, 0, opcode, objoff, objlen,
  803 + truncate_size, truncate_seq);
  804 + }
803 805 /*
804 806 * A second op in the ops array means the caller wants to
805 807 * also issue a include a 'startsync' command so that the