Commit 864e9197f10c77053bbaf12932f5b200bb4ed3c5
Committed by
Ilya Dryomov
1 parent
d74b50bed0
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
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 |