Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+17 -6
+8 -2
drivers/block/rbd.c
··· 1863 1863 rbd_osd_read_callback(obj_request); 1864 1864 break; 1865 1865 case CEPH_OSD_OP_SETALLOCHINT: 1866 - rbd_assert(osd_req->r_ops[1].op == CEPH_OSD_OP_WRITE); 1866 + rbd_assert(osd_req->r_ops[1].op == CEPH_OSD_OP_WRITE || 1867 + osd_req->r_ops[1].op == CEPH_OSD_OP_WRITEFULL); 1867 1868 /* fall through */ 1868 1869 case CEPH_OSD_OP_WRITE: 1870 + case CEPH_OSD_OP_WRITEFULL: 1869 1871 rbd_osd_write_callback(obj_request); 1870 1872 break; 1871 1873 case CEPH_OSD_OP_STAT: ··· 2403 2401 opcode = CEPH_OSD_OP_ZERO; 2404 2402 } 2405 2403 } else if (op_type == OBJ_OP_WRITE) { 2406 - opcode = CEPH_OSD_OP_WRITE; 2404 + if (!offset && length == object_size) 2405 + opcode = CEPH_OSD_OP_WRITEFULL; 2406 + else 2407 + opcode = CEPH_OSD_OP_WRITE; 2407 2408 osd_req_op_alloc_hint_init(osd_request, num_ops, 2408 2409 object_size, object_size); 2409 2410 num_ops++; ··· 3765 3760 /* set io sizes to object size */ 3766 3761 segment_size = rbd_obj_bytes(&rbd_dev->header); 3767 3762 blk_queue_max_hw_sectors(q, segment_size / SECTOR_SIZE); 3763 + q->limits.max_sectors = queue_max_hw_sectors(q); 3768 3764 blk_queue_max_segments(q, segment_size / SECTOR_SIZE); 3769 3765 blk_queue_max_segment_size(q, segment_size); 3770 3766 blk_queue_io_min(q, segment_size);
+9 -4
net/ceph/osd_client.c
··· 285 285 switch (op->op) { 286 286 case CEPH_OSD_OP_READ: 287 287 case CEPH_OSD_OP_WRITE: 288 + case CEPH_OSD_OP_WRITEFULL: 288 289 ceph_osd_data_release(&op->extent.osd_data); 289 290 break; 290 291 case CEPH_OSD_OP_CALL: ··· 486 485 size_t payload_len = 0; 487 486 488 487 BUG_ON(opcode != CEPH_OSD_OP_READ && opcode != CEPH_OSD_OP_WRITE && 489 - opcode != CEPH_OSD_OP_ZERO && opcode != CEPH_OSD_OP_TRUNCATE); 488 + opcode != CEPH_OSD_OP_WRITEFULL && opcode != CEPH_OSD_OP_ZERO && 489 + opcode != CEPH_OSD_OP_TRUNCATE); 490 490 491 491 op->extent.offset = offset; 492 492 op->extent.length = length; 493 493 op->extent.truncate_size = truncate_size; 494 494 op->extent.truncate_seq = truncate_seq; 495 - if (opcode == CEPH_OSD_OP_WRITE) 495 + if (opcode == CEPH_OSD_OP_WRITE || opcode == CEPH_OSD_OP_WRITEFULL) 496 496 payload_len += length; 497 497 498 498 op->payload_len = payload_len; ··· 672 670 break; 673 671 case CEPH_OSD_OP_READ: 674 672 case CEPH_OSD_OP_WRITE: 673 + case CEPH_OSD_OP_WRITEFULL: 675 674 case CEPH_OSD_OP_ZERO: 676 675 case CEPH_OSD_OP_TRUNCATE: 677 - if (src->op == CEPH_OSD_OP_WRITE) 676 + if (src->op == CEPH_OSD_OP_WRITE || 677 + src->op == CEPH_OSD_OP_WRITEFULL) 678 678 request_data_len = src->extent.length; 679 679 dst->extent.offset = cpu_to_le64(src->extent.offset); 680 680 dst->extent.length = cpu_to_le64(src->extent.length); ··· 685 681 dst->extent.truncate_seq = 686 682 cpu_to_le32(src->extent.truncate_seq); 687 683 osd_data = &src->extent.osd_data; 688 - if (src->op == CEPH_OSD_OP_WRITE) 684 + if (src->op == CEPH_OSD_OP_WRITE || 685 + src->op == CEPH_OSD_OP_WRITEFULL) 689 686 ceph_osdc_msg_data_add(req->r_request, osd_data); 690 687 else 691 688 ceph_osdc_msg_data_add(req->r_reply, osd_data);