aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-10-16 15:47:02 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-10-16 15:47:02 -0400
commit59bcce121691da06c6b027088d38b76ba893e0cb (patch)
tree6b642eed0deb0aff9c5ffcfd6210a80da056bf92 /net
parenta4c4c49a611321d1b10379f72f1267802437fc07 (diff)
parente30b7577bf1d338ca8a273bd2f881de5a41572b7 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
Pull Ceph fixes from Sage Weil: "Just two small items from Ilya: The first patch fixes the RBD readahead to grab full objects. The second fixes the write ops to prevent undue promotion when a cache tier is configured on the server side" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: rbd: use writefull op for object size writes rbd: set max_sectors explicitly
Diffstat (limited to 'net')
-rw-r--r--net/ceph/osd_client.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index 80b94e37c94a..f79ccac6699f 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -285,6 +285,7 @@ static void osd_req_op_data_release(struct ceph_osd_request *osd_req,
285 switch (op->op) { 285 switch (op->op) {
286 case CEPH_OSD_OP_READ: 286 case CEPH_OSD_OP_READ:
287 case CEPH_OSD_OP_WRITE: 287 case CEPH_OSD_OP_WRITE:
288 case CEPH_OSD_OP_WRITEFULL:
288 ceph_osd_data_release(&op->extent.osd_data); 289 ceph_osd_data_release(&op->extent.osd_data);
289 break; 290 break;
290 case CEPH_OSD_OP_CALL: 291 case CEPH_OSD_OP_CALL:
@@ -485,13 +486,14 @@ void osd_req_op_extent_init(struct ceph_osd_request *osd_req,
485 size_t payload_len = 0; 486 size_t payload_len = 0;
486 487
487 BUG_ON(opcode != CEPH_OSD_OP_READ && opcode != CEPH_OSD_OP_WRITE && 488 BUG_ON(opcode != CEPH_OSD_OP_READ && opcode != CEPH_OSD_OP_WRITE &&
488 opcode != CEPH_OSD_OP_ZERO && opcode != CEPH_OSD_OP_TRUNCATE); 489 opcode != CEPH_OSD_OP_WRITEFULL && opcode != CEPH_OSD_OP_ZERO &&
490 opcode != CEPH_OSD_OP_TRUNCATE);
489 491
490 op->extent.offset = offset; 492 op->extent.offset = offset;
491 op->extent.length = length; 493 op->extent.length = length;
492 op->extent.truncate_size = truncate_size; 494 op->extent.truncate_size = truncate_size;
493 op->extent.truncate_seq = truncate_seq; 495 op->extent.truncate_seq = truncate_seq;
494 if (opcode == CEPH_OSD_OP_WRITE) 496 if (opcode == CEPH_OSD_OP_WRITE || opcode == CEPH_OSD_OP_WRITEFULL)
495 payload_len += length; 497 payload_len += length;
496 498
497 op->payload_len = payload_len; 499 op->payload_len = payload_len;
@@ -670,9 +672,11 @@ static u64 osd_req_encode_op(struct ceph_osd_request *req,
670 break; 672 break;
671 case CEPH_OSD_OP_READ: 673 case CEPH_OSD_OP_READ:
672 case CEPH_OSD_OP_WRITE: 674 case CEPH_OSD_OP_WRITE:
675 case CEPH_OSD_OP_WRITEFULL:
673 case CEPH_OSD_OP_ZERO: 676 case CEPH_OSD_OP_ZERO:
674 case CEPH_OSD_OP_TRUNCATE: 677 case CEPH_OSD_OP_TRUNCATE:
675 if (src->op == CEPH_OSD_OP_WRITE) 678 if (src->op == CEPH_OSD_OP_WRITE ||
679 src->op == CEPH_OSD_OP_WRITEFULL)
676 request_data_len = src->extent.length; 680 request_data_len = src->extent.length;
677 dst->extent.offset = cpu_to_le64(src->extent.offset); 681 dst->extent.offset = cpu_to_le64(src->extent.offset);
678 dst->extent.length = cpu_to_le64(src->extent.length); 682 dst->extent.length = cpu_to_le64(src->extent.length);
@@ -681,7 +685,8 @@ static u64 osd_req_encode_op(struct ceph_osd_request *req,
681 dst->extent.truncate_seq = 685 dst->extent.truncate_seq =
682 cpu_to_le32(src->extent.truncate_seq); 686 cpu_to_le32(src->extent.truncate_seq);
683 osd_data = &src->extent.osd_data; 687 osd_data = &src->extent.osd_data;
684 if (src->op == CEPH_OSD_OP_WRITE) 688 if (src->op == CEPH_OSD_OP_WRITE ||
689 src->op == CEPH_OSD_OP_WRITEFULL)
685 ceph_osdc_msg_data_add(req->r_request, osd_data); 690 ceph_osdc_msg_data_add(req->r_request, osd_data);
686 else 691 else
687 ceph_osdc_msg_data_add(req->r_reply, osd_data); 692 ceph_osdc_msg_data_add(req->r_reply, osd_data);