1 2 /* 3 rbd.c -- Export ceph rados objects as a Linux block device 4 5 6 based on drivers/block/osdblk.c: 7 8 Copyright 2009 Red Hat, Inc. 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; see the file COPYING. If not, write to 21 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 22 23 24 25 For usage instructions, please refer to: 26 27 Documentation/ABI/testing/sysfs-bus-rbd 28 29 */ 30 31 #include <linux/ceph/libceph.h> 32 #include <linux/ceph/osd_client.h> 33 #include <linux/ceph/mon_client.h> 34 #include <linux/ceph/cls_lock_client.h> 35 #include <linux/ceph/striper.h> 36 #include <linux/ceph/decode.h> 37 #include <linux/parser.h> 38 #include <linux/bsearch.h> 39 40 #include <linux/kernel.h> 41 #include <linux/device.h> 42 #include <linux/module.h> 43 #include <linux/blk-mq.h> 44 #include <linux/fs.h> 45 #include <linux/blkdev.h> 46 #include <linux/slab.h> 47 #include <linux/idr.h> 48 #include <linux/workqueue.h> 49 50 #include "rbd_types.h" 51 52 #define RBD_DEBUG /* Activate rbd_assert() calls */ 53 54 /* 55 * Increment the given counter and return its updated value. 56 * If the counter is already 0 it will not be incremented. 57 * If the counter is already at its maximum value returns 58 * -EINVAL without updating it. 59 */ 60 static int atomic_inc_return_safe(atomic_t *v) 61 { 62 unsigned int counter; 63 64 counter = (unsigned int)atomic_fetch_add_unless(v, 1, 0); 65 if (counter <= (unsigned int)INT_MAX) 66 return (int)counter; 67 68 atomic_dec(v); 69 70 return -EINVAL; 71 } 72 73 /* Decrement the counter. Return the resulting value, or -EINVAL */ 74 static int atomic_dec_return_safe(atomic_t *v) 75 { 76 int counter; 77 78 counter = atomic_dec_return(v); 79 if (counter >= 0) 80 return counter; 81 82 atomic_inc(v); 83 84 return -EINVAL; 85 } 86 87 #define RBD_DRV_NAME "rbd" 88 89 #define RBD_MINORS_PER_MAJOR 256 90 #define RBD_SINGLE_MAJOR_PART_SHIFT 4 91 92 #define RBD_MAX_PARENT_CHAIN_LEN 16 93 94 #define RBD_SNAP_DEV_NAME_PREFIX "snap_" 95 #define RBD_MAX_SNAP_NAME_LEN \ 96 (NAME_MAX - (sizeof (RBD_SNAP_DEV_NAME_PREFIX) - 1)) 97 98 #define RBD_MAX_SNAP_COUNT 510 /* allows max snapc to fit in 4KB */ 99 100 #define RBD_SNAP_HEAD_NAME "-" 101 102 #define BAD_SNAP_INDEX U32_MAX /* invalid index into snap array */ 103 104 /* This allows a single page to hold an image name sent by OSD */ 105 #define RBD_IMAGE_NAME_LEN_MAX (PAGE_SIZE - sizeof (__le32) - 1) 106 #define RBD_IMAGE_ID_LEN_MAX 64 107 108 #define RBD_OBJ_PREFIX_LEN_MAX 64 109 110 #define RBD_NOTIFY_TIMEOUT 5 /* seconds */ 111 #define RBD_RETRY_DELAY msecs_to_jiffies(1000) 112 113 /* Feature bits */ 114 115 #define RBD_FEATURE_LAYERING (1ULL<<0) 116 #define RBD_FEATURE_STRIPINGV2 (1ULL<<1) 117 #define RBD_FEATURE_EXCLUSIVE_LOCK (1ULL<<2) 118 #define RBD_FEATURE_OBJECT_MAP (1ULL<<3) 119 #define RBD_FEATURE_FAST_DIFF (1ULL<<4) 120 #define RBD_FEATURE_DEEP_FLATTEN (1ULL<<5) 121 #define RBD_FEATURE_DATA_POOL (1ULL<<7) 122 #define RBD_FEATURE_OPERATIONS (1ULL<<8) 123 124 #define RBD_FEATURES_ALL (RBD_FEATURE_LAYERING | \ 125 RBD_FEATURE_STRIPINGV2 | \ 126 RBD_FEATURE_EXCLUSIVE_LOCK | \ 127 RBD_FEATURE_OBJECT_MAP | \ 128 RBD_FEATURE_FAST_DIFF | \ 129 RBD_FEATURE_DEEP_FLATTEN | \ 130 RBD_FEATURE_DATA_POOL | \ 131 RBD_FEATURE_OPERATIONS) 132 133 /* Features supported by this (client software) implementation. */ 134 135 #define RBD_FEATURES_SUPPORTED (RBD_FEATURES_ALL) 136 137 /* 138 * An RBD device name will be "rbd#", where the "rbd" comes from 139 * RBD_DRV_NAME above, and # is a unique integer identifier. 140 */ 141 #define DEV_NAME_LEN 32 142 143 /* 144 * block device image metadata (in-memory version) 145 */ 146 struct rbd_image_header { 147 /* These six fields never change for a given rbd image */ 148 char *object_prefix; 149 __u8 obj_order; 150 u64 stripe_unit; 151 u64 stripe_count; 152 s64 data_pool_id; 153 u64 features; /* Might be changeable someday? */ 154 155 /* The remaining fields need to be updated occasionally */ 156 u64 image_size; 157 struct ceph_snap_context *snapc; 158 char *snap_names; /* format 1 only */ 159 u64 *snap_sizes; /* format 1 only */ 160 }; 161 162 /* 163 * An rbd image specification. 164 * 165 * The tuple (pool_id, image_id, snap_id) is sufficient to uniquely 166 * identify an image. Each rbd_dev structure includes a pointer to 167 * an rbd_spec structure that encapsulates this identity. 168 * 169 * Each of the id's in an rbd_spec has an associated name. For a 170 * user-mapped image, the names are supplied and the id's associated 171 * with them are looked up. For a layered image, a parent image is 172 * defined by the tuple, and the names are looked up. 173 * 174 * An rbd_dev structure contains a parent_spec pointer which is 175 * non-null if the image it represents is a child in a layered 176 * image. This pointer will refer to the rbd_spec structure used 177 * by the parent rbd_dev for its own identity (i.e., the structure 178 * is shared between the parent and child). 179 * 180 * Since these structures are populated once, during the discovery 181 * phase of image construction, they are effectively immutable so 182 * we make no effort to synchronize access to them. 183 * 184 * Note that code herein does not assume the image name is known (it 185 * could be a null pointer). 186 */ 187 struct rbd_spec { 188 u64 pool_id; 189 const char *pool_name; 190 const char *pool_ns; /* NULL if default, never "" */ 191 192 const char *image_id; 193 const char *image_name; 194 195 u64 snap_id; 196 const char *snap_name; 197 198 struct kref kref; 199 }; 200 201 /* 202 * an instance of the client. multiple devices may share an rbd client. 203 */ 204 struct rbd_client { 205 struct ceph_client *client; 206 struct kref kref; 207 struct list_head node; 208 }; 209 210 struct pending_result { 211 int result; /* first nonzero result */ 212 int num_pending; 213 }; 214 215 struct rbd_img_request; 216 217 enum obj_request_type { 218 OBJ_REQUEST_NODATA = 1, 219 OBJ_REQUEST_BIO, /* pointer into provided bio (list) */ 220 OBJ_REQUEST_BVECS, /* pointer into provided bio_vec array */ 221 OBJ_REQUEST_OWN_BVECS, /* private bio_vec array, doesn't own pages */ 222 }; 223 224 enum obj_operation_type { 225 OBJ_OP_READ = 1, 226 OBJ_OP_WRITE, 227 OBJ_OP_DISCARD, 228 OBJ_OP_ZEROOUT, 229 }; 230 231 #define RBD_OBJ_FLAG_DELETION (1U << 0) 232 #define RBD_OBJ_FLAG_COPYUP_ENABLED (1U << 1) 233 #define RBD_OBJ_FLAG_COPYUP_ZEROS (1U << 2) 234 #define RBD_OBJ_FLAG_MAY_EXIST (1U << 3) 235 #define RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT (1U << 4) 236 237 enum rbd_obj_read_state { 238 RBD_OBJ_READ_START = 1, 239 RBD_OBJ_READ_OBJECT, 240 RBD_OBJ_READ_PARENT, 241 }; 242 243 /* 244 * Writes go through the following state machine to deal with 245 * layering: 246 * 247 * . . . . . RBD_OBJ_WRITE_GUARD. . . . . . . . . . . . . . 248 * . | . 249 * . v . 250 * . RBD_OBJ_WRITE_READ_FROM_PARENT. . . . 251 * . | . . 252 * . v v (deep-copyup . 253 * (image . RBD_OBJ_WRITE_COPYUP_EMPTY_SNAPC . not needed) . 254 * flattened) v | . . 255 * . v . . 256 * . . . .RBD_OBJ_WRITE_COPYUP_OPS. . . . . (copyup . 257 * | not needed) v 258 * v . 259 * done . . . . . . . . . . . . . . . . . . 260 * ^ 261 * | 262 * RBD_OBJ_WRITE_FLAT 263 * 264 * Writes start in RBD_OBJ_WRITE_GUARD or _FLAT, depending on whether 265 * assert_exists guard is needed or not (in some cases it's not needed 266 * even if there is a parent). 267 */ 268 enum rbd_obj_write_state { 269 RBD_OBJ_WRITE_START = 1, 270 RBD_OBJ_WRITE_PRE_OBJECT_MAP, 271 RBD_OBJ_WRITE_OBJECT, 272 __RBD_OBJ_WRITE_COPYUP, 273 RBD_OBJ_WRITE_COPYUP, 274 RBD_OBJ_WRITE_POST_OBJECT_MAP, 275 }; 276 277 enum rbd_obj_copyup_state { 278 RBD_OBJ_COPYUP_START = 1, 279 RBD_OBJ_COPYUP_READ_PARENT, 280 __RBD_OBJ_COPYUP_OBJECT_MAPS, 281 RBD_OBJ_COPYUP_OBJECT_MAPS, 282 __RBD_OBJ_COPYUP_WRITE_OBJECT, 283 RBD_OBJ_COPYUP_WRITE_OBJECT, 284 }; 285 286 struct rbd_obj_request { 287 struct ceph_object_extent ex; 288 unsigned int flags; /* RBD_OBJ_FLAG_* */ 289 union { 290 enum rbd_obj_read_state read_state; /* for reads */ 291 enum rbd_obj_write_state write_state; /* for writes */ 292 }; 293 294 struct rbd_img_request *img_request; 295 struct ceph_file_extent *img_extents; 296 u32 num_img_extents; 297 298 union { 299 struct ceph_bio_iter bio_pos; 300 struct { 301 struct ceph_bvec_iter bvec_pos; 302 u32 bvec_count; 303 u32 bvec_idx; 304 }; 305 }; 306 307 enum rbd_obj_copyup_state copyup_state; 308 struct bio_vec *copyup_bvecs; 309 u32 copyup_bvec_count; 310 311 struct list_head osd_reqs; /* w/ r_private_item */ 312 313 struct mutex state_mutex; 314 struct pending_result pending; 315 struct kref kref; 316 }; 317 318 enum img_req_flags { 319 IMG_REQ_CHILD, /* initiator: block = 0, child image = 1 */ 320 IMG_REQ_LAYERED, /* ENOENT handling: normal = 0, layered = 1 */ 321 }; 322 323 enum rbd_img_state { 324 RBD_IMG_START = 1, 325 RBD_IMG_EXCLUSIVE_LOCK, 326 __RBD_IMG_OBJECT_REQUESTS, 327 RBD_IMG_OBJECT_REQUESTS, 328 }; 329 330 struct rbd_img_request { 331 struct rbd_device *rbd_dev; 332 enum obj_operation_type op_type; 333 enum obj_request_type data_type; 334 unsigned long flags; 335 enum rbd_img_state state; 336 union { 337 u64 snap_id; /* for reads */ 338 struct ceph_snap_context *snapc; /* for writes */ 339 }; 340 union { 341 struct request *rq; /* block request */ 342 struct rbd_obj_request *obj_request; /* obj req initiator */ 343 }; 344 345 struct list_head lock_item; 346 struct list_head object_extents; /* obj_req.ex structs */ 347 348 struct mutex state_mutex; 349 struct pending_result pending; 350 struct work_struct work; 351 int work_result; 352 struct kref kref; 353 }; 354 355 #define for_each_obj_request(ireq, oreq) \ 356 list_for_each_entry(oreq, &(ireq)->object_extents, ex.oe_item) 357 #define for_each_obj_request_safe(ireq, oreq, n) \ 358 list_for_each_entry_safe(oreq, n, &(ireq)->object_extents, ex.oe_item) 359 360 enum rbd_watch_state { 361 RBD_WATCH_STATE_UNREGISTERED, 362 RBD_WATCH_STATE_REGISTERED, 363 RBD_WATCH_STATE_ERROR, 364 }; 365 366 enum rbd_lock_state { 367 RBD_LOCK_STATE_UNLOCKED, 368 RBD_LOCK_STATE_LOCKED, 369 RBD_LOCK_STATE_RELEASING, 370 }; 371 372 /* WatchNotify::ClientId */ 373 struct rbd_client_id { 374 u64 gid; 375 u64 handle; 376 }; 377 378 struct rbd_mapping { 379 u64 size; 380 u64 features; 381 }; 382 383 /* 384 * a single device 385 */ 386 struct rbd_device { 387 int dev_id; /* blkdev unique id */ 388 389 int major; /* blkdev assigned major */ 390 int minor; 391 struct gendisk *disk; /* blkdev's gendisk and rq */ 392 393 u32 image_format; /* Either 1 or 2 */ 394 struct rbd_client *rbd_client; 395 396 char name[DEV_NAME_LEN]; /* blkdev name, e.g. rbd3 */ 397 398 spinlock_t lock; /* queue, flags, open_count */ 399 400 struct rbd_image_header header; 401 unsigned long flags; /* possibly lock protected */ 402 struct rbd_spec *spec; 403 struct rbd_options *opts; 404 char *config_info; /* add{,_single_major} string */ 405 406 struct ceph_object_id header_oid; 407 struct ceph_object_locator header_oloc; 408 409 struct ceph_file_layout layout; /* used for all rbd requests */ 410 411 struct mutex watch_mutex; 412 enum rbd_watch_state watch_state; 413 struct ceph_osd_linger_request *watch_handle; 414 u64 watch_cookie; 415 struct delayed_work watch_dwork; 416 417 struct rw_semaphore lock_rwsem; 418 enum rbd_lock_state lock_state; 419 char lock_cookie[32]; 420 struct rbd_client_id owner_cid; 421 struct work_struct acquired_lock_work; 422 struct work_struct released_lock_work; 423 struct delayed_work lock_dwork; 424 struct work_struct unlock_work; 425 spinlock_t lock_lists_lock; 426 struct list_head acquiring_list; 427 struct list_head running_list; 428 struct completion acquire_wait; 429 int acquire_err; 430 struct completion releasing_wait; 431 432 spinlock_t object_map_lock; 433 u8 *object_map; 434 u64 object_map_size; /* in objects */ 435 u64 object_map_flags; 436 437 struct workqueue_struct *task_wq; 438 439 struct rbd_spec *parent_spec; 440 u64 parent_overlap; 441 atomic_t parent_ref; 442 struct rbd_device *parent; 443 444 /* Block layer tags. */ 445 struct blk_mq_tag_set tag_set; 446 447 /* protects updating the header */ 448 struct rw_semaphore header_rwsem; 449 450 struct rbd_mapping mapping; 451 452 struct list_head node; 453 454 /* sysfs related */ 455 struct device dev; 456 unsigned long open_count; /* protected by lock */ 457 }; 458 459 /* 460 * Flag bits for rbd_dev->flags: 461 * - REMOVING (which is coupled with rbd_dev->open_count) is protected 462 * by rbd_dev->lock 463 */ 464 enum rbd_dev_flags { 465 RBD_DEV_FLAG_EXISTS, /* mapped snapshot has not been deleted */ 466 RBD_DEV_FLAG_REMOVING, /* this mapping is being removed */ 467 }; 468 469 static DEFINE_MUTEX(client_mutex); /* Serialize client creation */ 470 471 static LIST_HEAD(rbd_dev_list); /* devices */ 472 static DEFINE_SPINLOCK(rbd_dev_list_lock); 473 474 static LIST_HEAD(rbd_client_list); /* clients */ 475 static DEFINE_SPINLOCK(rbd_client_list_lock); 476 477 /* Slab caches for frequently-allocated structures */ 478 479 static struct kmem_cache *rbd_img_request_cache; 480 static struct kmem_cache *rbd_obj_request_cache; 481 482 static int rbd_major; 483 static DEFINE_IDA(rbd_dev_id_ida); 484 485 static struct workqueue_struct *rbd_wq; 486 487 static struct ceph_snap_context rbd_empty_snapc = { 488 .nref = REFCOUNT_INIT(1), 489 }; 490 491 /* 492 * single-major requires >= 0.75 version of userspace rbd utility. 493 */ 494 static bool single_major = true; 495 module_param(single_major, bool, 0444); 496 MODULE_PARM_DESC(single_major, "Use a single major number for all rbd devices (default: true)"); 497 498 static ssize_t add_store(struct bus_type *bus, const char *buf, size_t count); 499 static ssize_t remove_store(struct bus_type *bus, const char *buf, 500 size_t count); 501 static ssize_t add_single_major_store(struct bus_type *bus, const char *buf, 502 size_t count); 503 static ssize_t remove_single_major_store(struct bus_type *bus, const char *buf, 504 size_t count); 505 static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth); 506 507 static int rbd_dev_id_to_minor(int dev_id) 508 { 509 return dev_id << RBD_SINGLE_MAJOR_PART_SHIFT; 510 } 511 512 static int minor_to_rbd_dev_id(int minor) 513 { 514 return minor >> RBD_SINGLE_MAJOR_PART_SHIFT; 515 } 516 517 static bool __rbd_is_lock_owner(struct rbd_device *rbd_dev) 518 { 519 lockdep_assert_held(&rbd_dev->lock_rwsem); 520 521 return rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED || 522 rbd_dev->lock_state == RBD_LOCK_STATE_RELEASING; 523 } 524 525 static bool rbd_is_lock_owner(struct rbd_device *rbd_dev) 526 { 527 bool is_lock_owner; 528 529 down_read(&rbd_dev->lock_rwsem); 530 is_lock_owner = __rbd_is_lock_owner(rbd_dev); 531 up_read(&rbd_dev->lock_rwsem); 532 return is_lock_owner; 533 } 534 535 static ssize_t supported_features_show(struct bus_type *bus, char *buf) 536 { 537 return sprintf(buf, "0x%llx\n", RBD_FEATURES_SUPPORTED); 538 } 539 540 static BUS_ATTR_WO(add); 541 static BUS_ATTR_WO(remove); 542 static BUS_ATTR_WO(add_single_major); 543 static BUS_ATTR_WO(remove_single_major); 544 static BUS_ATTR_RO(supported_features); 545 546 static struct attribute *rbd_bus_attrs[] = { 547 &bus_attr_add.attr, 548 &bus_attr_remove.attr, 549 &bus_attr_add_single_major.attr, 550 &bus_attr_remove_single_major.attr, 551 &bus_attr_supported_features.attr, 552 NULL, 553 }; 554 555 static umode_t rbd_bus_is_visible(struct kobject *kobj, 556 struct attribute *attr, int index) 557 { 558 if (!single_major && 559 (attr == &bus_attr_add_single_major.attr || 560 attr == &bus_attr_remove_single_major.attr)) 561 return 0; 562 563 return attr->mode; 564 } 565 566 static const struct attribute_group rbd_bus_group = { 567 .attrs = rbd_bus_attrs, 568 .is_visible = rbd_bus_is_visible, 569 }; 570 __ATTRIBUTE_GROUPS(rbd_bus); 571 572 static struct bus_type rbd_bus_type = { 573 .name = "rbd", 574 .bus_groups = rbd_bus_groups, 575 }; 576 577 static void rbd_root_dev_release(struct device *dev) 578 { 579 } 580 581 static struct device rbd_root_dev = { 582 .init_name = "rbd", 583 .release = rbd_root_dev_release, 584 }; 585 586 static __printf(2, 3) 587 void rbd_warn(struct rbd_device *rbd_dev, const char *fmt, ...) 588 { 589 struct va_format vaf; 590 va_list args; 591 592 va_start(args, fmt); 593 vaf.fmt = fmt; 594 vaf.va = &args; 595 596 if (!rbd_dev) 597 printk(KERN_WARNING "%s: %pV\n", RBD_DRV_NAME, &vaf); 598 else if (rbd_dev->disk) 599 printk(KERN_WARNING "%s: %s: %pV\n", 600 RBD_DRV_NAME, rbd_dev->disk->disk_name, &vaf); 601 else if (rbd_dev->spec && rbd_dev->spec->image_name) 602 printk(KERN_WARNING "%s: image %s: %pV\n", 603 RBD_DRV_NAME, rbd_dev->spec->image_name, &vaf); 604 else if (rbd_dev->spec && rbd_dev->spec->image_id) 605 printk(KERN_WARNING "%s: id %s: %pV\n", 606 RBD_DRV_NAME, rbd_dev->spec->image_id, &vaf); 607 else /* punt */ 608 printk(KERN_WARNING "%s: rbd_dev %p: %pV\n", 609 RBD_DRV_NAME, rbd_dev, &vaf); 610 va_end(args); 611 } 612 613 #ifdef RBD_DEBUG 614 #define rbd_assert(expr) \ 615 if (unlikely(!(expr))) { \ 616 printk(KERN_ERR "\nAssertion failure in %s() " \ 617 "at line %d:\n\n" \ 618 "\trbd_assert(%s);\n\n", \ 619 __func__, __LINE__, #expr); \ 620 BUG(); \ 621 } 622 #else /* !RBD_DEBUG */ 623 # define rbd_assert(expr) ((void) 0) 624 #endif /* !RBD_DEBUG */ 625 626 static void rbd_dev_remove_parent(struct rbd_device *rbd_dev); 627 628 static int rbd_dev_refresh(struct rbd_device *rbd_dev); 629 static int rbd_dev_v2_header_onetime(struct rbd_device *rbd_dev); 630 static int rbd_dev_header_info(struct rbd_device *rbd_dev); 631 static int rbd_dev_v2_parent_info(struct rbd_device *rbd_dev); 632 static const char *rbd_dev_v2_snap_name(struct rbd_device *rbd_dev, 633 u64 snap_id); 634 static int _rbd_dev_v2_snap_size(struct rbd_device *rbd_dev, u64 snap_id, 635 u8 *order, u64 *snap_size); 636 static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id, 637 u64 *snap_features); 638 static int rbd_dev_v2_get_flags(struct rbd_device *rbd_dev); 639 640 static void rbd_obj_handle_request(struct rbd_obj_request *obj_req, int result); 641 static void rbd_img_handle_request(struct rbd_img_request *img_req, int result); 642 643 /* 644 * Return true if nothing else is pending. 645 */ 646 static bool pending_result_dec(struct pending_result *pending, int *result) 647 { 648 rbd_assert(pending->num_pending > 0); 649 650 if (*result && !pending->result) 651 pending->result = *result; 652 if (--pending->num_pending) 653 return false; 654 655 *result = pending->result; 656 return true; 657 } 658 659 static int rbd_open(struct block_device *bdev, fmode_t mode) 660 { 661 struct rbd_device *rbd_dev = bdev->bd_disk->private_data; 662 bool removing = false; 663 664 spin_lock_irq(&rbd_dev->lock); 665 if (test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags)) 666 removing = true; 667 else 668 rbd_dev->open_count++; 669 spin_unlock_irq(&rbd_dev->lock); 670 if (removing) 671 return -ENOENT; 672 673 (void) get_device(&rbd_dev->dev); 674 675 return 0; 676 } 677 678 static void rbd_release(struct gendisk *disk, fmode_t mode) 679 { 680 struct rbd_device *rbd_dev = disk->private_data; 681 unsigned long open_count_before; 682 683 spin_lock_irq(&rbd_dev->lock); 684 open_count_before = rbd_dev->open_count--; 685 spin_unlock_irq(&rbd_dev->lock); 686 rbd_assert(open_count_before > 0); 687 688 put_device(&rbd_dev->dev); 689 } 690 691 static int rbd_ioctl_set_ro(struct rbd_device *rbd_dev, unsigned long arg) 692 { 693 int ro; 694 695 if (get_user(ro, (int __user *)arg)) 696 return -EFAULT; 697 698 /* Snapshots can't be marked read-write */ 699 if (rbd_dev->spec->snap_id != CEPH_NOSNAP && !ro) 700 return -EROFS; 701 702 /* Let blkdev_roset() handle it */ 703 return -ENOTTY; 704 } 705 706 static int rbd_ioctl(struct block_device *bdev, fmode_t mode, 707 unsigned int cmd, unsigned long arg) 708 { 709 struct rbd_device *rbd_dev = bdev->bd_disk->private_data; 710 int ret; 711 712 switch (cmd) { 713 case BLKROSET: 714 ret = rbd_ioctl_set_ro(rbd_dev, arg); 715 break; 716 default: 717 ret = -ENOTTY; 718 } 719 720 return ret; 721 } 722 723 #ifdef CONFIG_COMPAT 724 static int rbd_compat_ioctl(struct block_device *bdev, fmode_t mode, 725 unsigned int cmd, unsigned long arg) 726 { 727 return rbd_ioctl(bdev, mode, cmd, arg); 728 } 729 #endif /* CONFIG_COMPAT */ 730 731 static const struct block_device_operations rbd_bd_ops = { 732 .owner = THIS_MODULE, 733 .open = rbd_open, 734 .release = rbd_release, 735 .ioctl = rbd_ioctl, 736 #ifdef CONFIG_COMPAT 737 .compat_ioctl = rbd_compat_ioctl, 738 #endif 739 }; 740 741 /* 742 * Initialize an rbd client instance. Success or not, this function 743 * consumes ceph_opts. Caller holds client_mutex. 744 */ 745 static struct rbd_client *rbd_client_create(struct ceph_options *ceph_opts) 746 { 747 struct rbd_client *rbdc; 748 int ret = -ENOMEM; 749 750 dout("%s:\n", __func__); 751 rbdc = kmalloc(sizeof(struct rbd_client), GFP_KERNEL); 752 if (!rbdc) 753 goto out_opt; 754 755 kref_init(&rbdc->kref); 756 INIT_LIST_HEAD(&rbdc->node); 757 758 rbdc->client = ceph_create_client(ceph_opts, rbdc); 759 if (IS_ERR(rbdc->client)) 760 goto out_rbdc; 761 ceph_opts = NULL; /* Now rbdc->client is responsible for ceph_opts */ 762 763 ret = ceph_open_session(rbdc->client); 764 if (ret < 0) 765 goto out_client; 766 767 spin_lock(&rbd_client_list_lock); 768 list_add_tail(&rbdc->node, &rbd_client_list); 769 spin_unlock(&rbd_client_list_lock); 770 771 dout("%s: rbdc %p\n", __func__, rbdc); 772 773 return rbdc; 774 out_client: 775 ceph_destroy_client(rbdc->client); 776 out_rbdc: 777 kfree(rbdc); 778 out_opt: 779 if (ceph_opts) 780 ceph_destroy_options(ceph_opts); 781 dout("%s: error %d\n", __func__, ret); 782 783 return ERR_PTR(ret); 784 } 785 786 static struct rbd_client *__rbd_get_client(struct rbd_client *rbdc) 787 { 788 kref_get(&rbdc->kref); 789 790 return rbdc; 791 } 792 793 /* 794 * Find a ceph client with specific addr and configuration. If 795 * found, bump its reference count. 796 */ 797 static struct rbd_client *rbd_client_find(struct ceph_options *ceph_opts) 798 { 799 struct rbd_client *client_node; 800 bool found = false; 801 802 if (ceph_opts->flags & CEPH_OPT_NOSHARE) 803 return NULL; 804 805 spin_lock(&rbd_client_list_lock); 806 list_for_each_entry(client_node, &rbd_client_list, node) { 807 if (!ceph_compare_options(ceph_opts, client_node->client)) { 808 __rbd_get_client(client_node); 809 810 found = true; 811 break; 812 } 813 } 814 spin_unlock(&rbd_client_list_lock); 815 816 return found ? client_node : NULL; 817 } 818 819 /* 820 * (Per device) rbd map options 821 */ 822 enum { 823 Opt_queue_depth, 824 Opt_alloc_size, 825 Opt_lock_timeout, 826 Opt_last_int, 827 /* int args above */ 828 Opt_pool_ns, 829 Opt_last_string, 830 /* string args above */ 831 Opt_read_only, 832 Opt_read_write, 833 Opt_lock_on_read, 834 Opt_exclusive, 835 Opt_notrim, 836 Opt_err 837 }; 838 839 static match_table_t rbd_opts_tokens = { 840 {Opt_queue_depth, "queue_depth=%d"}, 841 {Opt_alloc_size, "alloc_size=%d"}, 842 {Opt_lock_timeout, "lock_timeout=%d"}, 843 /* int args above */ 844 {Opt_pool_ns, "_pool_ns=%s"}, 845 /* string args above */ 846 {Opt_read_only, "read_only"}, 847 {Opt_read_only, "ro"}, /* Alternate spelling */ 848 {Opt_read_write, "read_write"}, 849 {Opt_read_write, "rw"}, /* Alternate spelling */ 850 {Opt_lock_on_read, "lock_on_read"}, 851 {Opt_exclusive, "exclusive"}, 852 {Opt_notrim, "notrim"}, 853 {Opt_err, NULL} 854 }; 855 856 struct rbd_options { 857 int queue_depth; 858 int alloc_size; 859 unsigned long lock_timeout; 860 bool read_only; 861 bool lock_on_read; 862 bool exclusive; 863 bool trim; 864 }; 865 866 #define RBD_QUEUE_DEPTH_DEFAULT BLKDEV_MAX_RQ 867 #define RBD_ALLOC_SIZE_DEFAULT (64 * 1024) 868 #define RBD_LOCK_TIMEOUT_DEFAULT 0 /* no timeout */ 869 #define RBD_READ_ONLY_DEFAULT false 870 #define RBD_LOCK_ON_READ_DEFAULT false 871 #define RBD_EXCLUSIVE_DEFAULT false 872 #define RBD_TRIM_DEFAULT true 873 874 struct parse_rbd_opts_ctx { 875 struct rbd_spec *spec; 876 struct rbd_options *opts; 877 }; 878 879 static int parse_rbd_opts_token(char *c, void *private) 880 { 881 struct parse_rbd_opts_ctx *pctx = private; 882 substring_t argstr[MAX_OPT_ARGS]; 883 int token, intval, ret; 884 885 token = match_token(c, rbd_opts_tokens, argstr); 886 if (token < Opt_last_int) { 887 ret = match_int(&argstr[0], &intval); 888 if (ret < 0) { 889 pr_err("bad option arg (not int) at '%s'\n", c); 890 return ret; 891 } 892 dout("got int token %d val %d\n", token, intval); 893 } else if (token > Opt_last_int && token < Opt_last_string) { 894 dout("got string token %d val %s\n", token, argstr[0].from); 895 } else { 896 dout("got token %d\n", token); 897 } 898 899 switch (token) { 900 case Opt_queue_depth: 901 if (intval < 1) { 902 pr_err("queue_depth out of range\n"); 903 return -EINVAL; 904 } 905 pctx->opts->queue_depth = intval; 906 break; 907 case Opt_alloc_size: 908 if (intval < SECTOR_SIZE) { 909 pr_err("alloc_size out of range\n"); 910 return -EINVAL; 911 } 912 if (!is_power_of_2(intval)) { 913 pr_err("alloc_size must be a power of 2\n"); 914 return -EINVAL; 915 } 916 pctx->opts->alloc_size = intval; 917 break; 918 case Opt_lock_timeout: 919 /* 0 is "wait forever" (i.e. infinite timeout) */ 920 if (intval < 0 || intval > INT_MAX / 1000) { 921 pr_err("lock_timeout out of range\n"); 922 return -EINVAL; 923 } 924 pctx->opts->lock_timeout = msecs_to_jiffies(intval * 1000); 925 break; 926 case Opt_pool_ns: 927 kfree(pctx->spec->pool_ns); 928 pctx->spec->pool_ns = match_strdup(argstr); 929 if (!pctx->spec->pool_ns) 930 return -ENOMEM; 931 break; 932 case Opt_read_only: 933 pctx->opts->read_only = true; 934 break; 935 case Opt_read_write: 936 pctx->opts->read_only = false; 937 break; 938 case Opt_lock_on_read: 939 pctx->opts->lock_on_read = true; 940 break; 941 case Opt_exclusive: 942 pctx->opts->exclusive = true; 943 break; 944 case Opt_notrim: 945 pctx->opts->trim = false; 946 break; 947 default: 948 /* libceph prints "bad option" msg */ 949 return -EINVAL; 950 } 951 952 return 0; 953 } 954 955 static char* obj_op_name(enum obj_operation_type op_type) 956 { 957 switch (op_type) { 958 case OBJ_OP_READ: 959 return "read"; 960 case OBJ_OP_WRITE: 961 return "write"; 962 case OBJ_OP_DISCARD: 963 return "discard"; 964 case OBJ_OP_ZEROOUT: 965 return "zeroout"; 966 default: 967 return "???"; 968 } 969 } 970 971 /* 972 * Destroy ceph client 973 * 974 * Caller must hold rbd_client_list_lock. 975 */ 976 static void rbd_client_release(struct kref *kref) 977 { 978 struct rbd_client *rbdc = container_of(kref, struct rbd_client, kref); 979 980 dout("%s: rbdc %p\n", __func__, rbdc); 981 spin_lock(&rbd_client_list_lock); 982 list_del(&rbdc->node); 983 spin_unlock(&rbd_client_list_lock); 984 985 ceph_destroy_client(rbdc->client); 986 kfree(rbdc); 987 } 988 989 /* 990 * Drop reference to ceph client node. If it's not referenced anymore, release 991 * it. 992 */ 993 static void rbd_put_client(struct rbd_client *rbdc) 994 { 995 if (rbdc) 996 kref_put(&rbdc->kref, rbd_client_release); 997 } 998 999 /* 1000 * Get a ceph client with specific addr and configuration, if one does 1001 * not exist create it. Either way, ceph_opts is consumed by this 1002 * function. 1003 */ 1004 static struct rbd_client *rbd_get_client(struct ceph_options *ceph_opts) 1005 { 1006 struct rbd_client *rbdc; 1007 int ret; 1008 1009 mutex_lock(&client_mutex); 1010 rbdc = rbd_client_find(ceph_opts); 1011 if (rbdc) { 1012 ceph_destroy_options(ceph_opts); 1013 1014 /* 1015 * Using an existing client. Make sure ->pg_pools is up to 1016 * date before we look up the pool id in do_rbd_add(). 1017 */ 1018 ret = ceph_wait_for_latest_osdmap(rbdc->client, 1019 rbdc->client->options->mount_timeout); 1020 if (ret) { 1021 rbd_warn(NULL, "failed to get latest osdmap: %d", ret); 1022 rbd_put_client(rbdc); 1023 rbdc = ERR_PTR(ret); 1024 } 1025 } else { 1026 rbdc = rbd_client_create(ceph_opts); 1027 } 1028 mutex_unlock(&client_mutex); 1029 1030 return rbdc; 1031 } 1032 1033 static bool rbd_image_format_valid(u32 image_format) 1034 { 1035 return image_format == 1 || image_format == 2; 1036 } 1037 1038 static bool rbd_dev_ondisk_valid(struct rbd_image_header_ondisk *ondisk) 1039 { 1040 size_t size; 1041 u32 snap_count; 1042 1043 /* The header has to start with the magic rbd header text */ 1044 if (memcmp(&ondisk->text, RBD_HEADER_TEXT, sizeof (RBD_HEADER_TEXT))) 1045 return false; 1046 1047 /* The bio layer requires at least sector-sized I/O */ 1048 1049 if (ondisk->options.order < SECTOR_SHIFT) 1050 return false; 1051 1052 /* If we use u64 in a few spots we may be able to loosen this */ 1053 1054 if (ondisk->options.order > 8 * sizeof (int) - 1) 1055 return false; 1056 1057 /* 1058 * The size of a snapshot header has to fit in a size_t, and 1059 * that limits the number of snapshots. 1060 */ 1061 snap_count = le32_to_cpu(ondisk->snap_count); 1062 size = SIZE_MAX - sizeof (struct ceph_snap_context); 1063 if (snap_count > size / sizeof (__le64)) 1064 return false; 1065 1066 /* 1067 * Not only that, but the size of the entire the snapshot 1068 * header must also be representable in a size_t. 1069 */ 1070 size -= snap_count * sizeof (__le64); 1071 if ((u64) size < le64_to_cpu(ondisk->snap_names_len)) 1072 return false; 1073 1074 return true; 1075 } 1076 1077 /* 1078 * returns the size of an object in the image 1079 */ 1080 static u32 rbd_obj_bytes(struct rbd_image_header *header) 1081 { 1082 return 1U << header->obj_order; 1083 } 1084 1085 static void rbd_init_layout(struct rbd_device *rbd_dev) 1086 { 1087 if (rbd_dev->header.stripe_unit == 0 || 1088 rbd_dev->header.stripe_count == 0) { 1089 rbd_dev->header.stripe_unit = rbd_obj_bytes(&rbd_dev->header); 1090 rbd_dev->header.stripe_count = 1; 1091 } 1092 1093 rbd_dev->layout.stripe_unit = rbd_dev->header.stripe_unit; 1094 rbd_dev->layout.stripe_count = rbd_dev->header.stripe_count; 1095 rbd_dev->layout.object_size = rbd_obj_bytes(&rbd_dev->header); 1096 rbd_dev->layout.pool_id = rbd_dev->header.data_pool_id == CEPH_NOPOOL ? 1097 rbd_dev->spec->pool_id : rbd_dev->header.data_pool_id; 1098 RCU_INIT_POINTER(rbd_dev->layout.pool_ns, NULL); 1099 } 1100 1101 /* 1102 * Fill an rbd image header with information from the given format 1 1103 * on-disk header. 1104 */ 1105 static int rbd_header_from_disk(struct rbd_device *rbd_dev, 1106 struct rbd_image_header_ondisk *ondisk) 1107 { 1108 struct rbd_image_header *header = &rbd_dev->header; 1109 bool first_time = header->object_prefix == NULL; 1110 struct ceph_snap_context *snapc; 1111 char *object_prefix = NULL; 1112 char *snap_names = NULL; 1113 u64 *snap_sizes = NULL; 1114 u32 snap_count; 1115 int ret = -ENOMEM; 1116 u32 i; 1117 1118 /* Allocate this now to avoid having to handle failure below */ 1119 1120 if (first_time) { 1121 object_prefix = kstrndup(ondisk->object_prefix, 1122 sizeof(ondisk->object_prefix), 1123 GFP_KERNEL); 1124 if (!object_prefix) 1125 return -ENOMEM; 1126 } 1127 1128 /* Allocate the snapshot context and fill it in */ 1129 1130 snap_count = le32_to_cpu(ondisk->snap_count); 1131 snapc = ceph_create_snap_context(snap_count, GFP_KERNEL); 1132 if (!snapc) 1133 goto out_err; 1134 snapc->seq = le64_to_cpu(ondisk->snap_seq); 1135 if (snap_count) { 1136 struct rbd_image_snap_ondisk *snaps; 1137 u64 snap_names_len = le64_to_cpu(ondisk->snap_names_len); 1138 1139 /* We'll keep a copy of the snapshot names... */ 1140 1141 if (snap_names_len > (u64)SIZE_MAX) 1142 goto out_2big; 1143 snap_names = kmalloc(snap_names_len, GFP_KERNEL); 1144 if (!snap_names) 1145 goto out_err; 1146 1147 /* ...as well as the array of their sizes. */ 1148 snap_sizes = kmalloc_array(snap_count, 1149 sizeof(*header->snap_sizes), 1150 GFP_KERNEL); 1151 if (!snap_sizes) 1152 goto out_err; 1153 1154 /* 1155 * Copy the names, and fill in each snapshot's id 1156 * and size. 1157 * 1158 * Note that rbd_dev_v1_header_info() guarantees the 1159 * ondisk buffer we're working with has 1160 * snap_names_len bytes beyond the end of the 1161 * snapshot id array, this memcpy() is safe. 1162 */ 1163 memcpy(snap_names, &ondisk->snaps[snap_count], snap_names_len); 1164 snaps = ondisk->snaps; 1165 for (i = 0; i < snap_count; i++) { 1166 snapc->snaps[i] = le64_to_cpu(snaps[i].id); 1167 snap_sizes[i] = le64_to_cpu(snaps[i].image_size); 1168 } 1169 } 1170 1171 /* We won't fail any more, fill in the header */ 1172 1173 if (first_time) { 1174 header->object_prefix = object_prefix; 1175 header->obj_order = ondisk->options.order; 1176 rbd_init_layout(rbd_dev); 1177 } else { 1178 ceph_put_snap_context(header->snapc); 1179 kfree(header->snap_names); 1180 kfree(header->snap_sizes); 1181 } 1182 1183 /* The remaining fields always get updated (when we refresh) */ 1184 1185 header->image_size = le64_to_cpu(ondisk->image_size); 1186 header->snapc = snapc; 1187 header->snap_names = snap_names; 1188 header->snap_sizes = snap_sizes; 1189 1190 return 0; 1191 out_2big: 1192 ret = -EIO; 1193 out_err: 1194 kfree(snap_sizes); 1195 kfree(snap_names); 1196 ceph_put_snap_context(snapc); 1197 kfree(object_prefix); 1198 1199 return ret; 1200 } 1201 1202 static const char *_rbd_dev_v1_snap_name(struct rbd_device *rbd_dev, u32 which) 1203 { 1204 const char *snap_name; 1205 1206 rbd_assert(which < rbd_dev->header.snapc->num_snaps); 1207 1208 /* Skip over names until we find the one we are looking for */ 1209 1210 snap_name = rbd_dev->header.snap_names; 1211 while (which--) 1212 snap_name += strlen(snap_name) + 1; 1213 1214 return kstrdup(snap_name, GFP_KERNEL); 1215 } 1216 1217 /* 1218 * Snapshot id comparison function for use with qsort()/bsearch(). 1219 * Note that result is for snapshots in *descending* order. 1220 */ 1221 static int snapid_compare_reverse(const void *s1, const void *s2) 1222 { 1223 u64 snap_id1 = *(u64 *)s1; 1224 u64 snap_id2 = *(u64 *)s2; 1225 1226 if (snap_id1 < snap_id2) 1227 return 1; 1228 return snap_id1 == snap_id2 ? 0 : -1; 1229 } 1230 1231 /* 1232 * Search a snapshot context to see if the given snapshot id is 1233 * present. 1234 * 1235 * Returns the position of the snapshot id in the array if it's found, 1236 * or BAD_SNAP_INDEX otherwise. 1237 * 1238 * Note: The snapshot array is in kept sorted (by the osd) in 1239 * reverse order, highest snapshot id first. 1240 */ 1241 static u32 rbd_dev_snap_index(struct rbd_device *rbd_dev, u64 snap_id) 1242 { 1243 struct ceph_snap_context *snapc = rbd_dev->header.snapc; 1244 u64 *found; 1245 1246 found = bsearch(&snap_id, &snapc->snaps, snapc->num_snaps, 1247 sizeof (snap_id), snapid_compare_reverse); 1248 1249 return found ? (u32)(found - &snapc->snaps[0]) : BAD_SNAP_INDEX; 1250 } 1251 1252 static const char *rbd_dev_v1_snap_name(struct rbd_device *rbd_dev, 1253 u64 snap_id) 1254 { 1255 u32 which; 1256 const char *snap_name; 1257 1258 which = rbd_dev_snap_index(rbd_dev, snap_id); 1259 if (which == BAD_SNAP_INDEX) 1260 return ERR_PTR(-ENOENT); 1261 1262 snap_name = _rbd_dev_v1_snap_name(rbd_dev, which); 1263 return snap_name ? snap_name : ERR_PTR(-ENOMEM); 1264 } 1265 1266 static const char *rbd_snap_name(struct rbd_device *rbd_dev, u64 snap_id) 1267 { 1268 if (snap_id == CEPH_NOSNAP) 1269 return RBD_SNAP_HEAD_NAME; 1270 1271 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 1272 if (rbd_dev->image_format == 1) 1273 return rbd_dev_v1_snap_name(rbd_dev, snap_id); 1274 1275 return rbd_dev_v2_snap_name(rbd_dev, snap_id); 1276 } 1277 1278 static int rbd_snap_size(struct rbd_device *rbd_dev, u64 snap_id, 1279 u64 *snap_size) 1280 { 1281 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 1282 if (snap_id == CEPH_NOSNAP) { 1283 *snap_size = rbd_dev->header.image_size; 1284 } else if (rbd_dev->image_format == 1) { 1285 u32 which; 1286 1287 which = rbd_dev_snap_index(rbd_dev, snap_id); 1288 if (which == BAD_SNAP_INDEX) 1289 return -ENOENT; 1290 1291 *snap_size = rbd_dev->header.snap_sizes[which]; 1292 } else { 1293 u64 size = 0; 1294 int ret; 1295 1296 ret = _rbd_dev_v2_snap_size(rbd_dev, snap_id, NULL, &size); 1297 if (ret) 1298 return ret; 1299 1300 *snap_size = size; 1301 } 1302 return 0; 1303 } 1304 1305 static int rbd_snap_features(struct rbd_device *rbd_dev, u64 snap_id, 1306 u64 *snap_features) 1307 { 1308 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 1309 if (snap_id == CEPH_NOSNAP) { 1310 *snap_features = rbd_dev->header.features; 1311 } else if (rbd_dev->image_format == 1) { 1312 *snap_features = 0; /* No features for format 1 */ 1313 } else { 1314 u64 features = 0; 1315 int ret; 1316 1317 ret = _rbd_dev_v2_snap_features(rbd_dev, snap_id, &features); 1318 if (ret) 1319 return ret; 1320 1321 *snap_features = features; 1322 } 1323 return 0; 1324 } 1325 1326 static int rbd_dev_mapping_set(struct rbd_device *rbd_dev) 1327 { 1328 u64 snap_id = rbd_dev->spec->snap_id; 1329 u64 size = 0; 1330 u64 features = 0; 1331 int ret; 1332 1333 ret = rbd_snap_size(rbd_dev, snap_id, &size); 1334 if (ret) 1335 return ret; 1336 ret = rbd_snap_features(rbd_dev, snap_id, &features); 1337 if (ret) 1338 return ret; 1339 1340 rbd_dev->mapping.size = size; 1341 rbd_dev->mapping.features = features; 1342 1343 return 0; 1344 } 1345 1346 static void rbd_dev_mapping_clear(struct rbd_device *rbd_dev) 1347 { 1348 rbd_dev->mapping.size = 0; 1349 rbd_dev->mapping.features = 0; 1350 } 1351 1352 static void zero_bvec(struct bio_vec *bv) 1353 { 1354 void *buf; 1355 unsigned long flags; 1356 1357 buf = bvec_kmap_irq(bv, &flags); 1358 memset(buf, 0, bv->bv_len); 1359 flush_dcache_page(bv->bv_page); 1360 bvec_kunmap_irq(buf, &flags); 1361 } 1362 1363 static void zero_bios(struct ceph_bio_iter *bio_pos, u32 off, u32 bytes) 1364 { 1365 struct ceph_bio_iter it = *bio_pos; 1366 1367 ceph_bio_iter_advance(&it, off); 1368 ceph_bio_iter_advance_step(&it, bytes, ({ 1369 zero_bvec(&bv); 1370 })); 1371 } 1372 1373 static void zero_bvecs(struct ceph_bvec_iter *bvec_pos, u32 off, u32 bytes) 1374 { 1375 struct ceph_bvec_iter it = *bvec_pos; 1376 1377 ceph_bvec_iter_advance(&it, off); 1378 ceph_bvec_iter_advance_step(&it, bytes, ({ 1379 zero_bvec(&bv); 1380 })); 1381 } 1382 1383 /* 1384 * Zero a range in @obj_req data buffer defined by a bio (list) or 1385 * (private) bio_vec array. 1386 * 1387 * @off is relative to the start of the data buffer. 1388 */ 1389 static void rbd_obj_zero_range(struct rbd_obj_request *obj_req, u32 off, 1390 u32 bytes) 1391 { 1392 dout("%s %p data buf %u~%u\n", __func__, obj_req, off, bytes); 1393 1394 switch (obj_req->img_request->data_type) { 1395 case OBJ_REQUEST_BIO: 1396 zero_bios(&obj_req->bio_pos, off, bytes); 1397 break; 1398 case OBJ_REQUEST_BVECS: 1399 case OBJ_REQUEST_OWN_BVECS: 1400 zero_bvecs(&obj_req->bvec_pos, off, bytes); 1401 break; 1402 default: 1403 BUG(); 1404 } 1405 } 1406 1407 static void rbd_obj_request_destroy(struct kref *kref); 1408 static void rbd_obj_request_put(struct rbd_obj_request *obj_request) 1409 { 1410 rbd_assert(obj_request != NULL); 1411 dout("%s: obj %p (was %d)\n", __func__, obj_request, 1412 kref_read(&obj_request->kref)); 1413 kref_put(&obj_request->kref, rbd_obj_request_destroy); 1414 } 1415 1416 static void rbd_img_request_destroy(struct kref *kref); 1417 static void rbd_img_request_put(struct rbd_img_request *img_request) 1418 { 1419 rbd_assert(img_request != NULL); 1420 dout("%s: img %p (was %d)\n", __func__, img_request, 1421 kref_read(&img_request->kref)); 1422 kref_put(&img_request->kref, rbd_img_request_destroy); 1423 } 1424 1425 static inline void rbd_img_obj_request_add(struct rbd_img_request *img_request, 1426 struct rbd_obj_request *obj_request) 1427 { 1428 rbd_assert(obj_request->img_request == NULL); 1429 1430 /* Image request now owns object's original reference */ 1431 obj_request->img_request = img_request; 1432 dout("%s: img %p obj %p\n", __func__, img_request, obj_request); 1433 } 1434 1435 static inline void rbd_img_obj_request_del(struct rbd_img_request *img_request, 1436 struct rbd_obj_request *obj_request) 1437 { 1438 dout("%s: img %p obj %p\n", __func__, img_request, obj_request); 1439 list_del(&obj_request->ex.oe_item); 1440 rbd_assert(obj_request->img_request == img_request); 1441 rbd_obj_request_put(obj_request); 1442 } 1443 1444 static void rbd_osd_submit(struct ceph_osd_request *osd_req) 1445 { 1446 struct rbd_obj_request *obj_req = osd_req->r_priv; 1447 1448 dout("%s osd_req %p for obj_req %p objno %llu %llu~%llu\n", 1449 __func__, osd_req, obj_req, obj_req->ex.oe_objno, 1450 obj_req->ex.oe_off, obj_req->ex.oe_len); 1451 ceph_osdc_start_request(osd_req->r_osdc, osd_req, false); 1452 } 1453 1454 /* 1455 * The default/initial value for all image request flags is 0. Each 1456 * is conditionally set to 1 at image request initialization time 1457 * and currently never change thereafter. 1458 */ 1459 static void img_request_layered_set(struct rbd_img_request *img_request) 1460 { 1461 set_bit(IMG_REQ_LAYERED, &img_request->flags); 1462 smp_mb(); 1463 } 1464 1465 static void img_request_layered_clear(struct rbd_img_request *img_request) 1466 { 1467 clear_bit(IMG_REQ_LAYERED, &img_request->flags); 1468 smp_mb(); 1469 } 1470 1471 static bool img_request_layered_test(struct rbd_img_request *img_request) 1472 { 1473 smp_mb(); 1474 return test_bit(IMG_REQ_LAYERED, &img_request->flags) != 0; 1475 } 1476 1477 static bool rbd_obj_is_entire(struct rbd_obj_request *obj_req) 1478 { 1479 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 1480 1481 return !obj_req->ex.oe_off && 1482 obj_req->ex.oe_len == rbd_dev->layout.object_size; 1483 } 1484 1485 static bool rbd_obj_is_tail(struct rbd_obj_request *obj_req) 1486 { 1487 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 1488 1489 return obj_req->ex.oe_off + obj_req->ex.oe_len == 1490 rbd_dev->layout.object_size; 1491 } 1492 1493 /* 1494 * Must be called after rbd_obj_calc_img_extents(). 1495 */ 1496 static bool rbd_obj_copyup_enabled(struct rbd_obj_request *obj_req) 1497 { 1498 if (!obj_req->num_img_extents || 1499 (rbd_obj_is_entire(obj_req) && 1500 !obj_req->img_request->snapc->num_snaps)) 1501 return false; 1502 1503 return true; 1504 } 1505 1506 static u64 rbd_obj_img_extents_bytes(struct rbd_obj_request *obj_req) 1507 { 1508 return ceph_file_extents_bytes(obj_req->img_extents, 1509 obj_req->num_img_extents); 1510 } 1511 1512 static bool rbd_img_is_write(struct rbd_img_request *img_req) 1513 { 1514 switch (img_req->op_type) { 1515 case OBJ_OP_READ: 1516 return false; 1517 case OBJ_OP_WRITE: 1518 case OBJ_OP_DISCARD: 1519 case OBJ_OP_ZEROOUT: 1520 return true; 1521 default: 1522 BUG(); 1523 } 1524 } 1525 1526 static void rbd_osd_req_callback(struct ceph_osd_request *osd_req) 1527 { 1528 struct rbd_obj_request *obj_req = osd_req->r_priv; 1529 int result; 1530 1531 dout("%s osd_req %p result %d for obj_req %p\n", __func__, osd_req, 1532 osd_req->r_result, obj_req); 1533 1534 /* 1535 * Writes aren't allowed to return a data payload. In some 1536 * guarded write cases (e.g. stat + zero on an empty object) 1537 * a stat response makes it through, but we don't care. 1538 */ 1539 if (osd_req->r_result > 0 && rbd_img_is_write(obj_req->img_request)) 1540 result = 0; 1541 else 1542 result = osd_req->r_result; 1543 1544 rbd_obj_handle_request(obj_req, result); 1545 } 1546 1547 static void rbd_osd_format_read(struct ceph_osd_request *osd_req) 1548 { 1549 struct rbd_obj_request *obj_request = osd_req->r_priv; 1550 1551 osd_req->r_flags = CEPH_OSD_FLAG_READ; 1552 osd_req->r_snapid = obj_request->img_request->snap_id; 1553 } 1554 1555 static void rbd_osd_format_write(struct ceph_osd_request *osd_req) 1556 { 1557 struct rbd_obj_request *obj_request = osd_req->r_priv; 1558 1559 osd_req->r_flags = CEPH_OSD_FLAG_WRITE; 1560 ktime_get_real_ts64(&osd_req->r_mtime); 1561 osd_req->r_data_offset = obj_request->ex.oe_off; 1562 } 1563 1564 static struct ceph_osd_request * 1565 __rbd_obj_add_osd_request(struct rbd_obj_request *obj_req, 1566 struct ceph_snap_context *snapc, int num_ops) 1567 { 1568 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 1569 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 1570 struct ceph_osd_request *req; 1571 const char *name_format = rbd_dev->image_format == 1 ? 1572 RBD_V1_DATA_FORMAT : RBD_V2_DATA_FORMAT; 1573 int ret; 1574 1575 req = ceph_osdc_alloc_request(osdc, snapc, num_ops, false, GFP_NOIO); 1576 if (!req) 1577 return ERR_PTR(-ENOMEM); 1578 1579 list_add_tail(&req->r_private_item, &obj_req->osd_reqs); 1580 req->r_callback = rbd_osd_req_callback; 1581 req->r_priv = obj_req; 1582 1583 /* 1584 * Data objects may be stored in a separate pool, but always in 1585 * the same namespace in that pool as the header in its pool. 1586 */ 1587 ceph_oloc_copy(&req->r_base_oloc, &rbd_dev->header_oloc); 1588 req->r_base_oloc.pool = rbd_dev->layout.pool_id; 1589 1590 ret = ceph_oid_aprintf(&req->r_base_oid, GFP_NOIO, name_format, 1591 rbd_dev->header.object_prefix, 1592 obj_req->ex.oe_objno); 1593 if (ret) 1594 return ERR_PTR(ret); 1595 1596 return req; 1597 } 1598 1599 static struct ceph_osd_request * 1600 rbd_obj_add_osd_request(struct rbd_obj_request *obj_req, int num_ops) 1601 { 1602 return __rbd_obj_add_osd_request(obj_req, obj_req->img_request->snapc, 1603 num_ops); 1604 } 1605 1606 static struct rbd_obj_request *rbd_obj_request_create(void) 1607 { 1608 struct rbd_obj_request *obj_request; 1609 1610 obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_NOIO); 1611 if (!obj_request) 1612 return NULL; 1613 1614 ceph_object_extent_init(&obj_request->ex); 1615 INIT_LIST_HEAD(&obj_request->osd_reqs); 1616 mutex_init(&obj_request->state_mutex); 1617 kref_init(&obj_request->kref); 1618 1619 dout("%s %p\n", __func__, obj_request); 1620 return obj_request; 1621 } 1622 1623 static void rbd_obj_request_destroy(struct kref *kref) 1624 { 1625 struct rbd_obj_request *obj_request; 1626 struct ceph_osd_request *osd_req; 1627 u32 i; 1628 1629 obj_request = container_of(kref, struct rbd_obj_request, kref); 1630 1631 dout("%s: obj %p\n", __func__, obj_request); 1632 1633 while (!list_empty(&obj_request->osd_reqs)) { 1634 osd_req = list_first_entry(&obj_request->osd_reqs, 1635 struct ceph_osd_request, r_private_item); 1636 list_del_init(&osd_req->r_private_item); 1637 ceph_osdc_put_request(osd_req); 1638 } 1639 1640 switch (obj_request->img_request->data_type) { 1641 case OBJ_REQUEST_NODATA: 1642 case OBJ_REQUEST_BIO: 1643 case OBJ_REQUEST_BVECS: 1644 break; /* Nothing to do */ 1645 case OBJ_REQUEST_OWN_BVECS: 1646 kfree(obj_request->bvec_pos.bvecs); 1647 break; 1648 default: 1649 BUG(); 1650 } 1651 1652 kfree(obj_request->img_extents); 1653 if (obj_request->copyup_bvecs) { 1654 for (i = 0; i < obj_request->copyup_bvec_count; i++) { 1655 if (obj_request->copyup_bvecs[i].bv_page) 1656 __free_page(obj_request->copyup_bvecs[i].bv_page); 1657 } 1658 kfree(obj_request->copyup_bvecs); 1659 } 1660 1661 kmem_cache_free(rbd_obj_request_cache, obj_request); 1662 } 1663 1664 /* It's OK to call this for a device with no parent */ 1665 1666 static void rbd_spec_put(struct rbd_spec *spec); 1667 static void rbd_dev_unparent(struct rbd_device *rbd_dev) 1668 { 1669 rbd_dev_remove_parent(rbd_dev); 1670 rbd_spec_put(rbd_dev->parent_spec); 1671 rbd_dev->parent_spec = NULL; 1672 rbd_dev->parent_overlap = 0; 1673 } 1674 1675 /* 1676 * Parent image reference counting is used to determine when an 1677 * image's parent fields can be safely torn down--after there are no 1678 * more in-flight requests to the parent image. When the last 1679 * reference is dropped, cleaning them up is safe. 1680 */ 1681 static void rbd_dev_parent_put(struct rbd_device *rbd_dev) 1682 { 1683 int counter; 1684 1685 if (!rbd_dev->parent_spec) 1686 return; 1687 1688 counter = atomic_dec_return_safe(&rbd_dev->parent_ref); 1689 if (counter > 0) 1690 return; 1691 1692 /* Last reference; clean up parent data structures */ 1693 1694 if (!counter) 1695 rbd_dev_unparent(rbd_dev); 1696 else 1697 rbd_warn(rbd_dev, "parent reference underflow"); 1698 } 1699 1700 /* 1701 * If an image has a non-zero parent overlap, get a reference to its 1702 * parent. 1703 * 1704 * Returns true if the rbd device has a parent with a non-zero 1705 * overlap and a reference for it was successfully taken, or 1706 * false otherwise. 1707 */ 1708 static bool rbd_dev_parent_get(struct rbd_device *rbd_dev) 1709 { 1710 int counter = 0; 1711 1712 if (!rbd_dev->parent_spec) 1713 return false; 1714 1715 down_read(&rbd_dev->header_rwsem); 1716 if (rbd_dev->parent_overlap) 1717 counter = atomic_inc_return_safe(&rbd_dev->parent_ref); 1718 up_read(&rbd_dev->header_rwsem); 1719 1720 if (counter < 0) 1721 rbd_warn(rbd_dev, "parent reference overflow"); 1722 1723 return counter > 0; 1724 } 1725 1726 /* 1727 * Caller is responsible for filling in the list of object requests 1728 * that comprises the image request, and the Linux request pointer 1729 * (if there is one). 1730 */ 1731 static struct rbd_img_request *rbd_img_request_create( 1732 struct rbd_device *rbd_dev, 1733 enum obj_operation_type op_type, 1734 struct ceph_snap_context *snapc) 1735 { 1736 struct rbd_img_request *img_request; 1737 1738 img_request = kmem_cache_zalloc(rbd_img_request_cache, GFP_NOIO); 1739 if (!img_request) 1740 return NULL; 1741 1742 img_request->rbd_dev = rbd_dev; 1743 img_request->op_type = op_type; 1744 if (!rbd_img_is_write(img_request)) 1745 img_request->snap_id = rbd_dev->spec->snap_id; 1746 else 1747 img_request->snapc = snapc; 1748 1749 if (rbd_dev_parent_get(rbd_dev)) 1750 img_request_layered_set(img_request); 1751 1752 INIT_LIST_HEAD(&img_request->lock_item); 1753 INIT_LIST_HEAD(&img_request->object_extents); 1754 mutex_init(&img_request->state_mutex); 1755 kref_init(&img_request->kref); 1756 1757 dout("%s: rbd_dev %p %s -> img %p\n", __func__, rbd_dev, 1758 obj_op_name(op_type), img_request); 1759 return img_request; 1760 } 1761 1762 static void rbd_img_request_destroy(struct kref *kref) 1763 { 1764 struct rbd_img_request *img_request; 1765 struct rbd_obj_request *obj_request; 1766 struct rbd_obj_request *next_obj_request; 1767 1768 img_request = container_of(kref, struct rbd_img_request, kref); 1769 1770 dout("%s: img %p\n", __func__, img_request); 1771 1772 WARN_ON(!list_empty(&img_request->lock_item)); 1773 for_each_obj_request_safe(img_request, obj_request, next_obj_request) 1774 rbd_img_obj_request_del(img_request, obj_request); 1775 1776 if (img_request_layered_test(img_request)) { 1777 img_request_layered_clear(img_request); 1778 rbd_dev_parent_put(img_request->rbd_dev); 1779 } 1780 1781 if (rbd_img_is_write(img_request)) 1782 ceph_put_snap_context(img_request->snapc); 1783 1784 kmem_cache_free(rbd_img_request_cache, img_request); 1785 } 1786 1787 #define BITS_PER_OBJ 2 1788 #define OBJS_PER_BYTE (BITS_PER_BYTE / BITS_PER_OBJ) 1789 #define OBJ_MASK ((1 << BITS_PER_OBJ) - 1) 1790 1791 static void __rbd_object_map_index(struct rbd_device *rbd_dev, u64 objno, 1792 u64 *index, u8 *shift) 1793 { 1794 u32 off; 1795 1796 rbd_assert(objno < rbd_dev->object_map_size); 1797 *index = div_u64_rem(objno, OBJS_PER_BYTE, &off); 1798 *shift = (OBJS_PER_BYTE - off - 1) * BITS_PER_OBJ; 1799 } 1800 1801 static u8 __rbd_object_map_get(struct rbd_device *rbd_dev, u64 objno) 1802 { 1803 u64 index; 1804 u8 shift; 1805 1806 lockdep_assert_held(&rbd_dev->object_map_lock); 1807 __rbd_object_map_index(rbd_dev, objno, &index, &shift); 1808 return (rbd_dev->object_map[index] >> shift) & OBJ_MASK; 1809 } 1810 1811 static void __rbd_object_map_set(struct rbd_device *rbd_dev, u64 objno, u8 val) 1812 { 1813 u64 index; 1814 u8 shift; 1815 u8 *p; 1816 1817 lockdep_assert_held(&rbd_dev->object_map_lock); 1818 rbd_assert(!(val & ~OBJ_MASK)); 1819 1820 __rbd_object_map_index(rbd_dev, objno, &index, &shift); 1821 p = &rbd_dev->object_map[index]; 1822 *p = (*p & ~(OBJ_MASK << shift)) | (val << shift); 1823 } 1824 1825 static u8 rbd_object_map_get(struct rbd_device *rbd_dev, u64 objno) 1826 { 1827 u8 state; 1828 1829 spin_lock(&rbd_dev->object_map_lock); 1830 state = __rbd_object_map_get(rbd_dev, objno); 1831 spin_unlock(&rbd_dev->object_map_lock); 1832 return state; 1833 } 1834 1835 static bool use_object_map(struct rbd_device *rbd_dev) 1836 { 1837 return ((rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) && 1838 !(rbd_dev->object_map_flags & RBD_FLAG_OBJECT_MAP_INVALID)); 1839 } 1840 1841 static bool rbd_object_map_may_exist(struct rbd_device *rbd_dev, u64 objno) 1842 { 1843 u8 state; 1844 1845 /* fall back to default logic if object map is disabled or invalid */ 1846 if (!use_object_map(rbd_dev)) 1847 return true; 1848 1849 state = rbd_object_map_get(rbd_dev, objno); 1850 return state != OBJECT_NONEXISTENT; 1851 } 1852 1853 static void rbd_object_map_name(struct rbd_device *rbd_dev, u64 snap_id, 1854 struct ceph_object_id *oid) 1855 { 1856 if (snap_id == CEPH_NOSNAP) 1857 ceph_oid_printf(oid, "%s%s", RBD_OBJECT_MAP_PREFIX, 1858 rbd_dev->spec->image_id); 1859 else 1860 ceph_oid_printf(oid, "%s%s.%016llx", RBD_OBJECT_MAP_PREFIX, 1861 rbd_dev->spec->image_id, snap_id); 1862 } 1863 1864 static int rbd_object_map_lock(struct rbd_device *rbd_dev) 1865 { 1866 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 1867 CEPH_DEFINE_OID_ONSTACK(oid); 1868 u8 lock_type; 1869 char *lock_tag; 1870 struct ceph_locker *lockers; 1871 u32 num_lockers; 1872 bool broke_lock = false; 1873 int ret; 1874 1875 rbd_object_map_name(rbd_dev, CEPH_NOSNAP, &oid); 1876 1877 again: 1878 ret = ceph_cls_lock(osdc, &oid, &rbd_dev->header_oloc, RBD_LOCK_NAME, 1879 CEPH_CLS_LOCK_EXCLUSIVE, "", "", "", 0); 1880 if (ret != -EBUSY || broke_lock) { 1881 if (ret == -EEXIST) 1882 ret = 0; /* already locked by myself */ 1883 if (ret) 1884 rbd_warn(rbd_dev, "failed to lock object map: %d", ret); 1885 return ret; 1886 } 1887 1888 ret = ceph_cls_lock_info(osdc, &oid, &rbd_dev->header_oloc, 1889 RBD_LOCK_NAME, &lock_type, &lock_tag, 1890 &lockers, &num_lockers); 1891 if (ret) { 1892 if (ret == -ENOENT) 1893 goto again; 1894 1895 rbd_warn(rbd_dev, "failed to get object map lockers: %d", ret); 1896 return ret; 1897 } 1898 1899 kfree(lock_tag); 1900 if (num_lockers == 0) 1901 goto again; 1902 1903 rbd_warn(rbd_dev, "breaking object map lock owned by %s%llu", 1904 ENTITY_NAME(lockers[0].id.name)); 1905 1906 ret = ceph_cls_break_lock(osdc, &oid, &rbd_dev->header_oloc, 1907 RBD_LOCK_NAME, lockers[0].id.cookie, 1908 &lockers[0].id.name); 1909 ceph_free_lockers(lockers, num_lockers); 1910 if (ret) { 1911 if (ret == -ENOENT) 1912 goto again; 1913 1914 rbd_warn(rbd_dev, "failed to break object map lock: %d", ret); 1915 return ret; 1916 } 1917 1918 broke_lock = true; 1919 goto again; 1920 } 1921 1922 static void rbd_object_map_unlock(struct rbd_device *rbd_dev) 1923 { 1924 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 1925 CEPH_DEFINE_OID_ONSTACK(oid); 1926 int ret; 1927 1928 rbd_object_map_name(rbd_dev, CEPH_NOSNAP, &oid); 1929 1930 ret = ceph_cls_unlock(osdc, &oid, &rbd_dev->header_oloc, RBD_LOCK_NAME, 1931 ""); 1932 if (ret && ret != -ENOENT) 1933 rbd_warn(rbd_dev, "failed to unlock object map: %d", ret); 1934 } 1935 1936 static int decode_object_map_header(void **p, void *end, u64 *object_map_size) 1937 { 1938 u8 struct_v; 1939 u32 struct_len; 1940 u32 header_len; 1941 void *header_end; 1942 int ret; 1943 1944 ceph_decode_32_safe(p, end, header_len, e_inval); 1945 header_end = *p + header_len; 1946 1947 ret = ceph_start_decoding(p, end, 1, "BitVector header", &struct_v, 1948 &struct_len); 1949 if (ret) 1950 return ret; 1951 1952 ceph_decode_64_safe(p, end, *object_map_size, e_inval); 1953 1954 *p = header_end; 1955 return 0; 1956 1957 e_inval: 1958 return -EINVAL; 1959 } 1960 1961 static int __rbd_object_map_load(struct rbd_device *rbd_dev) 1962 { 1963 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 1964 CEPH_DEFINE_OID_ONSTACK(oid); 1965 struct page **pages; 1966 void *p, *end; 1967 size_t reply_len; 1968 u64 num_objects; 1969 u64 object_map_bytes; 1970 u64 object_map_size; 1971 int num_pages; 1972 int ret; 1973 1974 rbd_assert(!rbd_dev->object_map && !rbd_dev->object_map_size); 1975 1976 num_objects = ceph_get_num_objects(&rbd_dev->layout, 1977 rbd_dev->mapping.size); 1978 object_map_bytes = DIV_ROUND_UP_ULL(num_objects * BITS_PER_OBJ, 1979 BITS_PER_BYTE); 1980 num_pages = calc_pages_for(0, object_map_bytes) + 1; 1981 pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL); 1982 if (IS_ERR(pages)) 1983 return PTR_ERR(pages); 1984 1985 reply_len = num_pages * PAGE_SIZE; 1986 rbd_object_map_name(rbd_dev, rbd_dev->spec->snap_id, &oid); 1987 ret = ceph_osdc_call(osdc, &oid, &rbd_dev->header_oloc, 1988 "rbd", "object_map_load", CEPH_OSD_FLAG_READ, 1989 NULL, 0, pages, &reply_len); 1990 if (ret) 1991 goto out; 1992 1993 p = page_address(pages[0]); 1994 end = p + min(reply_len, (size_t)PAGE_SIZE); 1995 ret = decode_object_map_header(&p, end, &object_map_size); 1996 if (ret) 1997 goto out; 1998 1999 if (object_map_size != num_objects) { 2000 rbd_warn(rbd_dev, "object map size mismatch: %llu vs %llu", 2001 object_map_size, num_objects); 2002 ret = -EINVAL; 2003 goto out; 2004 } 2005 2006 if (offset_in_page(p) + object_map_bytes > reply_len) { 2007 ret = -EINVAL; 2008 goto out; 2009 } 2010 2011 rbd_dev->object_map = kvmalloc(object_map_bytes, GFP_KERNEL); 2012 if (!rbd_dev->object_map) { 2013 ret = -ENOMEM; 2014 goto out; 2015 } 2016 2017 rbd_dev->object_map_size = object_map_size; 2018 ceph_copy_from_page_vector(pages, rbd_dev->object_map, 2019 offset_in_page(p), object_map_bytes); 2020 2021 out: 2022 ceph_release_page_vector(pages, num_pages); 2023 return ret; 2024 } 2025 2026 static void rbd_object_map_free(struct rbd_device *rbd_dev) 2027 { 2028 kvfree(rbd_dev->object_map); 2029 rbd_dev->object_map = NULL; 2030 rbd_dev->object_map_size = 0; 2031 } 2032 2033 static int rbd_object_map_load(struct rbd_device *rbd_dev) 2034 { 2035 int ret; 2036 2037 ret = __rbd_object_map_load(rbd_dev); 2038 if (ret) 2039 return ret; 2040 2041 ret = rbd_dev_v2_get_flags(rbd_dev); 2042 if (ret) { 2043 rbd_object_map_free(rbd_dev); 2044 return ret; 2045 } 2046 2047 if (rbd_dev->object_map_flags & RBD_FLAG_OBJECT_MAP_INVALID) 2048 rbd_warn(rbd_dev, "object map is invalid"); 2049 2050 return 0; 2051 } 2052 2053 static int rbd_object_map_open(struct rbd_device *rbd_dev) 2054 { 2055 int ret; 2056 2057 ret = rbd_object_map_lock(rbd_dev); 2058 if (ret) 2059 return ret; 2060 2061 ret = rbd_object_map_load(rbd_dev); 2062 if (ret) { 2063 rbd_object_map_unlock(rbd_dev); 2064 return ret; 2065 } 2066 2067 return 0; 2068 } 2069 2070 static void rbd_object_map_close(struct rbd_device *rbd_dev) 2071 { 2072 rbd_object_map_free(rbd_dev); 2073 rbd_object_map_unlock(rbd_dev); 2074 } 2075 2076 /* 2077 * This function needs snap_id (or more precisely just something to 2078 * distinguish between HEAD and snapshot object maps), new_state and 2079 * current_state that were passed to rbd_object_map_update(). 2080 * 2081 * To avoid allocating and stashing a context we piggyback on the OSD 2082 * request. A HEAD update has two ops (assert_locked). For new_state 2083 * and current_state we decode our own object_map_update op, encoded in 2084 * rbd_cls_object_map_update(). 2085 */ 2086 static int rbd_object_map_update_finish(struct rbd_obj_request *obj_req, 2087 struct ceph_osd_request *osd_req) 2088 { 2089 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2090 struct ceph_osd_data *osd_data; 2091 u64 objno; 2092 u8 state, new_state, current_state; 2093 bool has_current_state; 2094 void *p; 2095 2096 if (osd_req->r_result) 2097 return osd_req->r_result; 2098 2099 /* 2100 * Nothing to do for a snapshot object map. 2101 */ 2102 if (osd_req->r_num_ops == 1) 2103 return 0; 2104 2105 /* 2106 * Update in-memory HEAD object map. 2107 */ 2108 rbd_assert(osd_req->r_num_ops == 2); 2109 osd_data = osd_req_op_data(osd_req, 1, cls, request_data); 2110 rbd_assert(osd_data->type == CEPH_OSD_DATA_TYPE_PAGES); 2111 2112 p = page_address(osd_data->pages[0]); 2113 objno = ceph_decode_64(&p); 2114 rbd_assert(objno == obj_req->ex.oe_objno); 2115 rbd_assert(ceph_decode_64(&p) == objno + 1); 2116 new_state = ceph_decode_8(&p); 2117 has_current_state = ceph_decode_8(&p); 2118 if (has_current_state) 2119 current_state = ceph_decode_8(&p); 2120 2121 spin_lock(&rbd_dev->object_map_lock); 2122 state = __rbd_object_map_get(rbd_dev, objno); 2123 if (!has_current_state || current_state == state || 2124 (current_state == OBJECT_EXISTS && state == OBJECT_EXISTS_CLEAN)) 2125 __rbd_object_map_set(rbd_dev, objno, new_state); 2126 spin_unlock(&rbd_dev->object_map_lock); 2127 2128 return 0; 2129 } 2130 2131 static void rbd_object_map_callback(struct ceph_osd_request *osd_req) 2132 { 2133 struct rbd_obj_request *obj_req = osd_req->r_priv; 2134 int result; 2135 2136 dout("%s osd_req %p result %d for obj_req %p\n", __func__, osd_req, 2137 osd_req->r_result, obj_req); 2138 2139 result = rbd_object_map_update_finish(obj_req, osd_req); 2140 rbd_obj_handle_request(obj_req, result); 2141 } 2142 2143 static bool update_needed(struct rbd_device *rbd_dev, u64 objno, u8 new_state) 2144 { 2145 u8 state = rbd_object_map_get(rbd_dev, objno); 2146 2147 if (state == new_state || 2148 (new_state == OBJECT_PENDING && state == OBJECT_NONEXISTENT) || 2149 (new_state == OBJECT_NONEXISTENT && state != OBJECT_PENDING)) 2150 return false; 2151 2152 return true; 2153 } 2154 2155 static int rbd_cls_object_map_update(struct ceph_osd_request *req, 2156 int which, u64 objno, u8 new_state, 2157 const u8 *current_state) 2158 { 2159 struct page **pages; 2160 void *p, *start; 2161 int ret; 2162 2163 ret = osd_req_op_cls_init(req, which, "rbd", "object_map_update"); 2164 if (ret) 2165 return ret; 2166 2167 pages = ceph_alloc_page_vector(1, GFP_NOIO); 2168 if (IS_ERR(pages)) 2169 return PTR_ERR(pages); 2170 2171 p = start = page_address(pages[0]); 2172 ceph_encode_64(&p, objno); 2173 ceph_encode_64(&p, objno + 1); 2174 ceph_encode_8(&p, new_state); 2175 if (current_state) { 2176 ceph_encode_8(&p, 1); 2177 ceph_encode_8(&p, *current_state); 2178 } else { 2179 ceph_encode_8(&p, 0); 2180 } 2181 2182 osd_req_op_cls_request_data_pages(req, which, pages, p - start, 0, 2183 false, true); 2184 return 0; 2185 } 2186 2187 /* 2188 * Return: 2189 * 0 - object map update sent 2190 * 1 - object map update isn't needed 2191 * <0 - error 2192 */ 2193 static int rbd_object_map_update(struct rbd_obj_request *obj_req, u64 snap_id, 2194 u8 new_state, const u8 *current_state) 2195 { 2196 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2197 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 2198 struct ceph_osd_request *req; 2199 int num_ops = 1; 2200 int which = 0; 2201 int ret; 2202 2203 if (snap_id == CEPH_NOSNAP) { 2204 if (!update_needed(rbd_dev, obj_req->ex.oe_objno, new_state)) 2205 return 1; 2206 2207 num_ops++; /* assert_locked */ 2208 } 2209 2210 req = ceph_osdc_alloc_request(osdc, NULL, num_ops, false, GFP_NOIO); 2211 if (!req) 2212 return -ENOMEM; 2213 2214 list_add_tail(&req->r_private_item, &obj_req->osd_reqs); 2215 req->r_callback = rbd_object_map_callback; 2216 req->r_priv = obj_req; 2217 2218 rbd_object_map_name(rbd_dev, snap_id, &req->r_base_oid); 2219 ceph_oloc_copy(&req->r_base_oloc, &rbd_dev->header_oloc); 2220 req->r_flags = CEPH_OSD_FLAG_WRITE; 2221 ktime_get_real_ts64(&req->r_mtime); 2222 2223 if (snap_id == CEPH_NOSNAP) { 2224 /* 2225 * Protect against possible race conditions during lock 2226 * ownership transitions. 2227 */ 2228 ret = ceph_cls_assert_locked(req, which++, RBD_LOCK_NAME, 2229 CEPH_CLS_LOCK_EXCLUSIVE, "", ""); 2230 if (ret) 2231 return ret; 2232 } 2233 2234 ret = rbd_cls_object_map_update(req, which, obj_req->ex.oe_objno, 2235 new_state, current_state); 2236 if (ret) 2237 return ret; 2238 2239 ret = ceph_osdc_alloc_messages(req, GFP_NOIO); 2240 if (ret) 2241 return ret; 2242 2243 ceph_osdc_start_request(osdc, req, false); 2244 return 0; 2245 } 2246 2247 static void prune_extents(struct ceph_file_extent *img_extents, 2248 u32 *num_img_extents, u64 overlap) 2249 { 2250 u32 cnt = *num_img_extents; 2251 2252 /* drop extents completely beyond the overlap */ 2253 while (cnt && img_extents[cnt - 1].fe_off >= overlap) 2254 cnt--; 2255 2256 if (cnt) { 2257 struct ceph_file_extent *ex = &img_extents[cnt - 1]; 2258 2259 /* trim final overlapping extent */ 2260 if (ex->fe_off + ex->fe_len > overlap) 2261 ex->fe_len = overlap - ex->fe_off; 2262 } 2263 2264 *num_img_extents = cnt; 2265 } 2266 2267 /* 2268 * Determine the byte range(s) covered by either just the object extent 2269 * or the entire object in the parent image. 2270 */ 2271 static int rbd_obj_calc_img_extents(struct rbd_obj_request *obj_req, 2272 bool entire) 2273 { 2274 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2275 int ret; 2276 2277 if (!rbd_dev->parent_overlap) 2278 return 0; 2279 2280 ret = ceph_extent_to_file(&rbd_dev->layout, obj_req->ex.oe_objno, 2281 entire ? 0 : obj_req->ex.oe_off, 2282 entire ? rbd_dev->layout.object_size : 2283 obj_req->ex.oe_len, 2284 &obj_req->img_extents, 2285 &obj_req->num_img_extents); 2286 if (ret) 2287 return ret; 2288 2289 prune_extents(obj_req->img_extents, &obj_req->num_img_extents, 2290 rbd_dev->parent_overlap); 2291 return 0; 2292 } 2293 2294 static void rbd_osd_setup_data(struct ceph_osd_request *osd_req, int which) 2295 { 2296 struct rbd_obj_request *obj_req = osd_req->r_priv; 2297 2298 switch (obj_req->img_request->data_type) { 2299 case OBJ_REQUEST_BIO: 2300 osd_req_op_extent_osd_data_bio(osd_req, which, 2301 &obj_req->bio_pos, 2302 obj_req->ex.oe_len); 2303 break; 2304 case OBJ_REQUEST_BVECS: 2305 case OBJ_REQUEST_OWN_BVECS: 2306 rbd_assert(obj_req->bvec_pos.iter.bi_size == 2307 obj_req->ex.oe_len); 2308 rbd_assert(obj_req->bvec_idx == obj_req->bvec_count); 2309 osd_req_op_extent_osd_data_bvec_pos(osd_req, which, 2310 &obj_req->bvec_pos); 2311 break; 2312 default: 2313 BUG(); 2314 } 2315 } 2316 2317 static int rbd_osd_setup_stat(struct ceph_osd_request *osd_req, int which) 2318 { 2319 struct page **pages; 2320 2321 /* 2322 * The response data for a STAT call consists of: 2323 * le64 length; 2324 * struct { 2325 * le32 tv_sec; 2326 * le32 tv_nsec; 2327 * } mtime; 2328 */ 2329 pages = ceph_alloc_page_vector(1, GFP_NOIO); 2330 if (IS_ERR(pages)) 2331 return PTR_ERR(pages); 2332 2333 osd_req_op_init(osd_req, which, CEPH_OSD_OP_STAT, 0); 2334 osd_req_op_raw_data_in_pages(osd_req, which, pages, 2335 8 + sizeof(struct ceph_timespec), 2336 0, false, true); 2337 return 0; 2338 } 2339 2340 static int rbd_osd_setup_copyup(struct ceph_osd_request *osd_req, int which, 2341 u32 bytes) 2342 { 2343 struct rbd_obj_request *obj_req = osd_req->r_priv; 2344 int ret; 2345 2346 ret = osd_req_op_cls_init(osd_req, which, "rbd", "copyup"); 2347 if (ret) 2348 return ret; 2349 2350 osd_req_op_cls_request_data_bvecs(osd_req, which, obj_req->copyup_bvecs, 2351 obj_req->copyup_bvec_count, bytes); 2352 return 0; 2353 } 2354 2355 static int rbd_obj_init_read(struct rbd_obj_request *obj_req) 2356 { 2357 obj_req->read_state = RBD_OBJ_READ_START; 2358 return 0; 2359 } 2360 2361 static void __rbd_osd_setup_write_ops(struct ceph_osd_request *osd_req, 2362 int which) 2363 { 2364 struct rbd_obj_request *obj_req = osd_req->r_priv; 2365 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2366 u16 opcode; 2367 2368 if (!use_object_map(rbd_dev) || 2369 !(obj_req->flags & RBD_OBJ_FLAG_MAY_EXIST)) { 2370 osd_req_op_alloc_hint_init(osd_req, which++, 2371 rbd_dev->layout.object_size, 2372 rbd_dev->layout.object_size); 2373 } 2374 2375 if (rbd_obj_is_entire(obj_req)) 2376 opcode = CEPH_OSD_OP_WRITEFULL; 2377 else 2378 opcode = CEPH_OSD_OP_WRITE; 2379 2380 osd_req_op_extent_init(osd_req, which, opcode, 2381 obj_req->ex.oe_off, obj_req->ex.oe_len, 0, 0); 2382 rbd_osd_setup_data(osd_req, which); 2383 } 2384 2385 static int rbd_obj_init_write(struct rbd_obj_request *obj_req) 2386 { 2387 int ret; 2388 2389 /* reverse map the entire object onto the parent */ 2390 ret = rbd_obj_calc_img_extents(obj_req, true); 2391 if (ret) 2392 return ret; 2393 2394 if (rbd_obj_copyup_enabled(obj_req)) 2395 obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ENABLED; 2396 2397 obj_req->write_state = RBD_OBJ_WRITE_START; 2398 return 0; 2399 } 2400 2401 static u16 truncate_or_zero_opcode(struct rbd_obj_request *obj_req) 2402 { 2403 return rbd_obj_is_tail(obj_req) ? CEPH_OSD_OP_TRUNCATE : 2404 CEPH_OSD_OP_ZERO; 2405 } 2406 2407 static void __rbd_osd_setup_discard_ops(struct ceph_osd_request *osd_req, 2408 int which) 2409 { 2410 struct rbd_obj_request *obj_req = osd_req->r_priv; 2411 2412 if (rbd_obj_is_entire(obj_req) && !obj_req->num_img_extents) { 2413 rbd_assert(obj_req->flags & RBD_OBJ_FLAG_DELETION); 2414 osd_req_op_init(osd_req, which, CEPH_OSD_OP_DELETE, 0); 2415 } else { 2416 osd_req_op_extent_init(osd_req, which, 2417 truncate_or_zero_opcode(obj_req), 2418 obj_req->ex.oe_off, obj_req->ex.oe_len, 2419 0, 0); 2420 } 2421 } 2422 2423 static int rbd_obj_init_discard(struct rbd_obj_request *obj_req) 2424 { 2425 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2426 u64 off, next_off; 2427 int ret; 2428 2429 /* 2430 * Align the range to alloc_size boundary and punt on discards 2431 * that are too small to free up any space. 2432 * 2433 * alloc_size == object_size && is_tail() is a special case for 2434 * filestore with filestore_punch_hole = false, needed to allow 2435 * truncate (in addition to delete). 2436 */ 2437 if (rbd_dev->opts->alloc_size != rbd_dev->layout.object_size || 2438 !rbd_obj_is_tail(obj_req)) { 2439 off = round_up(obj_req->ex.oe_off, rbd_dev->opts->alloc_size); 2440 next_off = round_down(obj_req->ex.oe_off + obj_req->ex.oe_len, 2441 rbd_dev->opts->alloc_size); 2442 if (off >= next_off) 2443 return 1; 2444 2445 dout("%s %p %llu~%llu -> %llu~%llu\n", __func__, 2446 obj_req, obj_req->ex.oe_off, obj_req->ex.oe_len, 2447 off, next_off - off); 2448 obj_req->ex.oe_off = off; 2449 obj_req->ex.oe_len = next_off - off; 2450 } 2451 2452 /* reverse map the entire object onto the parent */ 2453 ret = rbd_obj_calc_img_extents(obj_req, true); 2454 if (ret) 2455 return ret; 2456 2457 obj_req->flags |= RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT; 2458 if (rbd_obj_is_entire(obj_req) && !obj_req->num_img_extents) 2459 obj_req->flags |= RBD_OBJ_FLAG_DELETION; 2460 2461 obj_req->write_state = RBD_OBJ_WRITE_START; 2462 return 0; 2463 } 2464 2465 static void __rbd_osd_setup_zeroout_ops(struct ceph_osd_request *osd_req, 2466 int which) 2467 { 2468 struct rbd_obj_request *obj_req = osd_req->r_priv; 2469 u16 opcode; 2470 2471 if (rbd_obj_is_entire(obj_req)) { 2472 if (obj_req->num_img_extents) { 2473 if (!(obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED)) 2474 osd_req_op_init(osd_req, which++, 2475 CEPH_OSD_OP_CREATE, 0); 2476 opcode = CEPH_OSD_OP_TRUNCATE; 2477 } else { 2478 rbd_assert(obj_req->flags & RBD_OBJ_FLAG_DELETION); 2479 osd_req_op_init(osd_req, which++, 2480 CEPH_OSD_OP_DELETE, 0); 2481 opcode = 0; 2482 } 2483 } else { 2484 opcode = truncate_or_zero_opcode(obj_req); 2485 } 2486 2487 if (opcode) 2488 osd_req_op_extent_init(osd_req, which, opcode, 2489 obj_req->ex.oe_off, obj_req->ex.oe_len, 2490 0, 0); 2491 } 2492 2493 static int rbd_obj_init_zeroout(struct rbd_obj_request *obj_req) 2494 { 2495 int ret; 2496 2497 /* reverse map the entire object onto the parent */ 2498 ret = rbd_obj_calc_img_extents(obj_req, true); 2499 if (ret) 2500 return ret; 2501 2502 if (rbd_obj_copyup_enabled(obj_req)) 2503 obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ENABLED; 2504 if (!obj_req->num_img_extents) { 2505 obj_req->flags |= RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT; 2506 if (rbd_obj_is_entire(obj_req)) 2507 obj_req->flags |= RBD_OBJ_FLAG_DELETION; 2508 } 2509 2510 obj_req->write_state = RBD_OBJ_WRITE_START; 2511 return 0; 2512 } 2513 2514 static int count_write_ops(struct rbd_obj_request *obj_req) 2515 { 2516 struct rbd_img_request *img_req = obj_req->img_request; 2517 2518 switch (img_req->op_type) { 2519 case OBJ_OP_WRITE: 2520 if (!use_object_map(img_req->rbd_dev) || 2521 !(obj_req->flags & RBD_OBJ_FLAG_MAY_EXIST)) 2522 return 2; /* setallochint + write/writefull */ 2523 2524 return 1; /* write/writefull */ 2525 case OBJ_OP_DISCARD: 2526 return 1; /* delete/truncate/zero */ 2527 case OBJ_OP_ZEROOUT: 2528 if (rbd_obj_is_entire(obj_req) && obj_req->num_img_extents && 2529 !(obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED)) 2530 return 2; /* create + truncate */ 2531 2532 return 1; /* delete/truncate/zero */ 2533 default: 2534 BUG(); 2535 } 2536 } 2537 2538 static void rbd_osd_setup_write_ops(struct ceph_osd_request *osd_req, 2539 int which) 2540 { 2541 struct rbd_obj_request *obj_req = osd_req->r_priv; 2542 2543 switch (obj_req->img_request->op_type) { 2544 case OBJ_OP_WRITE: 2545 __rbd_osd_setup_write_ops(osd_req, which); 2546 break; 2547 case OBJ_OP_DISCARD: 2548 __rbd_osd_setup_discard_ops(osd_req, which); 2549 break; 2550 case OBJ_OP_ZEROOUT: 2551 __rbd_osd_setup_zeroout_ops(osd_req, which); 2552 break; 2553 default: 2554 BUG(); 2555 } 2556 } 2557 2558 /* 2559 * Prune the list of object requests (adjust offset and/or length, drop 2560 * redundant requests). Prepare object request state machines and image 2561 * request state machine for execution. 2562 */ 2563 static int __rbd_img_fill_request(struct rbd_img_request *img_req) 2564 { 2565 struct rbd_obj_request *obj_req, *next_obj_req; 2566 int ret; 2567 2568 for_each_obj_request_safe(img_req, obj_req, next_obj_req) { 2569 switch (img_req->op_type) { 2570 case OBJ_OP_READ: 2571 ret = rbd_obj_init_read(obj_req); 2572 break; 2573 case OBJ_OP_WRITE: 2574 ret = rbd_obj_init_write(obj_req); 2575 break; 2576 case OBJ_OP_DISCARD: 2577 ret = rbd_obj_init_discard(obj_req); 2578 break; 2579 case OBJ_OP_ZEROOUT: 2580 ret = rbd_obj_init_zeroout(obj_req); 2581 break; 2582 default: 2583 BUG(); 2584 } 2585 if (ret < 0) 2586 return ret; 2587 if (ret > 0) { 2588 rbd_img_obj_request_del(img_req, obj_req); 2589 continue; 2590 } 2591 } 2592 2593 img_req->state = RBD_IMG_START; 2594 return 0; 2595 } 2596 2597 union rbd_img_fill_iter { 2598 struct ceph_bio_iter bio_iter; 2599 struct ceph_bvec_iter bvec_iter; 2600 }; 2601 2602 struct rbd_img_fill_ctx { 2603 enum obj_request_type pos_type; 2604 union rbd_img_fill_iter *pos; 2605 union rbd_img_fill_iter iter; 2606 ceph_object_extent_fn_t set_pos_fn; 2607 ceph_object_extent_fn_t count_fn; 2608 ceph_object_extent_fn_t copy_fn; 2609 }; 2610 2611 static struct ceph_object_extent *alloc_object_extent(void *arg) 2612 { 2613 struct rbd_img_request *img_req = arg; 2614 struct rbd_obj_request *obj_req; 2615 2616 obj_req = rbd_obj_request_create(); 2617 if (!obj_req) 2618 return NULL; 2619 2620 rbd_img_obj_request_add(img_req, obj_req); 2621 return &obj_req->ex; 2622 } 2623 2624 /* 2625 * While su != os && sc == 1 is technically not fancy (it's the same 2626 * layout as su == os && sc == 1), we can't use the nocopy path for it 2627 * because ->set_pos_fn() should be called only once per object. 2628 * ceph_file_to_extents() invokes action_fn once per stripe unit, so 2629 * treat su != os && sc == 1 as fancy. 2630 */ 2631 static bool rbd_layout_is_fancy(struct ceph_file_layout *l) 2632 { 2633 return l->stripe_unit != l->object_size; 2634 } 2635 2636 static int rbd_img_fill_request_nocopy(struct rbd_img_request *img_req, 2637 struct ceph_file_extent *img_extents, 2638 u32 num_img_extents, 2639 struct rbd_img_fill_ctx *fctx) 2640 { 2641 u32 i; 2642 int ret; 2643 2644 img_req->data_type = fctx->pos_type; 2645 2646 /* 2647 * Create object requests and set each object request's starting 2648 * position in the provided bio (list) or bio_vec array. 2649 */ 2650 fctx->iter = *fctx->pos; 2651 for (i = 0; i < num_img_extents; i++) { 2652 ret = ceph_file_to_extents(&img_req->rbd_dev->layout, 2653 img_extents[i].fe_off, 2654 img_extents[i].fe_len, 2655 &img_req->object_extents, 2656 alloc_object_extent, img_req, 2657 fctx->set_pos_fn, &fctx->iter); 2658 if (ret) 2659 return ret; 2660 } 2661 2662 return __rbd_img_fill_request(img_req); 2663 } 2664 2665 /* 2666 * Map a list of image extents to a list of object extents, create the 2667 * corresponding object requests (normally each to a different object, 2668 * but not always) and add them to @img_req. For each object request, 2669 * set up its data descriptor to point to the corresponding chunk(s) of 2670 * @fctx->pos data buffer. 2671 * 2672 * Because ceph_file_to_extents() will merge adjacent object extents 2673 * together, each object request's data descriptor may point to multiple 2674 * different chunks of @fctx->pos data buffer. 2675 * 2676 * @fctx->pos data buffer is assumed to be large enough. 2677 */ 2678 static int rbd_img_fill_request(struct rbd_img_request *img_req, 2679 struct ceph_file_extent *img_extents, 2680 u32 num_img_extents, 2681 struct rbd_img_fill_ctx *fctx) 2682 { 2683 struct rbd_device *rbd_dev = img_req->rbd_dev; 2684 struct rbd_obj_request *obj_req; 2685 u32 i; 2686 int ret; 2687 2688 if (fctx->pos_type == OBJ_REQUEST_NODATA || 2689 !rbd_layout_is_fancy(&rbd_dev->layout)) 2690 return rbd_img_fill_request_nocopy(img_req, img_extents, 2691 num_img_extents, fctx); 2692 2693 img_req->data_type = OBJ_REQUEST_OWN_BVECS; 2694 2695 /* 2696 * Create object requests and determine ->bvec_count for each object 2697 * request. Note that ->bvec_count sum over all object requests may 2698 * be greater than the number of bio_vecs in the provided bio (list) 2699 * or bio_vec array because when mapped, those bio_vecs can straddle 2700 * stripe unit boundaries. 2701 */ 2702 fctx->iter = *fctx->pos; 2703 for (i = 0; i < num_img_extents; i++) { 2704 ret = ceph_file_to_extents(&rbd_dev->layout, 2705 img_extents[i].fe_off, 2706 img_extents[i].fe_len, 2707 &img_req->object_extents, 2708 alloc_object_extent, img_req, 2709 fctx->count_fn, &fctx->iter); 2710 if (ret) 2711 return ret; 2712 } 2713 2714 for_each_obj_request(img_req, obj_req) { 2715 obj_req->bvec_pos.bvecs = kmalloc_array(obj_req->bvec_count, 2716 sizeof(*obj_req->bvec_pos.bvecs), 2717 GFP_NOIO); 2718 if (!obj_req->bvec_pos.bvecs) 2719 return -ENOMEM; 2720 } 2721 2722 /* 2723 * Fill in each object request's private bio_vec array, splitting and 2724 * rearranging the provided bio_vecs in stripe unit chunks as needed. 2725 */ 2726 fctx->iter = *fctx->pos; 2727 for (i = 0; i < num_img_extents; i++) { 2728 ret = ceph_iterate_extents(&rbd_dev->layout, 2729 img_extents[i].fe_off, 2730 img_extents[i].fe_len, 2731 &img_req->object_extents, 2732 fctx->copy_fn, &fctx->iter); 2733 if (ret) 2734 return ret; 2735 } 2736 2737 return __rbd_img_fill_request(img_req); 2738 } 2739 2740 static int rbd_img_fill_nodata(struct rbd_img_request *img_req, 2741 u64 off, u64 len) 2742 { 2743 struct ceph_file_extent ex = { off, len }; 2744 union rbd_img_fill_iter dummy; 2745 struct rbd_img_fill_ctx fctx = { 2746 .pos_type = OBJ_REQUEST_NODATA, 2747 .pos = &dummy, 2748 }; 2749 2750 return rbd_img_fill_request(img_req, &ex, 1, &fctx); 2751 } 2752 2753 static void set_bio_pos(struct ceph_object_extent *ex, u32 bytes, void *arg) 2754 { 2755 struct rbd_obj_request *obj_req = 2756 container_of(ex, struct rbd_obj_request, ex); 2757 struct ceph_bio_iter *it = arg; 2758 2759 dout("%s objno %llu bytes %u\n", __func__, ex->oe_objno, bytes); 2760 obj_req->bio_pos = *it; 2761 ceph_bio_iter_advance(it, bytes); 2762 } 2763 2764 static void count_bio_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2765 { 2766 struct rbd_obj_request *obj_req = 2767 container_of(ex, struct rbd_obj_request, ex); 2768 struct ceph_bio_iter *it = arg; 2769 2770 dout("%s objno %llu bytes %u\n", __func__, ex->oe_objno, bytes); 2771 ceph_bio_iter_advance_step(it, bytes, ({ 2772 obj_req->bvec_count++; 2773 })); 2774 2775 } 2776 2777 static void copy_bio_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2778 { 2779 struct rbd_obj_request *obj_req = 2780 container_of(ex, struct rbd_obj_request, ex); 2781 struct ceph_bio_iter *it = arg; 2782 2783 dout("%s objno %llu bytes %u\n", __func__, ex->oe_objno, bytes); 2784 ceph_bio_iter_advance_step(it, bytes, ({ 2785 obj_req->bvec_pos.bvecs[obj_req->bvec_idx++] = bv; 2786 obj_req->bvec_pos.iter.bi_size += bv.bv_len; 2787 })); 2788 } 2789 2790 static int __rbd_img_fill_from_bio(struct rbd_img_request *img_req, 2791 struct ceph_file_extent *img_extents, 2792 u32 num_img_extents, 2793 struct ceph_bio_iter *bio_pos) 2794 { 2795 struct rbd_img_fill_ctx fctx = { 2796 .pos_type = OBJ_REQUEST_BIO, 2797 .pos = (union rbd_img_fill_iter *)bio_pos, 2798 .set_pos_fn = set_bio_pos, 2799 .count_fn = count_bio_bvecs, 2800 .copy_fn = copy_bio_bvecs, 2801 }; 2802 2803 return rbd_img_fill_request(img_req, img_extents, num_img_extents, 2804 &fctx); 2805 } 2806 2807 static int rbd_img_fill_from_bio(struct rbd_img_request *img_req, 2808 u64 off, u64 len, struct bio *bio) 2809 { 2810 struct ceph_file_extent ex = { off, len }; 2811 struct ceph_bio_iter it = { .bio = bio, .iter = bio->bi_iter }; 2812 2813 return __rbd_img_fill_from_bio(img_req, &ex, 1, &it); 2814 } 2815 2816 static void set_bvec_pos(struct ceph_object_extent *ex, u32 bytes, void *arg) 2817 { 2818 struct rbd_obj_request *obj_req = 2819 container_of(ex, struct rbd_obj_request, ex); 2820 struct ceph_bvec_iter *it = arg; 2821 2822 obj_req->bvec_pos = *it; 2823 ceph_bvec_iter_shorten(&obj_req->bvec_pos, bytes); 2824 ceph_bvec_iter_advance(it, bytes); 2825 } 2826 2827 static void count_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2828 { 2829 struct rbd_obj_request *obj_req = 2830 container_of(ex, struct rbd_obj_request, ex); 2831 struct ceph_bvec_iter *it = arg; 2832 2833 ceph_bvec_iter_advance_step(it, bytes, ({ 2834 obj_req->bvec_count++; 2835 })); 2836 } 2837 2838 static void copy_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2839 { 2840 struct rbd_obj_request *obj_req = 2841 container_of(ex, struct rbd_obj_request, ex); 2842 struct ceph_bvec_iter *it = arg; 2843 2844 ceph_bvec_iter_advance_step(it, bytes, ({ 2845 obj_req->bvec_pos.bvecs[obj_req->bvec_idx++] = bv; 2846 obj_req->bvec_pos.iter.bi_size += bv.bv_len; 2847 })); 2848 } 2849 2850 static int __rbd_img_fill_from_bvecs(struct rbd_img_request *img_req, 2851 struct ceph_file_extent *img_extents, 2852 u32 num_img_extents, 2853 struct ceph_bvec_iter *bvec_pos) 2854 { 2855 struct rbd_img_fill_ctx fctx = { 2856 .pos_type = OBJ_REQUEST_BVECS, 2857 .pos = (union rbd_img_fill_iter *)bvec_pos, 2858 .set_pos_fn = set_bvec_pos, 2859 .count_fn = count_bvecs, 2860 .copy_fn = copy_bvecs, 2861 }; 2862 2863 return rbd_img_fill_request(img_req, img_extents, num_img_extents, 2864 &fctx); 2865 } 2866 2867 static int rbd_img_fill_from_bvecs(struct rbd_img_request *img_req, 2868 struct ceph_file_extent *img_extents, 2869 u32 num_img_extents, 2870 struct bio_vec *bvecs) 2871 { 2872 struct ceph_bvec_iter it = { 2873 .bvecs = bvecs, 2874 .iter = { .bi_size = ceph_file_extents_bytes(img_extents, 2875 num_img_extents) }, 2876 }; 2877 2878 return __rbd_img_fill_from_bvecs(img_req, img_extents, num_img_extents, 2879 &it); 2880 } 2881 2882 static void rbd_img_handle_request_work(struct work_struct *work) 2883 { 2884 struct rbd_img_request *img_req = 2885 container_of(work, struct rbd_img_request, work); 2886 2887 rbd_img_handle_request(img_req, img_req->work_result); 2888 } 2889 2890 static void rbd_img_schedule(struct rbd_img_request *img_req, int result) 2891 { 2892 INIT_WORK(&img_req->work, rbd_img_handle_request_work); 2893 img_req->work_result = result; 2894 queue_work(rbd_wq, &img_req->work); 2895 } 2896 2897 static bool rbd_obj_may_exist(struct rbd_obj_request *obj_req) 2898 { 2899 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2900 2901 if (rbd_object_map_may_exist(rbd_dev, obj_req->ex.oe_objno)) { 2902 obj_req->flags |= RBD_OBJ_FLAG_MAY_EXIST; 2903 return true; 2904 } 2905 2906 dout("%s %p objno %llu assuming dne\n", __func__, obj_req, 2907 obj_req->ex.oe_objno); 2908 return false; 2909 } 2910 2911 static int rbd_obj_read_object(struct rbd_obj_request *obj_req) 2912 { 2913 struct ceph_osd_request *osd_req; 2914 int ret; 2915 2916 osd_req = __rbd_obj_add_osd_request(obj_req, NULL, 1); 2917 if (IS_ERR(osd_req)) 2918 return PTR_ERR(osd_req); 2919 2920 osd_req_op_extent_init(osd_req, 0, CEPH_OSD_OP_READ, 2921 obj_req->ex.oe_off, obj_req->ex.oe_len, 0, 0); 2922 rbd_osd_setup_data(osd_req, 0); 2923 rbd_osd_format_read(osd_req); 2924 2925 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 2926 if (ret) 2927 return ret; 2928 2929 rbd_osd_submit(osd_req); 2930 return 0; 2931 } 2932 2933 static int rbd_obj_read_from_parent(struct rbd_obj_request *obj_req) 2934 { 2935 struct rbd_img_request *img_req = obj_req->img_request; 2936 struct rbd_img_request *child_img_req; 2937 int ret; 2938 2939 child_img_req = rbd_img_request_create(img_req->rbd_dev->parent, 2940 OBJ_OP_READ, NULL); 2941 if (!child_img_req) 2942 return -ENOMEM; 2943 2944 __set_bit(IMG_REQ_CHILD, &child_img_req->flags); 2945 child_img_req->obj_request = obj_req; 2946 2947 if (!rbd_img_is_write(img_req)) { 2948 switch (img_req->data_type) { 2949 case OBJ_REQUEST_BIO: 2950 ret = __rbd_img_fill_from_bio(child_img_req, 2951 obj_req->img_extents, 2952 obj_req->num_img_extents, 2953 &obj_req->bio_pos); 2954 break; 2955 case OBJ_REQUEST_BVECS: 2956 case OBJ_REQUEST_OWN_BVECS: 2957 ret = __rbd_img_fill_from_bvecs(child_img_req, 2958 obj_req->img_extents, 2959 obj_req->num_img_extents, 2960 &obj_req->bvec_pos); 2961 break; 2962 default: 2963 BUG(); 2964 } 2965 } else { 2966 ret = rbd_img_fill_from_bvecs(child_img_req, 2967 obj_req->img_extents, 2968 obj_req->num_img_extents, 2969 obj_req->copyup_bvecs); 2970 } 2971 if (ret) { 2972 rbd_img_request_put(child_img_req); 2973 return ret; 2974 } 2975 2976 /* avoid parent chain recursion */ 2977 rbd_img_schedule(child_img_req, 0); 2978 return 0; 2979 } 2980 2981 static bool rbd_obj_advance_read(struct rbd_obj_request *obj_req, int *result) 2982 { 2983 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2984 int ret; 2985 2986 again: 2987 switch (obj_req->read_state) { 2988 case RBD_OBJ_READ_START: 2989 rbd_assert(!*result); 2990 2991 if (!rbd_obj_may_exist(obj_req)) { 2992 *result = -ENOENT; 2993 obj_req->read_state = RBD_OBJ_READ_OBJECT; 2994 goto again; 2995 } 2996 2997 ret = rbd_obj_read_object(obj_req); 2998 if (ret) { 2999 *result = ret; 3000 return true; 3001 } 3002 obj_req->read_state = RBD_OBJ_READ_OBJECT; 3003 return false; 3004 case RBD_OBJ_READ_OBJECT: 3005 if (*result == -ENOENT && rbd_dev->parent_overlap) { 3006 /* reverse map this object extent onto the parent */ 3007 ret = rbd_obj_calc_img_extents(obj_req, false); 3008 if (ret) { 3009 *result = ret; 3010 return true; 3011 } 3012 if (obj_req->num_img_extents) { 3013 ret = rbd_obj_read_from_parent(obj_req); 3014 if (ret) { 3015 *result = ret; 3016 return true; 3017 } 3018 obj_req->read_state = RBD_OBJ_READ_PARENT; 3019 return false; 3020 } 3021 } 3022 3023 /* 3024 * -ENOENT means a hole in the image -- zero-fill the entire 3025 * length of the request. A short read also implies zero-fill 3026 * to the end of the request. 3027 */ 3028 if (*result == -ENOENT) { 3029 rbd_obj_zero_range(obj_req, 0, obj_req->ex.oe_len); 3030 *result = 0; 3031 } else if (*result >= 0) { 3032 if (*result < obj_req->ex.oe_len) 3033 rbd_obj_zero_range(obj_req, *result, 3034 obj_req->ex.oe_len - *result); 3035 else 3036 rbd_assert(*result == obj_req->ex.oe_len); 3037 *result = 0; 3038 } 3039 return true; 3040 case RBD_OBJ_READ_PARENT: 3041 return true; 3042 default: 3043 BUG(); 3044 } 3045 } 3046 3047 static bool rbd_obj_write_is_noop(struct rbd_obj_request *obj_req) 3048 { 3049 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3050 3051 if (rbd_object_map_may_exist(rbd_dev, obj_req->ex.oe_objno)) 3052 obj_req->flags |= RBD_OBJ_FLAG_MAY_EXIST; 3053 3054 if (!(obj_req->flags & RBD_OBJ_FLAG_MAY_EXIST) && 3055 (obj_req->flags & RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT)) { 3056 dout("%s %p noop for nonexistent\n", __func__, obj_req); 3057 return true; 3058 } 3059 3060 return false; 3061 } 3062 3063 /* 3064 * Return: 3065 * 0 - object map update sent 3066 * 1 - object map update isn't needed 3067 * <0 - error 3068 */ 3069 static int rbd_obj_write_pre_object_map(struct rbd_obj_request *obj_req) 3070 { 3071 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3072 u8 new_state; 3073 3074 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3075 return 1; 3076 3077 if (obj_req->flags & RBD_OBJ_FLAG_DELETION) 3078 new_state = OBJECT_PENDING; 3079 else 3080 new_state = OBJECT_EXISTS; 3081 3082 return rbd_object_map_update(obj_req, CEPH_NOSNAP, new_state, NULL); 3083 } 3084 3085 static int rbd_obj_write_object(struct rbd_obj_request *obj_req) 3086 { 3087 struct ceph_osd_request *osd_req; 3088 int num_ops = count_write_ops(obj_req); 3089 int which = 0; 3090 int ret; 3091 3092 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED) 3093 num_ops++; /* stat */ 3094 3095 osd_req = rbd_obj_add_osd_request(obj_req, num_ops); 3096 if (IS_ERR(osd_req)) 3097 return PTR_ERR(osd_req); 3098 3099 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED) { 3100 ret = rbd_osd_setup_stat(osd_req, which++); 3101 if (ret) 3102 return ret; 3103 } 3104 3105 rbd_osd_setup_write_ops(osd_req, which); 3106 rbd_osd_format_write(osd_req); 3107 3108 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 3109 if (ret) 3110 return ret; 3111 3112 rbd_osd_submit(osd_req); 3113 return 0; 3114 } 3115 3116 /* 3117 * copyup_bvecs pages are never highmem pages 3118 */ 3119 static bool is_zero_bvecs(struct bio_vec *bvecs, u32 bytes) 3120 { 3121 struct ceph_bvec_iter it = { 3122 .bvecs = bvecs, 3123 .iter = { .bi_size = bytes }, 3124 }; 3125 3126 ceph_bvec_iter_advance_step(&it, bytes, ({ 3127 if (memchr_inv(page_address(bv.bv_page) + bv.bv_offset, 0, 3128 bv.bv_len)) 3129 return false; 3130 })); 3131 return true; 3132 } 3133 3134 #define MODS_ONLY U32_MAX 3135 3136 static int rbd_obj_copyup_empty_snapc(struct rbd_obj_request *obj_req, 3137 u32 bytes) 3138 { 3139 struct ceph_osd_request *osd_req; 3140 int ret; 3141 3142 dout("%s obj_req %p bytes %u\n", __func__, obj_req, bytes); 3143 rbd_assert(bytes > 0 && bytes != MODS_ONLY); 3144 3145 osd_req = __rbd_obj_add_osd_request(obj_req, &rbd_empty_snapc, 1); 3146 if (IS_ERR(osd_req)) 3147 return PTR_ERR(osd_req); 3148 3149 ret = rbd_osd_setup_copyup(osd_req, 0, bytes); 3150 if (ret) 3151 return ret; 3152 3153 rbd_osd_format_write(osd_req); 3154 3155 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 3156 if (ret) 3157 return ret; 3158 3159 rbd_osd_submit(osd_req); 3160 return 0; 3161 } 3162 3163 static int rbd_obj_copyup_current_snapc(struct rbd_obj_request *obj_req, 3164 u32 bytes) 3165 { 3166 struct ceph_osd_request *osd_req; 3167 int num_ops = count_write_ops(obj_req); 3168 int which = 0; 3169 int ret; 3170 3171 dout("%s obj_req %p bytes %u\n", __func__, obj_req, bytes); 3172 3173 if (bytes != MODS_ONLY) 3174 num_ops++; /* copyup */ 3175 3176 osd_req = rbd_obj_add_osd_request(obj_req, num_ops); 3177 if (IS_ERR(osd_req)) 3178 return PTR_ERR(osd_req); 3179 3180 if (bytes != MODS_ONLY) { 3181 ret = rbd_osd_setup_copyup(osd_req, which++, bytes); 3182 if (ret) 3183 return ret; 3184 } 3185 3186 rbd_osd_setup_write_ops(osd_req, which); 3187 rbd_osd_format_write(osd_req); 3188 3189 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 3190 if (ret) 3191 return ret; 3192 3193 rbd_osd_submit(osd_req); 3194 return 0; 3195 } 3196 3197 static int setup_copyup_bvecs(struct rbd_obj_request *obj_req, u64 obj_overlap) 3198 { 3199 u32 i; 3200 3201 rbd_assert(!obj_req->copyup_bvecs); 3202 obj_req->copyup_bvec_count = calc_pages_for(0, obj_overlap); 3203 obj_req->copyup_bvecs = kcalloc(obj_req->copyup_bvec_count, 3204 sizeof(*obj_req->copyup_bvecs), 3205 GFP_NOIO); 3206 if (!obj_req->copyup_bvecs) 3207 return -ENOMEM; 3208 3209 for (i = 0; i < obj_req->copyup_bvec_count; i++) { 3210 unsigned int len = min(obj_overlap, (u64)PAGE_SIZE); 3211 3212 obj_req->copyup_bvecs[i].bv_page = alloc_page(GFP_NOIO); 3213 if (!obj_req->copyup_bvecs[i].bv_page) 3214 return -ENOMEM; 3215 3216 obj_req->copyup_bvecs[i].bv_offset = 0; 3217 obj_req->copyup_bvecs[i].bv_len = len; 3218 obj_overlap -= len; 3219 } 3220 3221 rbd_assert(!obj_overlap); 3222 return 0; 3223 } 3224 3225 /* 3226 * The target object doesn't exist. Read the data for the entire 3227 * target object up to the overlap point (if any) from the parent, 3228 * so we can use it for a copyup. 3229 */ 3230 static int rbd_obj_copyup_read_parent(struct rbd_obj_request *obj_req) 3231 { 3232 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3233 int ret; 3234 3235 rbd_assert(obj_req->num_img_extents); 3236 prune_extents(obj_req->img_extents, &obj_req->num_img_extents, 3237 rbd_dev->parent_overlap); 3238 if (!obj_req->num_img_extents) { 3239 /* 3240 * The overlap has become 0 (most likely because the 3241 * image has been flattened). Re-submit the original write 3242 * request -- pass MODS_ONLY since the copyup isn't needed 3243 * anymore. 3244 */ 3245 return rbd_obj_copyup_current_snapc(obj_req, MODS_ONLY); 3246 } 3247 3248 ret = setup_copyup_bvecs(obj_req, rbd_obj_img_extents_bytes(obj_req)); 3249 if (ret) 3250 return ret; 3251 3252 return rbd_obj_read_from_parent(obj_req); 3253 } 3254 3255 static void rbd_obj_copyup_object_maps(struct rbd_obj_request *obj_req) 3256 { 3257 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3258 struct ceph_snap_context *snapc = obj_req->img_request->snapc; 3259 u8 new_state; 3260 u32 i; 3261 int ret; 3262 3263 rbd_assert(!obj_req->pending.result && !obj_req->pending.num_pending); 3264 3265 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3266 return; 3267 3268 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ZEROS) 3269 return; 3270 3271 for (i = 0; i < snapc->num_snaps; i++) { 3272 if ((rbd_dev->header.features & RBD_FEATURE_FAST_DIFF) && 3273 i + 1 < snapc->num_snaps) 3274 new_state = OBJECT_EXISTS_CLEAN; 3275 else 3276 new_state = OBJECT_EXISTS; 3277 3278 ret = rbd_object_map_update(obj_req, snapc->snaps[i], 3279 new_state, NULL); 3280 if (ret < 0) { 3281 obj_req->pending.result = ret; 3282 return; 3283 } 3284 3285 rbd_assert(!ret); 3286 obj_req->pending.num_pending++; 3287 } 3288 } 3289 3290 static void rbd_obj_copyup_write_object(struct rbd_obj_request *obj_req) 3291 { 3292 u32 bytes = rbd_obj_img_extents_bytes(obj_req); 3293 int ret; 3294 3295 rbd_assert(!obj_req->pending.result && !obj_req->pending.num_pending); 3296 3297 /* 3298 * Only send non-zero copyup data to save some I/O and network 3299 * bandwidth -- zero copyup data is equivalent to the object not 3300 * existing. 3301 */ 3302 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ZEROS) 3303 bytes = 0; 3304 3305 if (obj_req->img_request->snapc->num_snaps && bytes > 0) { 3306 /* 3307 * Send a copyup request with an empty snapshot context to 3308 * deep-copyup the object through all existing snapshots. 3309 * A second request with the current snapshot context will be 3310 * sent for the actual modification. 3311 */ 3312 ret = rbd_obj_copyup_empty_snapc(obj_req, bytes); 3313 if (ret) { 3314 obj_req->pending.result = ret; 3315 return; 3316 } 3317 3318 obj_req->pending.num_pending++; 3319 bytes = MODS_ONLY; 3320 } 3321 3322 ret = rbd_obj_copyup_current_snapc(obj_req, bytes); 3323 if (ret) { 3324 obj_req->pending.result = ret; 3325 return; 3326 } 3327 3328 obj_req->pending.num_pending++; 3329 } 3330 3331 static bool rbd_obj_advance_copyup(struct rbd_obj_request *obj_req, int *result) 3332 { 3333 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3334 int ret; 3335 3336 again: 3337 switch (obj_req->copyup_state) { 3338 case RBD_OBJ_COPYUP_START: 3339 rbd_assert(!*result); 3340 3341 ret = rbd_obj_copyup_read_parent(obj_req); 3342 if (ret) { 3343 *result = ret; 3344 return true; 3345 } 3346 if (obj_req->num_img_extents) 3347 obj_req->copyup_state = RBD_OBJ_COPYUP_READ_PARENT; 3348 else 3349 obj_req->copyup_state = RBD_OBJ_COPYUP_WRITE_OBJECT; 3350 return false; 3351 case RBD_OBJ_COPYUP_READ_PARENT: 3352 if (*result) 3353 return true; 3354 3355 if (is_zero_bvecs(obj_req->copyup_bvecs, 3356 rbd_obj_img_extents_bytes(obj_req))) { 3357 dout("%s %p detected zeros\n", __func__, obj_req); 3358 obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ZEROS; 3359 } 3360 3361 rbd_obj_copyup_object_maps(obj_req); 3362 if (!obj_req->pending.num_pending) { 3363 *result = obj_req->pending.result; 3364 obj_req->copyup_state = RBD_OBJ_COPYUP_OBJECT_MAPS; 3365 goto again; 3366 } 3367 obj_req->copyup_state = __RBD_OBJ_COPYUP_OBJECT_MAPS; 3368 return false; 3369 case __RBD_OBJ_COPYUP_OBJECT_MAPS: 3370 if (!pending_result_dec(&obj_req->pending, result)) 3371 return false; 3372 /* fall through */ 3373 case RBD_OBJ_COPYUP_OBJECT_MAPS: 3374 if (*result) { 3375 rbd_warn(rbd_dev, "snap object map update failed: %d", 3376 *result); 3377 return true; 3378 } 3379 3380 rbd_obj_copyup_write_object(obj_req); 3381 if (!obj_req->pending.num_pending) { 3382 *result = obj_req->pending.result; 3383 obj_req->copyup_state = RBD_OBJ_COPYUP_WRITE_OBJECT; 3384 goto again; 3385 } 3386 obj_req->copyup_state = __RBD_OBJ_COPYUP_WRITE_OBJECT; 3387 return false; 3388 case __RBD_OBJ_COPYUP_WRITE_OBJECT: 3389 if (!pending_result_dec(&obj_req->pending, result)) 3390 return false; 3391 /* fall through */ 3392 case RBD_OBJ_COPYUP_WRITE_OBJECT: 3393 return true; 3394 default: 3395 BUG(); 3396 } 3397 } 3398 3399 /* 3400 * Return: 3401 * 0 - object map update sent 3402 * 1 - object map update isn't needed 3403 * <0 - error 3404 */ 3405 static int rbd_obj_write_post_object_map(struct rbd_obj_request *obj_req) 3406 { 3407 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3408 u8 current_state = OBJECT_PENDING; 3409 3410 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3411 return 1; 3412 3413 if (!(obj_req->flags & RBD_OBJ_FLAG_DELETION)) 3414 return 1; 3415 3416 return rbd_object_map_update(obj_req, CEPH_NOSNAP, OBJECT_NONEXISTENT, 3417 ¤t_state); 3418 } 3419 3420 static bool rbd_obj_advance_write(struct rbd_obj_request *obj_req, int *result) 3421 { 3422 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3423 int ret; 3424 3425 again: 3426 switch (obj_req->write_state) { 3427 case RBD_OBJ_WRITE_START: 3428 rbd_assert(!*result); 3429 3430 if (rbd_obj_write_is_noop(obj_req)) 3431 return true; 3432 3433 ret = rbd_obj_write_pre_object_map(obj_req); 3434 if (ret < 0) { 3435 *result = ret; 3436 return true; 3437 } 3438 obj_req->write_state = RBD_OBJ_WRITE_PRE_OBJECT_MAP; 3439 if (ret > 0) 3440 goto again; 3441 return false; 3442 case RBD_OBJ_WRITE_PRE_OBJECT_MAP: 3443 if (*result) { 3444 rbd_warn(rbd_dev, "pre object map update failed: %d", 3445 *result); 3446 return true; 3447 } 3448 ret = rbd_obj_write_object(obj_req); 3449 if (ret) { 3450 *result = ret; 3451 return true; 3452 } 3453 obj_req->write_state = RBD_OBJ_WRITE_OBJECT; 3454 return false; 3455 case RBD_OBJ_WRITE_OBJECT: 3456 if (*result == -ENOENT) { 3457 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED) { 3458 *result = 0; 3459 obj_req->copyup_state = RBD_OBJ_COPYUP_START; 3460 obj_req->write_state = __RBD_OBJ_WRITE_COPYUP; 3461 goto again; 3462 } 3463 /* 3464 * On a non-existent object: 3465 * delete - -ENOENT, truncate/zero - 0 3466 */ 3467 if (obj_req->flags & RBD_OBJ_FLAG_DELETION) 3468 *result = 0; 3469 } 3470 if (*result) 3471 return true; 3472 3473 obj_req->write_state = RBD_OBJ_WRITE_COPYUP; 3474 goto again; 3475 case __RBD_OBJ_WRITE_COPYUP: 3476 if (!rbd_obj_advance_copyup(obj_req, result)) 3477 return false; 3478 /* fall through */ 3479 case RBD_OBJ_WRITE_COPYUP: 3480 if (*result) { 3481 rbd_warn(rbd_dev, "copyup failed: %d", *result); 3482 return true; 3483 } 3484 ret = rbd_obj_write_post_object_map(obj_req); 3485 if (ret < 0) { 3486 *result = ret; 3487 return true; 3488 } 3489 obj_req->write_state = RBD_OBJ_WRITE_POST_OBJECT_MAP; 3490 if (ret > 0) 3491 goto again; 3492 return false; 3493 case RBD_OBJ_WRITE_POST_OBJECT_MAP: 3494 if (*result) 3495 rbd_warn(rbd_dev, "post object map update failed: %d", 3496 *result); 3497 return true; 3498 default: 3499 BUG(); 3500 } 3501 } 3502 3503 /* 3504 * Return true if @obj_req is completed. 3505 */ 3506 static bool __rbd_obj_handle_request(struct rbd_obj_request *obj_req, 3507 int *result) 3508 { 3509 struct rbd_img_request *img_req = obj_req->img_request; 3510 struct rbd_device *rbd_dev = img_req->rbd_dev; 3511 bool done; 3512 3513 mutex_lock(&obj_req->state_mutex); 3514 if (!rbd_img_is_write(img_req)) 3515 done = rbd_obj_advance_read(obj_req, result); 3516 else 3517 done = rbd_obj_advance_write(obj_req, result); 3518 mutex_unlock(&obj_req->state_mutex); 3519 3520 if (done && *result) { 3521 rbd_assert(*result < 0); 3522 rbd_warn(rbd_dev, "%s at objno %llu %llu~%llu result %d", 3523 obj_op_name(img_req->op_type), obj_req->ex.oe_objno, 3524 obj_req->ex.oe_off, obj_req->ex.oe_len, *result); 3525 } 3526 return done; 3527 } 3528 3529 /* 3530 * This is open-coded in rbd_img_handle_request() to avoid parent chain 3531 * recursion. 3532 */ 3533 static void rbd_obj_handle_request(struct rbd_obj_request *obj_req, int result) 3534 { 3535 if (__rbd_obj_handle_request(obj_req, &result)) 3536 rbd_img_handle_request(obj_req->img_request, result); 3537 } 3538 3539 static bool need_exclusive_lock(struct rbd_img_request *img_req) 3540 { 3541 struct rbd_device *rbd_dev = img_req->rbd_dev; 3542 3543 if (!(rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK)) 3544 return false; 3545 3546 if (rbd_dev->spec->snap_id != CEPH_NOSNAP) 3547 return false; 3548 3549 rbd_assert(!test_bit(IMG_REQ_CHILD, &img_req->flags)); 3550 if (rbd_dev->opts->lock_on_read || 3551 (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3552 return true; 3553 3554 return rbd_img_is_write(img_req); 3555 } 3556 3557 static bool rbd_lock_add_request(struct rbd_img_request *img_req) 3558 { 3559 struct rbd_device *rbd_dev = img_req->rbd_dev; 3560 bool locked; 3561 3562 lockdep_assert_held(&rbd_dev->lock_rwsem); 3563 locked = rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED; 3564 spin_lock(&rbd_dev->lock_lists_lock); 3565 rbd_assert(list_empty(&img_req->lock_item)); 3566 if (!locked) 3567 list_add_tail(&img_req->lock_item, &rbd_dev->acquiring_list); 3568 else 3569 list_add_tail(&img_req->lock_item, &rbd_dev->running_list); 3570 spin_unlock(&rbd_dev->lock_lists_lock); 3571 return locked; 3572 } 3573 3574 static void rbd_lock_del_request(struct rbd_img_request *img_req) 3575 { 3576 struct rbd_device *rbd_dev = img_req->rbd_dev; 3577 bool need_wakeup; 3578 3579 lockdep_assert_held(&rbd_dev->lock_rwsem); 3580 spin_lock(&rbd_dev->lock_lists_lock); 3581 rbd_assert(!list_empty(&img_req->lock_item)); 3582 list_del_init(&img_req->lock_item); 3583 need_wakeup = (rbd_dev->lock_state == RBD_LOCK_STATE_RELEASING && 3584 list_empty(&rbd_dev->running_list)); 3585 spin_unlock(&rbd_dev->lock_lists_lock); 3586 if (need_wakeup) 3587 complete(&rbd_dev->releasing_wait); 3588 } 3589 3590 static int rbd_img_exclusive_lock(struct rbd_img_request *img_req) 3591 { 3592 struct rbd_device *rbd_dev = img_req->rbd_dev; 3593 3594 if (!need_exclusive_lock(img_req)) 3595 return 1; 3596 3597 if (rbd_lock_add_request(img_req)) 3598 return 1; 3599 3600 if (rbd_dev->opts->exclusive) { 3601 WARN_ON(1); /* lock got released? */ 3602 return -EROFS; 3603 } 3604 3605 /* 3606 * Note the use of mod_delayed_work() in rbd_acquire_lock() 3607 * and cancel_delayed_work() in wake_lock_waiters(). 3608 */ 3609 dout("%s rbd_dev %p queueing lock_dwork\n", __func__, rbd_dev); 3610 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 3611 return 0; 3612 } 3613 3614 static void rbd_img_object_requests(struct rbd_img_request *img_req) 3615 { 3616 struct rbd_obj_request *obj_req; 3617 3618 rbd_assert(!img_req->pending.result && !img_req->pending.num_pending); 3619 3620 for_each_obj_request(img_req, obj_req) { 3621 int result = 0; 3622 3623 if (__rbd_obj_handle_request(obj_req, &result)) { 3624 if (result) { 3625 img_req->pending.result = result; 3626 return; 3627 } 3628 } else { 3629 img_req->pending.num_pending++; 3630 } 3631 } 3632 } 3633 3634 static bool rbd_img_advance(struct rbd_img_request *img_req, int *result) 3635 { 3636 struct rbd_device *rbd_dev = img_req->rbd_dev; 3637 int ret; 3638 3639 again: 3640 switch (img_req->state) { 3641 case RBD_IMG_START: 3642 rbd_assert(!*result); 3643 3644 ret = rbd_img_exclusive_lock(img_req); 3645 if (ret < 0) { 3646 *result = ret; 3647 return true; 3648 } 3649 img_req->state = RBD_IMG_EXCLUSIVE_LOCK; 3650 if (ret > 0) 3651 goto again; 3652 return false; 3653 case RBD_IMG_EXCLUSIVE_LOCK: 3654 if (*result) 3655 return true; 3656 3657 rbd_assert(!need_exclusive_lock(img_req) || 3658 __rbd_is_lock_owner(rbd_dev)); 3659 3660 rbd_img_object_requests(img_req); 3661 if (!img_req->pending.num_pending) { 3662 *result = img_req->pending.result; 3663 img_req->state = RBD_IMG_OBJECT_REQUESTS; 3664 goto again; 3665 } 3666 img_req->state = __RBD_IMG_OBJECT_REQUESTS; 3667 return false; 3668 case __RBD_IMG_OBJECT_REQUESTS: 3669 if (!pending_result_dec(&img_req->pending, result)) 3670 return false; 3671 /* fall through */ 3672 case RBD_IMG_OBJECT_REQUESTS: 3673 return true; 3674 default: 3675 BUG(); 3676 } 3677 } 3678 3679 /* 3680 * Return true if @img_req is completed. 3681 */ 3682 static bool __rbd_img_handle_request(struct rbd_img_request *img_req, 3683 int *result) 3684 { 3685 struct rbd_device *rbd_dev = img_req->rbd_dev; 3686 bool done; 3687 3688 if (need_exclusive_lock(img_req)) { 3689 down_read(&rbd_dev->lock_rwsem); 3690 mutex_lock(&img_req->state_mutex); 3691 done = rbd_img_advance(img_req, result); 3692 if (done) 3693 rbd_lock_del_request(img_req); 3694 mutex_unlock(&img_req->state_mutex); 3695 up_read(&rbd_dev->lock_rwsem); 3696 } else { 3697 mutex_lock(&img_req->state_mutex); 3698 done = rbd_img_advance(img_req, result); 3699 mutex_unlock(&img_req->state_mutex); 3700 } 3701 3702 if (done && *result) { 3703 rbd_assert(*result < 0); 3704 rbd_warn(rbd_dev, "%s%s result %d", 3705 test_bit(IMG_REQ_CHILD, &img_req->flags) ? "child " : "", 3706 obj_op_name(img_req->op_type), *result); 3707 } 3708 return done; 3709 } 3710 3711 static void rbd_img_handle_request(struct rbd_img_request *img_req, int result) 3712 { 3713 again: 3714 if (!__rbd_img_handle_request(img_req, &result)) 3715 return; 3716 3717 if (test_bit(IMG_REQ_CHILD, &img_req->flags)) { 3718 struct rbd_obj_request *obj_req = img_req->obj_request; 3719 3720 rbd_img_request_put(img_req); 3721 if (__rbd_obj_handle_request(obj_req, &result)) { 3722 img_req = obj_req->img_request; 3723 goto again; 3724 } 3725 } else { 3726 struct request *rq = img_req->rq; 3727 3728 rbd_img_request_put(img_req); 3729 blk_mq_end_request(rq, errno_to_blk_status(result)); 3730 } 3731 } 3732 3733 static const struct rbd_client_id rbd_empty_cid; 3734 3735 static bool rbd_cid_equal(const struct rbd_client_id *lhs, 3736 const struct rbd_client_id *rhs) 3737 { 3738 return lhs->gid == rhs->gid && lhs->handle == rhs->handle; 3739 } 3740 3741 static struct rbd_client_id rbd_get_cid(struct rbd_device *rbd_dev) 3742 { 3743 struct rbd_client_id cid; 3744 3745 mutex_lock(&rbd_dev->watch_mutex); 3746 cid.gid = ceph_client_gid(rbd_dev->rbd_client->client); 3747 cid.handle = rbd_dev->watch_cookie; 3748 mutex_unlock(&rbd_dev->watch_mutex); 3749 return cid; 3750 } 3751 3752 /* 3753 * lock_rwsem must be held for write 3754 */ 3755 static void rbd_set_owner_cid(struct rbd_device *rbd_dev, 3756 const struct rbd_client_id *cid) 3757 { 3758 dout("%s rbd_dev %p %llu-%llu -> %llu-%llu\n", __func__, rbd_dev, 3759 rbd_dev->owner_cid.gid, rbd_dev->owner_cid.handle, 3760 cid->gid, cid->handle); 3761 rbd_dev->owner_cid = *cid; /* struct */ 3762 } 3763 3764 static void format_lock_cookie(struct rbd_device *rbd_dev, char *buf) 3765 { 3766 mutex_lock(&rbd_dev->watch_mutex); 3767 sprintf(buf, "%s %llu", RBD_LOCK_COOKIE_PREFIX, rbd_dev->watch_cookie); 3768 mutex_unlock(&rbd_dev->watch_mutex); 3769 } 3770 3771 static void __rbd_lock(struct rbd_device *rbd_dev, const char *cookie) 3772 { 3773 struct rbd_client_id cid = rbd_get_cid(rbd_dev); 3774 3775 rbd_dev->lock_state = RBD_LOCK_STATE_LOCKED; 3776 strcpy(rbd_dev->lock_cookie, cookie); 3777 rbd_set_owner_cid(rbd_dev, &cid); 3778 queue_work(rbd_dev->task_wq, &rbd_dev->acquired_lock_work); 3779 } 3780 3781 /* 3782 * lock_rwsem must be held for write 3783 */ 3784 static int rbd_lock(struct rbd_device *rbd_dev) 3785 { 3786 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3787 char cookie[32]; 3788 int ret; 3789 3790 WARN_ON(__rbd_is_lock_owner(rbd_dev) || 3791 rbd_dev->lock_cookie[0] != '\0'); 3792 3793 format_lock_cookie(rbd_dev, cookie); 3794 ret = ceph_cls_lock(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 3795 RBD_LOCK_NAME, CEPH_CLS_LOCK_EXCLUSIVE, cookie, 3796 RBD_LOCK_TAG, "", 0); 3797 if (ret) 3798 return ret; 3799 3800 __rbd_lock(rbd_dev, cookie); 3801 return 0; 3802 } 3803 3804 /* 3805 * lock_rwsem must be held for write 3806 */ 3807 static void rbd_unlock(struct rbd_device *rbd_dev) 3808 { 3809 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3810 int ret; 3811 3812 WARN_ON(!__rbd_is_lock_owner(rbd_dev) || 3813 rbd_dev->lock_cookie[0] == '\0'); 3814 3815 ret = ceph_cls_unlock(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 3816 RBD_LOCK_NAME, rbd_dev->lock_cookie); 3817 if (ret && ret != -ENOENT) 3818 rbd_warn(rbd_dev, "failed to unlock header: %d", ret); 3819 3820 /* treat errors as the image is unlocked */ 3821 rbd_dev->lock_state = RBD_LOCK_STATE_UNLOCKED; 3822 rbd_dev->lock_cookie[0] = '\0'; 3823 rbd_set_owner_cid(rbd_dev, &rbd_empty_cid); 3824 queue_work(rbd_dev->task_wq, &rbd_dev->released_lock_work); 3825 } 3826 3827 static int __rbd_notify_op_lock(struct rbd_device *rbd_dev, 3828 enum rbd_notify_op notify_op, 3829 struct page ***preply_pages, 3830 size_t *preply_len) 3831 { 3832 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3833 struct rbd_client_id cid = rbd_get_cid(rbd_dev); 3834 char buf[4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN]; 3835 int buf_size = sizeof(buf); 3836 void *p = buf; 3837 3838 dout("%s rbd_dev %p notify_op %d\n", __func__, rbd_dev, notify_op); 3839 3840 /* encode *LockPayload NotifyMessage (op + ClientId) */ 3841 ceph_start_encoding(&p, 2, 1, buf_size - CEPH_ENCODING_START_BLK_LEN); 3842 ceph_encode_32(&p, notify_op); 3843 ceph_encode_64(&p, cid.gid); 3844 ceph_encode_64(&p, cid.handle); 3845 3846 return ceph_osdc_notify(osdc, &rbd_dev->header_oid, 3847 &rbd_dev->header_oloc, buf, buf_size, 3848 RBD_NOTIFY_TIMEOUT, preply_pages, preply_len); 3849 } 3850 3851 static void rbd_notify_op_lock(struct rbd_device *rbd_dev, 3852 enum rbd_notify_op notify_op) 3853 { 3854 struct page **reply_pages; 3855 size_t reply_len; 3856 3857 __rbd_notify_op_lock(rbd_dev, notify_op, &reply_pages, &reply_len); 3858 ceph_release_page_vector(reply_pages, calc_pages_for(0, reply_len)); 3859 } 3860 3861 static void rbd_notify_acquired_lock(struct work_struct *work) 3862 { 3863 struct rbd_device *rbd_dev = container_of(work, struct rbd_device, 3864 acquired_lock_work); 3865 3866 rbd_notify_op_lock(rbd_dev, RBD_NOTIFY_OP_ACQUIRED_LOCK); 3867 } 3868 3869 static void rbd_notify_released_lock(struct work_struct *work) 3870 { 3871 struct rbd_device *rbd_dev = container_of(work, struct rbd_device, 3872 released_lock_work); 3873 3874 rbd_notify_op_lock(rbd_dev, RBD_NOTIFY_OP_RELEASED_LOCK); 3875 } 3876 3877 static int rbd_request_lock(struct rbd_device *rbd_dev) 3878 { 3879 struct page **reply_pages; 3880 size_t reply_len; 3881 bool lock_owner_responded = false; 3882 int ret; 3883 3884 dout("%s rbd_dev %p\n", __func__, rbd_dev); 3885 3886 ret = __rbd_notify_op_lock(rbd_dev, RBD_NOTIFY_OP_REQUEST_LOCK, 3887 &reply_pages, &reply_len); 3888 if (ret && ret != -ETIMEDOUT) { 3889 rbd_warn(rbd_dev, "failed to request lock: %d", ret); 3890 goto out; 3891 } 3892 3893 if (reply_len > 0 && reply_len <= PAGE_SIZE) { 3894 void *p = page_address(reply_pages[0]); 3895 void *const end = p + reply_len; 3896 u32 n; 3897 3898 ceph_decode_32_safe(&p, end, n, e_inval); /* num_acks */ 3899 while (n--) { 3900 u8 struct_v; 3901 u32 len; 3902 3903 ceph_decode_need(&p, end, 8 + 8, e_inval); 3904 p += 8 + 8; /* skip gid and cookie */ 3905 3906 ceph_decode_32_safe(&p, end, len, e_inval); 3907 if (!len) 3908 continue; 3909 3910 if (lock_owner_responded) { 3911 rbd_warn(rbd_dev, 3912 "duplicate lock owners detected"); 3913 ret = -EIO; 3914 goto out; 3915 } 3916 3917 lock_owner_responded = true; 3918 ret = ceph_start_decoding(&p, end, 1, "ResponseMessage", 3919 &struct_v, &len); 3920 if (ret) { 3921 rbd_warn(rbd_dev, 3922 "failed to decode ResponseMessage: %d", 3923 ret); 3924 goto e_inval; 3925 } 3926 3927 ret = ceph_decode_32(&p); 3928 } 3929 } 3930 3931 if (!lock_owner_responded) { 3932 rbd_warn(rbd_dev, "no lock owners detected"); 3933 ret = -ETIMEDOUT; 3934 } 3935 3936 out: 3937 ceph_release_page_vector(reply_pages, calc_pages_for(0, reply_len)); 3938 return ret; 3939 3940 e_inval: 3941 ret = -EINVAL; 3942 goto out; 3943 } 3944 3945 /* 3946 * Either image request state machine(s) or rbd_add_acquire_lock() 3947 * (i.e. "rbd map"). 3948 */ 3949 static void wake_lock_waiters(struct rbd_device *rbd_dev, int result) 3950 { 3951 struct rbd_img_request *img_req; 3952 3953 dout("%s rbd_dev %p result %d\n", __func__, rbd_dev, result); 3954 lockdep_assert_held_write(&rbd_dev->lock_rwsem); 3955 3956 cancel_delayed_work(&rbd_dev->lock_dwork); 3957 if (!completion_done(&rbd_dev->acquire_wait)) { 3958 rbd_assert(list_empty(&rbd_dev->acquiring_list) && 3959 list_empty(&rbd_dev->running_list)); 3960 rbd_dev->acquire_err = result; 3961 complete_all(&rbd_dev->acquire_wait); 3962 return; 3963 } 3964 3965 list_for_each_entry(img_req, &rbd_dev->acquiring_list, lock_item) { 3966 mutex_lock(&img_req->state_mutex); 3967 rbd_assert(img_req->state == RBD_IMG_EXCLUSIVE_LOCK); 3968 rbd_img_schedule(img_req, result); 3969 mutex_unlock(&img_req->state_mutex); 3970 } 3971 3972 list_splice_tail_init(&rbd_dev->acquiring_list, &rbd_dev->running_list); 3973 } 3974 3975 static int get_lock_owner_info(struct rbd_device *rbd_dev, 3976 struct ceph_locker **lockers, u32 *num_lockers) 3977 { 3978 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3979 u8 lock_type; 3980 char *lock_tag; 3981 int ret; 3982 3983 dout("%s rbd_dev %p\n", __func__, rbd_dev); 3984 3985 ret = ceph_cls_lock_info(osdc, &rbd_dev->header_oid, 3986 &rbd_dev->header_oloc, RBD_LOCK_NAME, 3987 &lock_type, &lock_tag, lockers, num_lockers); 3988 if (ret) 3989 return ret; 3990 3991 if (*num_lockers == 0) { 3992 dout("%s rbd_dev %p no lockers detected\n", __func__, rbd_dev); 3993 goto out; 3994 } 3995 3996 if (strcmp(lock_tag, RBD_LOCK_TAG)) { 3997 rbd_warn(rbd_dev, "locked by external mechanism, tag %s", 3998 lock_tag); 3999 ret = -EBUSY; 4000 goto out; 4001 } 4002 4003 if (lock_type == CEPH_CLS_LOCK_SHARED) { 4004 rbd_warn(rbd_dev, "shared lock type detected"); 4005 ret = -EBUSY; 4006 goto out; 4007 } 4008 4009 if (strncmp((*lockers)[0].id.cookie, RBD_LOCK_COOKIE_PREFIX, 4010 strlen(RBD_LOCK_COOKIE_PREFIX))) { 4011 rbd_warn(rbd_dev, "locked by external mechanism, cookie %s", 4012 (*lockers)[0].id.cookie); 4013 ret = -EBUSY; 4014 goto out; 4015 } 4016 4017 out: 4018 kfree(lock_tag); 4019 return ret; 4020 } 4021 4022 static int find_watcher(struct rbd_device *rbd_dev, 4023 const struct ceph_locker *locker) 4024 { 4025 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4026 struct ceph_watch_item *watchers; 4027 u32 num_watchers; 4028 u64 cookie; 4029 int i; 4030 int ret; 4031 4032 ret = ceph_osdc_list_watchers(osdc, &rbd_dev->header_oid, 4033 &rbd_dev->header_oloc, &watchers, 4034 &num_watchers); 4035 if (ret) 4036 return ret; 4037 4038 sscanf(locker->id.cookie, RBD_LOCK_COOKIE_PREFIX " %llu", &cookie); 4039 for (i = 0; i < num_watchers; i++) { 4040 if (!memcmp(&watchers[i].addr, &locker->info.addr, 4041 sizeof(locker->info.addr)) && 4042 watchers[i].cookie == cookie) { 4043 struct rbd_client_id cid = { 4044 .gid = le64_to_cpu(watchers[i].name.num), 4045 .handle = cookie, 4046 }; 4047 4048 dout("%s rbd_dev %p found cid %llu-%llu\n", __func__, 4049 rbd_dev, cid.gid, cid.handle); 4050 rbd_set_owner_cid(rbd_dev, &cid); 4051 ret = 1; 4052 goto out; 4053 } 4054 } 4055 4056 dout("%s rbd_dev %p no watchers\n", __func__, rbd_dev); 4057 ret = 0; 4058 out: 4059 kfree(watchers); 4060 return ret; 4061 } 4062 4063 /* 4064 * lock_rwsem must be held for write 4065 */ 4066 static int rbd_try_lock(struct rbd_device *rbd_dev) 4067 { 4068 struct ceph_client *client = rbd_dev->rbd_client->client; 4069 struct ceph_locker *lockers; 4070 u32 num_lockers; 4071 int ret; 4072 4073 for (;;) { 4074 ret = rbd_lock(rbd_dev); 4075 if (ret != -EBUSY) 4076 return ret; 4077 4078 /* determine if the current lock holder is still alive */ 4079 ret = get_lock_owner_info(rbd_dev, &lockers, &num_lockers); 4080 if (ret) 4081 return ret; 4082 4083 if (num_lockers == 0) 4084 goto again; 4085 4086 ret = find_watcher(rbd_dev, lockers); 4087 if (ret) 4088 goto out; /* request lock or error */ 4089 4090 rbd_warn(rbd_dev, "breaking header lock owned by %s%llu", 4091 ENTITY_NAME(lockers[0].id.name)); 4092 4093 ret = ceph_monc_blacklist_add(&client->monc, 4094 &lockers[0].info.addr); 4095 if (ret) { 4096 rbd_warn(rbd_dev, "blacklist of %s%llu failed: %d", 4097 ENTITY_NAME(lockers[0].id.name), ret); 4098 goto out; 4099 } 4100 4101 ret = ceph_cls_break_lock(&client->osdc, &rbd_dev->header_oid, 4102 &rbd_dev->header_oloc, RBD_LOCK_NAME, 4103 lockers[0].id.cookie, 4104 &lockers[0].id.name); 4105 if (ret && ret != -ENOENT) 4106 goto out; 4107 4108 again: 4109 ceph_free_lockers(lockers, num_lockers); 4110 } 4111 4112 out: 4113 ceph_free_lockers(lockers, num_lockers); 4114 return ret; 4115 } 4116 4117 static int rbd_post_acquire_action(struct rbd_device *rbd_dev) 4118 { 4119 int ret; 4120 4121 if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) { 4122 ret = rbd_object_map_open(rbd_dev); 4123 if (ret) 4124 return ret; 4125 } 4126 4127 return 0; 4128 } 4129 4130 /* 4131 * Return: 4132 * 0 - lock acquired 4133 * 1 - caller should call rbd_request_lock() 4134 * <0 - error 4135 */ 4136 static int rbd_try_acquire_lock(struct rbd_device *rbd_dev) 4137 { 4138 int ret; 4139 4140 down_read(&rbd_dev->lock_rwsem); 4141 dout("%s rbd_dev %p read lock_state %d\n", __func__, rbd_dev, 4142 rbd_dev->lock_state); 4143 if (__rbd_is_lock_owner(rbd_dev)) { 4144 up_read(&rbd_dev->lock_rwsem); 4145 return 0; 4146 } 4147 4148 up_read(&rbd_dev->lock_rwsem); 4149 down_write(&rbd_dev->lock_rwsem); 4150 dout("%s rbd_dev %p write lock_state %d\n", __func__, rbd_dev, 4151 rbd_dev->lock_state); 4152 if (__rbd_is_lock_owner(rbd_dev)) { 4153 up_write(&rbd_dev->lock_rwsem); 4154 return 0; 4155 } 4156 4157 ret = rbd_try_lock(rbd_dev); 4158 if (ret < 0) { 4159 rbd_warn(rbd_dev, "failed to lock header: %d", ret); 4160 if (ret == -EBLACKLISTED) 4161 goto out; 4162 4163 ret = 1; /* request lock anyway */ 4164 } 4165 if (ret > 0) { 4166 up_write(&rbd_dev->lock_rwsem); 4167 return ret; 4168 } 4169 4170 rbd_assert(rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED); 4171 rbd_assert(list_empty(&rbd_dev->running_list)); 4172 4173 ret = rbd_post_acquire_action(rbd_dev); 4174 if (ret) { 4175 rbd_warn(rbd_dev, "post-acquire action failed: %d", ret); 4176 /* 4177 * Can't stay in RBD_LOCK_STATE_LOCKED because 4178 * rbd_lock_add_request() would let the request through, 4179 * assuming that e.g. object map is locked and loaded. 4180 */ 4181 rbd_unlock(rbd_dev); 4182 } 4183 4184 out: 4185 wake_lock_waiters(rbd_dev, ret); 4186 up_write(&rbd_dev->lock_rwsem); 4187 return ret; 4188 } 4189 4190 static void rbd_acquire_lock(struct work_struct *work) 4191 { 4192 struct rbd_device *rbd_dev = container_of(to_delayed_work(work), 4193 struct rbd_device, lock_dwork); 4194 int ret; 4195 4196 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4197 again: 4198 ret = rbd_try_acquire_lock(rbd_dev); 4199 if (ret <= 0) { 4200 dout("%s rbd_dev %p ret %d - done\n", __func__, rbd_dev, ret); 4201 return; 4202 } 4203 4204 ret = rbd_request_lock(rbd_dev); 4205 if (ret == -ETIMEDOUT) { 4206 goto again; /* treat this as a dead client */ 4207 } else if (ret == -EROFS) { 4208 rbd_warn(rbd_dev, "peer will not release lock"); 4209 down_write(&rbd_dev->lock_rwsem); 4210 wake_lock_waiters(rbd_dev, ret); 4211 up_write(&rbd_dev->lock_rwsem); 4212 } else if (ret < 0) { 4213 rbd_warn(rbd_dev, "error requesting lock: %d", ret); 4214 mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 4215 RBD_RETRY_DELAY); 4216 } else { 4217 /* 4218 * lock owner acked, but resend if we don't see them 4219 * release the lock 4220 */ 4221 dout("%s rbd_dev %p requeueing lock_dwork\n", __func__, 4222 rbd_dev); 4223 mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 4224 msecs_to_jiffies(2 * RBD_NOTIFY_TIMEOUT * MSEC_PER_SEC)); 4225 } 4226 } 4227 4228 static bool rbd_quiesce_lock(struct rbd_device *rbd_dev) 4229 { 4230 bool need_wait; 4231 4232 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4233 lockdep_assert_held_write(&rbd_dev->lock_rwsem); 4234 4235 if (rbd_dev->lock_state != RBD_LOCK_STATE_LOCKED) 4236 return false; 4237 4238 /* 4239 * Ensure that all in-flight IO is flushed. 4240 */ 4241 rbd_dev->lock_state = RBD_LOCK_STATE_RELEASING; 4242 rbd_assert(!completion_done(&rbd_dev->releasing_wait)); 4243 need_wait = !list_empty(&rbd_dev->running_list); 4244 downgrade_write(&rbd_dev->lock_rwsem); 4245 if (need_wait) 4246 wait_for_completion(&rbd_dev->releasing_wait); 4247 up_read(&rbd_dev->lock_rwsem); 4248 4249 down_write(&rbd_dev->lock_rwsem); 4250 if (rbd_dev->lock_state != RBD_LOCK_STATE_RELEASING) 4251 return false; 4252 4253 rbd_assert(list_empty(&rbd_dev->running_list)); 4254 return true; 4255 } 4256 4257 static void rbd_pre_release_action(struct rbd_device *rbd_dev) 4258 { 4259 if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) 4260 rbd_object_map_close(rbd_dev); 4261 } 4262 4263 static void __rbd_release_lock(struct rbd_device *rbd_dev) 4264 { 4265 rbd_assert(list_empty(&rbd_dev->running_list)); 4266 4267 rbd_pre_release_action(rbd_dev); 4268 rbd_unlock(rbd_dev); 4269 } 4270 4271 /* 4272 * lock_rwsem must be held for write 4273 */ 4274 static void rbd_release_lock(struct rbd_device *rbd_dev) 4275 { 4276 if (!rbd_quiesce_lock(rbd_dev)) 4277 return; 4278 4279 __rbd_release_lock(rbd_dev); 4280 4281 /* 4282 * Give others a chance to grab the lock - we would re-acquire 4283 * almost immediately if we got new IO while draining the running 4284 * list otherwise. We need to ack our own notifications, so this 4285 * lock_dwork will be requeued from rbd_handle_released_lock() by 4286 * way of maybe_kick_acquire(). 4287 */ 4288 cancel_delayed_work(&rbd_dev->lock_dwork); 4289 } 4290 4291 static void rbd_release_lock_work(struct work_struct *work) 4292 { 4293 struct rbd_device *rbd_dev = container_of(work, struct rbd_device, 4294 unlock_work); 4295 4296 down_write(&rbd_dev->lock_rwsem); 4297 rbd_release_lock(rbd_dev); 4298 up_write(&rbd_dev->lock_rwsem); 4299 } 4300 4301 static void maybe_kick_acquire(struct rbd_device *rbd_dev) 4302 { 4303 bool have_requests; 4304 4305 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4306 if (__rbd_is_lock_owner(rbd_dev)) 4307 return; 4308 4309 spin_lock(&rbd_dev->lock_lists_lock); 4310 have_requests = !list_empty(&rbd_dev->acquiring_list); 4311 spin_unlock(&rbd_dev->lock_lists_lock); 4312 if (have_requests || delayed_work_pending(&rbd_dev->lock_dwork)) { 4313 dout("%s rbd_dev %p kicking lock_dwork\n", __func__, rbd_dev); 4314 mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 4315 } 4316 } 4317 4318 static void rbd_handle_acquired_lock(struct rbd_device *rbd_dev, u8 struct_v, 4319 void **p) 4320 { 4321 struct rbd_client_id cid = { 0 }; 4322 4323 if (struct_v >= 2) { 4324 cid.gid = ceph_decode_64(p); 4325 cid.handle = ceph_decode_64(p); 4326 } 4327 4328 dout("%s rbd_dev %p cid %llu-%llu\n", __func__, rbd_dev, cid.gid, 4329 cid.handle); 4330 if (!rbd_cid_equal(&cid, &rbd_empty_cid)) { 4331 down_write(&rbd_dev->lock_rwsem); 4332 if (rbd_cid_equal(&cid, &rbd_dev->owner_cid)) { 4333 /* 4334 * we already know that the remote client is 4335 * the owner 4336 */ 4337 up_write(&rbd_dev->lock_rwsem); 4338 return; 4339 } 4340 4341 rbd_set_owner_cid(rbd_dev, &cid); 4342 downgrade_write(&rbd_dev->lock_rwsem); 4343 } else { 4344 down_read(&rbd_dev->lock_rwsem); 4345 } 4346 4347 maybe_kick_acquire(rbd_dev); 4348 up_read(&rbd_dev->lock_rwsem); 4349 } 4350 4351 static void rbd_handle_released_lock(struct rbd_device *rbd_dev, u8 struct_v, 4352 void **p) 4353 { 4354 struct rbd_client_id cid = { 0 }; 4355 4356 if (struct_v >= 2) { 4357 cid.gid = ceph_decode_64(p); 4358 cid.handle = ceph_decode_64(p); 4359 } 4360 4361 dout("%s rbd_dev %p cid %llu-%llu\n", __func__, rbd_dev, cid.gid, 4362 cid.handle); 4363 if (!rbd_cid_equal(&cid, &rbd_empty_cid)) { 4364 down_write(&rbd_dev->lock_rwsem); 4365 if (!rbd_cid_equal(&cid, &rbd_dev->owner_cid)) { 4366 dout("%s rbd_dev %p unexpected owner, cid %llu-%llu != owner_cid %llu-%llu\n", 4367 __func__, rbd_dev, cid.gid, cid.handle, 4368 rbd_dev->owner_cid.gid, rbd_dev->owner_cid.handle); 4369 up_write(&rbd_dev->lock_rwsem); 4370 return; 4371 } 4372 4373 rbd_set_owner_cid(rbd_dev, &rbd_empty_cid); 4374 downgrade_write(&rbd_dev->lock_rwsem); 4375 } else { 4376 down_read(&rbd_dev->lock_rwsem); 4377 } 4378 4379 maybe_kick_acquire(rbd_dev); 4380 up_read(&rbd_dev->lock_rwsem); 4381 } 4382 4383 /* 4384 * Returns result for ResponseMessage to be encoded (<= 0), or 1 if no 4385 * ResponseMessage is needed. 4386 */ 4387 static int rbd_handle_request_lock(struct rbd_device *rbd_dev, u8 struct_v, 4388 void **p) 4389 { 4390 struct rbd_client_id my_cid = rbd_get_cid(rbd_dev); 4391 struct rbd_client_id cid = { 0 }; 4392 int result = 1; 4393 4394 if (struct_v >= 2) { 4395 cid.gid = ceph_decode_64(p); 4396 cid.handle = ceph_decode_64(p); 4397 } 4398 4399 dout("%s rbd_dev %p cid %llu-%llu\n", __func__, rbd_dev, cid.gid, 4400 cid.handle); 4401 if (rbd_cid_equal(&cid, &my_cid)) 4402 return result; 4403 4404 down_read(&rbd_dev->lock_rwsem); 4405 if (__rbd_is_lock_owner(rbd_dev)) { 4406 if (rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED && 4407 rbd_cid_equal(&rbd_dev->owner_cid, &rbd_empty_cid)) 4408 goto out_unlock; 4409 4410 /* 4411 * encode ResponseMessage(0) so the peer can detect 4412 * a missing owner 4413 */ 4414 result = 0; 4415 4416 if (rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED) { 4417 if (!rbd_dev->opts->exclusive) { 4418 dout("%s rbd_dev %p queueing unlock_work\n", 4419 __func__, rbd_dev); 4420 queue_work(rbd_dev->task_wq, 4421 &rbd_dev->unlock_work); 4422 } else { 4423 /* refuse to release the lock */ 4424 result = -EROFS; 4425 } 4426 } 4427 } 4428 4429 out_unlock: 4430 up_read(&rbd_dev->lock_rwsem); 4431 return result; 4432 } 4433 4434 static void __rbd_acknowledge_notify(struct rbd_device *rbd_dev, 4435 u64 notify_id, u64 cookie, s32 *result) 4436 { 4437 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4438 char buf[4 + CEPH_ENCODING_START_BLK_LEN]; 4439 int buf_size = sizeof(buf); 4440 int ret; 4441 4442 if (result) { 4443 void *p = buf; 4444 4445 /* encode ResponseMessage */ 4446 ceph_start_encoding(&p, 1, 1, 4447 buf_size - CEPH_ENCODING_START_BLK_LEN); 4448 ceph_encode_32(&p, *result); 4449 } else { 4450 buf_size = 0; 4451 } 4452 4453 ret = ceph_osdc_notify_ack(osdc, &rbd_dev->header_oid, 4454 &rbd_dev->header_oloc, notify_id, cookie, 4455 buf, buf_size); 4456 if (ret) 4457 rbd_warn(rbd_dev, "acknowledge_notify failed: %d", ret); 4458 } 4459 4460 static void rbd_acknowledge_notify(struct rbd_device *rbd_dev, u64 notify_id, 4461 u64 cookie) 4462 { 4463 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4464 __rbd_acknowledge_notify(rbd_dev, notify_id, cookie, NULL); 4465 } 4466 4467 static void rbd_acknowledge_notify_result(struct rbd_device *rbd_dev, 4468 u64 notify_id, u64 cookie, s32 result) 4469 { 4470 dout("%s rbd_dev %p result %d\n", __func__, rbd_dev, result); 4471 __rbd_acknowledge_notify(rbd_dev, notify_id, cookie, &result); 4472 } 4473 4474 static void rbd_watch_cb(void *arg, u64 notify_id, u64 cookie, 4475 u64 notifier_id, void *data, size_t data_len) 4476 { 4477 struct rbd_device *rbd_dev = arg; 4478 void *p = data; 4479 void *const end = p + data_len; 4480 u8 struct_v = 0; 4481 u32 len; 4482 u32 notify_op; 4483 int ret; 4484 4485 dout("%s rbd_dev %p cookie %llu notify_id %llu data_len %zu\n", 4486 __func__, rbd_dev, cookie, notify_id, data_len); 4487 if (data_len) { 4488 ret = ceph_start_decoding(&p, end, 1, "NotifyMessage", 4489 &struct_v, &len); 4490 if (ret) { 4491 rbd_warn(rbd_dev, "failed to decode NotifyMessage: %d", 4492 ret); 4493 return; 4494 } 4495 4496 notify_op = ceph_decode_32(&p); 4497 } else { 4498 /* legacy notification for header updates */ 4499 notify_op = RBD_NOTIFY_OP_HEADER_UPDATE; 4500 len = 0; 4501 } 4502 4503 dout("%s rbd_dev %p notify_op %u\n", __func__, rbd_dev, notify_op); 4504 switch (notify_op) { 4505 case RBD_NOTIFY_OP_ACQUIRED_LOCK: 4506 rbd_handle_acquired_lock(rbd_dev, struct_v, &p); 4507 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4508 break; 4509 case RBD_NOTIFY_OP_RELEASED_LOCK: 4510 rbd_handle_released_lock(rbd_dev, struct_v, &p); 4511 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4512 break; 4513 case RBD_NOTIFY_OP_REQUEST_LOCK: 4514 ret = rbd_handle_request_lock(rbd_dev, struct_v, &p); 4515 if (ret <= 0) 4516 rbd_acknowledge_notify_result(rbd_dev, notify_id, 4517 cookie, ret); 4518 else 4519 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4520 break; 4521 case RBD_NOTIFY_OP_HEADER_UPDATE: 4522 ret = rbd_dev_refresh(rbd_dev); 4523 if (ret) 4524 rbd_warn(rbd_dev, "refresh failed: %d", ret); 4525 4526 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4527 break; 4528 default: 4529 if (rbd_is_lock_owner(rbd_dev)) 4530 rbd_acknowledge_notify_result(rbd_dev, notify_id, 4531 cookie, -EOPNOTSUPP); 4532 else 4533 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4534 break; 4535 } 4536 } 4537 4538 static void __rbd_unregister_watch(struct rbd_device *rbd_dev); 4539 4540 static void rbd_watch_errcb(void *arg, u64 cookie, int err) 4541 { 4542 struct rbd_device *rbd_dev = arg; 4543 4544 rbd_warn(rbd_dev, "encountered watch error: %d", err); 4545 4546 down_write(&rbd_dev->lock_rwsem); 4547 rbd_set_owner_cid(rbd_dev, &rbd_empty_cid); 4548 up_write(&rbd_dev->lock_rwsem); 4549 4550 mutex_lock(&rbd_dev->watch_mutex); 4551 if (rbd_dev->watch_state == RBD_WATCH_STATE_REGISTERED) { 4552 __rbd_unregister_watch(rbd_dev); 4553 rbd_dev->watch_state = RBD_WATCH_STATE_ERROR; 4554 4555 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->watch_dwork, 0); 4556 } 4557 mutex_unlock(&rbd_dev->watch_mutex); 4558 } 4559 4560 /* 4561 * watch_mutex must be locked 4562 */ 4563 static int __rbd_register_watch(struct rbd_device *rbd_dev) 4564 { 4565 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4566 struct ceph_osd_linger_request *handle; 4567 4568 rbd_assert(!rbd_dev->watch_handle); 4569 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4570 4571 handle = ceph_osdc_watch(osdc, &rbd_dev->header_oid, 4572 &rbd_dev->header_oloc, rbd_watch_cb, 4573 rbd_watch_errcb, rbd_dev); 4574 if (IS_ERR(handle)) 4575 return PTR_ERR(handle); 4576 4577 rbd_dev->watch_handle = handle; 4578 return 0; 4579 } 4580 4581 /* 4582 * watch_mutex must be locked 4583 */ 4584 static void __rbd_unregister_watch(struct rbd_device *rbd_dev) 4585 { 4586 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4587 int ret; 4588 4589 rbd_assert(rbd_dev->watch_handle); 4590 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4591 4592 ret = ceph_osdc_unwatch(osdc, rbd_dev->watch_handle); 4593 if (ret) 4594 rbd_warn(rbd_dev, "failed to unwatch: %d", ret); 4595 4596 rbd_dev->watch_handle = NULL; 4597 } 4598 4599 static int rbd_register_watch(struct rbd_device *rbd_dev) 4600 { 4601 int ret; 4602 4603 mutex_lock(&rbd_dev->watch_mutex); 4604 rbd_assert(rbd_dev->watch_state == RBD_WATCH_STATE_UNREGISTERED); 4605 ret = __rbd_register_watch(rbd_dev); 4606 if (ret) 4607 goto out; 4608 4609 rbd_dev->watch_state = RBD_WATCH_STATE_REGISTERED; 4610 rbd_dev->watch_cookie = rbd_dev->watch_handle->linger_id; 4611 4612 out: 4613 mutex_unlock(&rbd_dev->watch_mutex); 4614 return ret; 4615 } 4616 4617 static void cancel_tasks_sync(struct rbd_device *rbd_dev) 4618 { 4619 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4620 4621 cancel_work_sync(&rbd_dev->acquired_lock_work); 4622 cancel_work_sync(&rbd_dev->released_lock_work); 4623 cancel_delayed_work_sync(&rbd_dev->lock_dwork); 4624 cancel_work_sync(&rbd_dev->unlock_work); 4625 } 4626 4627 static void rbd_unregister_watch(struct rbd_device *rbd_dev) 4628 { 4629 cancel_tasks_sync(rbd_dev); 4630 4631 mutex_lock(&rbd_dev->watch_mutex); 4632 if (rbd_dev->watch_state == RBD_WATCH_STATE_REGISTERED) 4633 __rbd_unregister_watch(rbd_dev); 4634 rbd_dev->watch_state = RBD_WATCH_STATE_UNREGISTERED; 4635 mutex_unlock(&rbd_dev->watch_mutex); 4636 4637 cancel_delayed_work_sync(&rbd_dev->watch_dwork); 4638 ceph_osdc_flush_notifies(&rbd_dev->rbd_client->client->osdc); 4639 } 4640 4641 /* 4642 * lock_rwsem must be held for write 4643 */ 4644 static void rbd_reacquire_lock(struct rbd_device *rbd_dev) 4645 { 4646 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4647 char cookie[32]; 4648 int ret; 4649 4650 if (!rbd_quiesce_lock(rbd_dev)) 4651 return; 4652 4653 format_lock_cookie(rbd_dev, cookie); 4654 ret = ceph_cls_set_cookie(osdc, &rbd_dev->header_oid, 4655 &rbd_dev->header_oloc, RBD_LOCK_NAME, 4656 CEPH_CLS_LOCK_EXCLUSIVE, rbd_dev->lock_cookie, 4657 RBD_LOCK_TAG, cookie); 4658 if (ret) { 4659 if (ret != -EOPNOTSUPP) 4660 rbd_warn(rbd_dev, "failed to update lock cookie: %d", 4661 ret); 4662 4663 /* 4664 * Lock cookie cannot be updated on older OSDs, so do 4665 * a manual release and queue an acquire. 4666 */ 4667 __rbd_release_lock(rbd_dev); 4668 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 4669 } else { 4670 __rbd_lock(rbd_dev, cookie); 4671 wake_lock_waiters(rbd_dev, 0); 4672 } 4673 } 4674 4675 static void rbd_reregister_watch(struct work_struct *work) 4676 { 4677 struct rbd_device *rbd_dev = container_of(to_delayed_work(work), 4678 struct rbd_device, watch_dwork); 4679 int ret; 4680 4681 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4682 4683 mutex_lock(&rbd_dev->watch_mutex); 4684 if (rbd_dev->watch_state != RBD_WATCH_STATE_ERROR) { 4685 mutex_unlock(&rbd_dev->watch_mutex); 4686 return; 4687 } 4688 4689 ret = __rbd_register_watch(rbd_dev); 4690 if (ret) { 4691 rbd_warn(rbd_dev, "failed to reregister watch: %d", ret); 4692 if (ret != -EBLACKLISTED && ret != -ENOENT) { 4693 queue_delayed_work(rbd_dev->task_wq, 4694 &rbd_dev->watch_dwork, 4695 RBD_RETRY_DELAY); 4696 mutex_unlock(&rbd_dev->watch_mutex); 4697 return; 4698 } 4699 4700 mutex_unlock(&rbd_dev->watch_mutex); 4701 down_write(&rbd_dev->lock_rwsem); 4702 wake_lock_waiters(rbd_dev, ret); 4703 up_write(&rbd_dev->lock_rwsem); 4704 return; 4705 } 4706 4707 rbd_dev->watch_state = RBD_WATCH_STATE_REGISTERED; 4708 rbd_dev->watch_cookie = rbd_dev->watch_handle->linger_id; 4709 mutex_unlock(&rbd_dev->watch_mutex); 4710 4711 down_write(&rbd_dev->lock_rwsem); 4712 if (rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED) 4713 rbd_reacquire_lock(rbd_dev); 4714 up_write(&rbd_dev->lock_rwsem); 4715 4716 ret = rbd_dev_refresh(rbd_dev); 4717 if (ret) 4718 rbd_warn(rbd_dev, "reregistration refresh failed: %d", ret); 4719 } 4720 4721 /* 4722 * Synchronous osd object method call. Returns the number of bytes 4723 * returned in the outbound buffer, or a negative error code. 4724 */ 4725 static int rbd_obj_method_sync(struct rbd_device *rbd_dev, 4726 struct ceph_object_id *oid, 4727 struct ceph_object_locator *oloc, 4728 const char *method_name, 4729 const void *outbound, 4730 size_t outbound_size, 4731 void *inbound, 4732 size_t inbound_size) 4733 { 4734 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4735 struct page *req_page = NULL; 4736 struct page *reply_page; 4737 int ret; 4738 4739 /* 4740 * Method calls are ultimately read operations. The result 4741 * should placed into the inbound buffer provided. They 4742 * also supply outbound data--parameters for the object 4743 * method. Currently if this is present it will be a 4744 * snapshot id. 4745 */ 4746 if (outbound) { 4747 if (outbound_size > PAGE_SIZE) 4748 return -E2BIG; 4749 4750 req_page = alloc_page(GFP_KERNEL); 4751 if (!req_page) 4752 return -ENOMEM; 4753 4754 memcpy(page_address(req_page), outbound, outbound_size); 4755 } 4756 4757 reply_page = alloc_page(GFP_KERNEL); 4758 if (!reply_page) { 4759 if (req_page) 4760 __free_page(req_page); 4761 return -ENOMEM; 4762 } 4763 4764 ret = ceph_osdc_call(osdc, oid, oloc, RBD_DRV_NAME, method_name, 4765 CEPH_OSD_FLAG_READ, req_page, outbound_size, 4766 &reply_page, &inbound_size); 4767 if (!ret) { 4768 memcpy(inbound, page_address(reply_page), inbound_size); 4769 ret = inbound_size; 4770 } 4771 4772 if (req_page) 4773 __free_page(req_page); 4774 __free_page(reply_page); 4775 return ret; 4776 } 4777 4778 static void rbd_queue_workfn(struct work_struct *work) 4779 { 4780 struct request *rq = blk_mq_rq_from_pdu(work); 4781 struct rbd_device *rbd_dev = rq->q->queuedata; 4782 struct rbd_img_request *img_request; 4783 struct ceph_snap_context *snapc = NULL; 4784 u64 offset = (u64)blk_rq_pos(rq) << SECTOR_SHIFT; 4785 u64 length = blk_rq_bytes(rq); 4786 enum obj_operation_type op_type; 4787 u64 mapping_size; 4788 int result; 4789 4790 switch (req_op(rq)) { 4791 case REQ_OP_DISCARD: 4792 op_type = OBJ_OP_DISCARD; 4793 break; 4794 case REQ_OP_WRITE_ZEROES: 4795 op_type = OBJ_OP_ZEROOUT; 4796 break; 4797 case REQ_OP_WRITE: 4798 op_type = OBJ_OP_WRITE; 4799 break; 4800 case REQ_OP_READ: 4801 op_type = OBJ_OP_READ; 4802 break; 4803 default: 4804 dout("%s: non-fs request type %d\n", __func__, req_op(rq)); 4805 result = -EIO; 4806 goto err; 4807 } 4808 4809 /* Ignore/skip any zero-length requests */ 4810 4811 if (!length) { 4812 dout("%s: zero-length request\n", __func__); 4813 result = 0; 4814 goto err_rq; 4815 } 4816 4817 if (op_type != OBJ_OP_READ && rbd_dev->spec->snap_id != CEPH_NOSNAP) { 4818 rbd_warn(rbd_dev, "%s on read-only snapshot", 4819 obj_op_name(op_type)); 4820 result = -EIO; 4821 goto err; 4822 } 4823 4824 /* 4825 * Quit early if the mapped snapshot no longer exists. It's 4826 * still possible the snapshot will have disappeared by the 4827 * time our request arrives at the osd, but there's no sense in 4828 * sending it if we already know. 4829 */ 4830 if (!test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags)) { 4831 dout("request for non-existent snapshot"); 4832 rbd_assert(rbd_dev->spec->snap_id != CEPH_NOSNAP); 4833 result = -ENXIO; 4834 goto err_rq; 4835 } 4836 4837 if (offset && length > U64_MAX - offset + 1) { 4838 rbd_warn(rbd_dev, "bad request range (%llu~%llu)", offset, 4839 length); 4840 result = -EINVAL; 4841 goto err_rq; /* Shouldn't happen */ 4842 } 4843 4844 blk_mq_start_request(rq); 4845 4846 down_read(&rbd_dev->header_rwsem); 4847 mapping_size = rbd_dev->mapping.size; 4848 if (op_type != OBJ_OP_READ) { 4849 snapc = rbd_dev->header.snapc; 4850 ceph_get_snap_context(snapc); 4851 } 4852 up_read(&rbd_dev->header_rwsem); 4853 4854 if (offset + length > mapping_size) { 4855 rbd_warn(rbd_dev, "beyond EOD (%llu~%llu > %llu)", offset, 4856 length, mapping_size); 4857 result = -EIO; 4858 goto err_rq; 4859 } 4860 4861 img_request = rbd_img_request_create(rbd_dev, op_type, snapc); 4862 if (!img_request) { 4863 result = -ENOMEM; 4864 goto err_rq; 4865 } 4866 img_request->rq = rq; 4867 snapc = NULL; /* img_request consumes a ref */ 4868 4869 if (op_type == OBJ_OP_DISCARD || op_type == OBJ_OP_ZEROOUT) 4870 result = rbd_img_fill_nodata(img_request, offset, length); 4871 else 4872 result = rbd_img_fill_from_bio(img_request, offset, length, 4873 rq->bio); 4874 if (result) 4875 goto err_img_request; 4876 4877 rbd_img_handle_request(img_request, 0); 4878 return; 4879 4880 err_img_request: 4881 rbd_img_request_put(img_request); 4882 err_rq: 4883 if (result) 4884 rbd_warn(rbd_dev, "%s %llx at %llx result %d", 4885 obj_op_name(op_type), length, offset, result); 4886 ceph_put_snap_context(snapc); 4887 err: 4888 blk_mq_end_request(rq, errno_to_blk_status(result)); 4889 } 4890 4891 static blk_status_t rbd_queue_rq(struct blk_mq_hw_ctx *hctx, 4892 const struct blk_mq_queue_data *bd) 4893 { 4894 struct request *rq = bd->rq; 4895 struct work_struct *work = blk_mq_rq_to_pdu(rq); 4896 4897 queue_work(rbd_wq, work); 4898 return BLK_STS_OK; 4899 } 4900 4901 static void rbd_free_disk(struct rbd_device *rbd_dev) 4902 { 4903 blk_cleanup_queue(rbd_dev->disk->queue); 4904 blk_mq_free_tag_set(&rbd_dev->tag_set); 4905 put_disk(rbd_dev->disk); 4906 rbd_dev->disk = NULL; 4907 } 4908 4909 static int rbd_obj_read_sync(struct rbd_device *rbd_dev, 4910 struct ceph_object_id *oid, 4911 struct ceph_object_locator *oloc, 4912 void *buf, int buf_len) 4913 4914 { 4915 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4916 struct ceph_osd_request *req; 4917 struct page **pages; 4918 int num_pages = calc_pages_for(0, buf_len); 4919 int ret; 4920 4921 req = ceph_osdc_alloc_request(osdc, NULL, 1, false, GFP_KERNEL); 4922 if (!req) 4923 return -ENOMEM; 4924 4925 ceph_oid_copy(&req->r_base_oid, oid); 4926 ceph_oloc_copy(&req->r_base_oloc, oloc); 4927 req->r_flags = CEPH_OSD_FLAG_READ; 4928 4929 pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL); 4930 if (IS_ERR(pages)) { 4931 ret = PTR_ERR(pages); 4932 goto out_req; 4933 } 4934 4935 osd_req_op_extent_init(req, 0, CEPH_OSD_OP_READ, 0, buf_len, 0, 0); 4936 osd_req_op_extent_osd_data_pages(req, 0, pages, buf_len, 0, false, 4937 true); 4938 4939 ret = ceph_osdc_alloc_messages(req, GFP_KERNEL); 4940 if (ret) 4941 goto out_req; 4942 4943 ceph_osdc_start_request(osdc, req, false); 4944 ret = ceph_osdc_wait_request(osdc, req); 4945 if (ret >= 0) 4946 ceph_copy_from_page_vector(pages, buf, 0, ret); 4947 4948 out_req: 4949 ceph_osdc_put_request(req); 4950 return ret; 4951 } 4952 4953 /* 4954 * Read the complete header for the given rbd device. On successful 4955 * return, the rbd_dev->header field will contain up-to-date 4956 * information about the image. 4957 */ 4958 static int rbd_dev_v1_header_info(struct rbd_device *rbd_dev) 4959 { 4960 struct rbd_image_header_ondisk *ondisk = NULL; 4961 u32 snap_count = 0; 4962 u64 names_size = 0; 4963 u32 want_count; 4964 int ret; 4965 4966 /* 4967 * The complete header will include an array of its 64-bit 4968 * snapshot ids, followed by the names of those snapshots as 4969 * a contiguous block of NUL-terminated strings. Note that 4970 * the number of snapshots could change by the time we read 4971 * it in, in which case we re-read it. 4972 */ 4973 do { 4974 size_t size; 4975 4976 kfree(ondisk); 4977 4978 size = sizeof (*ondisk); 4979 size += snap_count * sizeof (struct rbd_image_snap_ondisk); 4980 size += names_size; 4981 ondisk = kmalloc(size, GFP_KERNEL); 4982 if (!ondisk) 4983 return -ENOMEM; 4984 4985 ret = rbd_obj_read_sync(rbd_dev, &rbd_dev->header_oid, 4986 &rbd_dev->header_oloc, ondisk, size); 4987 if (ret < 0) 4988 goto out; 4989 if ((size_t)ret < size) { 4990 ret = -ENXIO; 4991 rbd_warn(rbd_dev, "short header read (want %zd got %d)", 4992 size, ret); 4993 goto out; 4994 } 4995 if (!rbd_dev_ondisk_valid(ondisk)) { 4996 ret = -ENXIO; 4997 rbd_warn(rbd_dev, "invalid header"); 4998 goto out; 4999 } 5000 5001 names_size = le64_to_cpu(ondisk->snap_names_len); 5002 want_count = snap_count; 5003 snap_count = le32_to_cpu(ondisk->snap_count); 5004 } while (snap_count != want_count); 5005 5006 ret = rbd_header_from_disk(rbd_dev, ondisk); 5007 out: 5008 kfree(ondisk); 5009 5010 return ret; 5011 } 5012 5013 /* 5014 * Clear the rbd device's EXISTS flag if the snapshot it's mapped to 5015 * has disappeared from the (just updated) snapshot context. 5016 */ 5017 static void rbd_exists_validate(struct rbd_device *rbd_dev) 5018 { 5019 u64 snap_id; 5020 5021 if (!test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags)) 5022 return; 5023 5024 snap_id = rbd_dev->spec->snap_id; 5025 if (snap_id == CEPH_NOSNAP) 5026 return; 5027 5028 if (rbd_dev_snap_index(rbd_dev, snap_id) == BAD_SNAP_INDEX) 5029 clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); 5030 } 5031 5032 static void rbd_dev_update_size(struct rbd_device *rbd_dev) 5033 { 5034 sector_t size; 5035 5036 /* 5037 * If EXISTS is not set, rbd_dev->disk may be NULL, so don't 5038 * try to update its size. If REMOVING is set, updating size 5039 * is just useless work since the device can't be opened. 5040 */ 5041 if (test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags) && 5042 !test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags)) { 5043 size = (sector_t)rbd_dev->mapping.size / SECTOR_SIZE; 5044 dout("setting size to %llu sectors", (unsigned long long)size); 5045 set_capacity(rbd_dev->disk, size); 5046 revalidate_disk(rbd_dev->disk); 5047 } 5048 } 5049 5050 static int rbd_dev_refresh(struct rbd_device *rbd_dev) 5051 { 5052 u64 mapping_size; 5053 int ret; 5054 5055 down_write(&rbd_dev->header_rwsem); 5056 mapping_size = rbd_dev->mapping.size; 5057 5058 ret = rbd_dev_header_info(rbd_dev); 5059 if (ret) 5060 goto out; 5061 5062 /* 5063 * If there is a parent, see if it has disappeared due to the 5064 * mapped image getting flattened. 5065 */ 5066 if (rbd_dev->parent) { 5067 ret = rbd_dev_v2_parent_info(rbd_dev); 5068 if (ret) 5069 goto out; 5070 } 5071 5072 if (rbd_dev->spec->snap_id == CEPH_NOSNAP) { 5073 rbd_dev->mapping.size = rbd_dev->header.image_size; 5074 } else { 5075 /* validate mapped snapshot's EXISTS flag */ 5076 rbd_exists_validate(rbd_dev); 5077 } 5078 5079 out: 5080 up_write(&rbd_dev->header_rwsem); 5081 if (!ret && mapping_size != rbd_dev->mapping.size) 5082 rbd_dev_update_size(rbd_dev); 5083 5084 return ret; 5085 } 5086 5087 static int rbd_init_request(struct blk_mq_tag_set *set, struct request *rq, 5088 unsigned int hctx_idx, unsigned int numa_node) 5089 { 5090 struct work_struct *work = blk_mq_rq_to_pdu(rq); 5091 5092 INIT_WORK(work, rbd_queue_workfn); 5093 return 0; 5094 } 5095 5096 static const struct blk_mq_ops rbd_mq_ops = { 5097 .queue_rq = rbd_queue_rq, 5098 .init_request = rbd_init_request, 5099 }; 5100 5101 static int rbd_init_disk(struct rbd_device *rbd_dev) 5102 { 5103 struct gendisk *disk; 5104 struct request_queue *q; 5105 unsigned int objset_bytes = 5106 rbd_dev->layout.object_size * rbd_dev->layout.stripe_count; 5107 int err; 5108 5109 /* create gendisk info */ 5110 disk = alloc_disk(single_major ? 5111 (1 << RBD_SINGLE_MAJOR_PART_SHIFT) : 5112 RBD_MINORS_PER_MAJOR); 5113 if (!disk) 5114 return -ENOMEM; 5115 5116 snprintf(disk->disk_name, sizeof(disk->disk_name), RBD_DRV_NAME "%d", 5117 rbd_dev->dev_id); 5118 disk->major = rbd_dev->major; 5119 disk->first_minor = rbd_dev->minor; 5120 if (single_major) 5121 disk->flags |= GENHD_FL_EXT_DEVT; 5122 disk->fops = &rbd_bd_ops; 5123 disk->private_data = rbd_dev; 5124 5125 memset(&rbd_dev->tag_set, 0, sizeof(rbd_dev->tag_set)); 5126 rbd_dev->tag_set.ops = &rbd_mq_ops; 5127 rbd_dev->tag_set.queue_depth = rbd_dev->opts->queue_depth; 5128 rbd_dev->tag_set.numa_node = NUMA_NO_NODE; 5129 rbd_dev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; 5130 rbd_dev->tag_set.nr_hw_queues = 1; 5131 rbd_dev->tag_set.cmd_size = sizeof(struct work_struct); 5132 5133 err = blk_mq_alloc_tag_set(&rbd_dev->tag_set); 5134 if (err) 5135 goto out_disk; 5136 5137 q = blk_mq_init_queue(&rbd_dev->tag_set); 5138 if (IS_ERR(q)) { 5139 err = PTR_ERR(q); 5140 goto out_tag_set; 5141 } 5142 5143 blk_queue_flag_set(QUEUE_FLAG_NONROT, q); 5144 /* QUEUE_FLAG_ADD_RANDOM is off by default for blk-mq */ 5145 5146 blk_queue_max_hw_sectors(q, objset_bytes >> SECTOR_SHIFT); 5147 q->limits.max_sectors = queue_max_hw_sectors(q); 5148 blk_queue_max_segments(q, USHRT_MAX); 5149 blk_queue_max_segment_size(q, UINT_MAX); 5150 blk_queue_io_min(q, rbd_dev->opts->alloc_size); 5151 blk_queue_io_opt(q, rbd_dev->opts->alloc_size); 5152 5153 if (rbd_dev->opts->trim) { 5154 blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); 5155 q->limits.discard_granularity = rbd_dev->opts->alloc_size; 5156 blk_queue_max_discard_sectors(q, objset_bytes >> SECTOR_SHIFT); 5157 blk_queue_max_write_zeroes_sectors(q, objset_bytes >> SECTOR_SHIFT); 5158 } 5159 5160 if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC)) 5161 q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES; 5162 5163 /* 5164 * disk_release() expects a queue ref from add_disk() and will 5165 * put it. Hold an extra ref until add_disk() is called. 5166 */ 5167 WARN_ON(!blk_get_queue(q)); 5168 disk->queue = q; 5169 q->queuedata = rbd_dev; 5170 5171 rbd_dev->disk = disk; 5172 5173 return 0; 5174 out_tag_set: 5175 blk_mq_free_tag_set(&rbd_dev->tag_set); 5176 out_disk: 5177 put_disk(disk); 5178 return err; 5179 } 5180 5181 /* 5182 sysfs 5183 */ 5184 5185 static struct rbd_device *dev_to_rbd_dev(struct device *dev) 5186 { 5187 return container_of(dev, struct rbd_device, dev); 5188 } 5189 5190 static ssize_t rbd_size_show(struct device *dev, 5191 struct device_attribute *attr, char *buf) 5192 { 5193 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5194 5195 return sprintf(buf, "%llu\n", 5196 (unsigned long long)rbd_dev->mapping.size); 5197 } 5198 5199 /* 5200 * Note this shows the features for whatever's mapped, which is not 5201 * necessarily the base image. 5202 */ 5203 static ssize_t rbd_features_show(struct device *dev, 5204 struct device_attribute *attr, char *buf) 5205 { 5206 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5207 5208 return sprintf(buf, "0x%016llx\n", 5209 (unsigned long long)rbd_dev->mapping.features); 5210 } 5211 5212 static ssize_t rbd_major_show(struct device *dev, 5213 struct device_attribute *attr, char *buf) 5214 { 5215 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5216 5217 if (rbd_dev->major) 5218 return sprintf(buf, "%d\n", rbd_dev->major); 5219 5220 return sprintf(buf, "(none)\n"); 5221 } 5222 5223 static ssize_t rbd_minor_show(struct device *dev, 5224 struct device_attribute *attr, char *buf) 5225 { 5226 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5227 5228 return sprintf(buf, "%d\n", rbd_dev->minor); 5229 } 5230 5231 static ssize_t rbd_client_addr_show(struct device *dev, 5232 struct device_attribute *attr, char *buf) 5233 { 5234 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5235 struct ceph_entity_addr *client_addr = 5236 ceph_client_addr(rbd_dev->rbd_client->client); 5237 5238 return sprintf(buf, "%pISpc/%u\n", &client_addr->in_addr, 5239 le32_to_cpu(client_addr->nonce)); 5240 } 5241 5242 static ssize_t rbd_client_id_show(struct device *dev, 5243 struct device_attribute *attr, char *buf) 5244 { 5245 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5246 5247 return sprintf(buf, "client%lld\n", 5248 ceph_client_gid(rbd_dev->rbd_client->client)); 5249 } 5250 5251 static ssize_t rbd_cluster_fsid_show(struct device *dev, 5252 struct device_attribute *attr, char *buf) 5253 { 5254 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5255 5256 return sprintf(buf, "%pU\n", &rbd_dev->rbd_client->client->fsid); 5257 } 5258 5259 static ssize_t rbd_config_info_show(struct device *dev, 5260 struct device_attribute *attr, char *buf) 5261 { 5262 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5263 5264 return sprintf(buf, "%s\n", rbd_dev->config_info); 5265 } 5266 5267 static ssize_t rbd_pool_show(struct device *dev, 5268 struct device_attribute *attr, char *buf) 5269 { 5270 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5271 5272 return sprintf(buf, "%s\n", rbd_dev->spec->pool_name); 5273 } 5274 5275 static ssize_t rbd_pool_id_show(struct device *dev, 5276 struct device_attribute *attr, char *buf) 5277 { 5278 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5279 5280 return sprintf(buf, "%llu\n", 5281 (unsigned long long) rbd_dev->spec->pool_id); 5282 } 5283 5284 static ssize_t rbd_pool_ns_show(struct device *dev, 5285 struct device_attribute *attr, char *buf) 5286 { 5287 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5288 5289 return sprintf(buf, "%s\n", rbd_dev->spec->pool_ns ?: ""); 5290 } 5291 5292 static ssize_t rbd_name_show(struct device *dev, 5293 struct device_attribute *attr, char *buf) 5294 { 5295 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5296 5297 if (rbd_dev->spec->image_name) 5298 return sprintf(buf, "%s\n", rbd_dev->spec->image_name); 5299 5300 return sprintf(buf, "(unknown)\n"); 5301 } 5302 5303 static ssize_t rbd_image_id_show(struct device *dev, 5304 struct device_attribute *attr, char *buf) 5305 { 5306 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5307 5308 return sprintf(buf, "%s\n", rbd_dev->spec->image_id); 5309 } 5310 5311 /* 5312 * Shows the name of the currently-mapped snapshot (or 5313 * RBD_SNAP_HEAD_NAME for the base image). 5314 */ 5315 static ssize_t rbd_snap_show(struct device *dev, 5316 struct device_attribute *attr, 5317 char *buf) 5318 { 5319 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5320 5321 return sprintf(buf, "%s\n", rbd_dev->spec->snap_name); 5322 } 5323 5324 static ssize_t rbd_snap_id_show(struct device *dev, 5325 struct device_attribute *attr, char *buf) 5326 { 5327 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5328 5329 return sprintf(buf, "%llu\n", rbd_dev->spec->snap_id); 5330 } 5331 5332 /* 5333 * For a v2 image, shows the chain of parent images, separated by empty 5334 * lines. For v1 images or if there is no parent, shows "(no parent 5335 * image)". 5336 */ 5337 static ssize_t rbd_parent_show(struct device *dev, 5338 struct device_attribute *attr, 5339 char *buf) 5340 { 5341 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5342 ssize_t count = 0; 5343 5344 if (!rbd_dev->parent) 5345 return sprintf(buf, "(no parent image)\n"); 5346 5347 for ( ; rbd_dev->parent; rbd_dev = rbd_dev->parent) { 5348 struct rbd_spec *spec = rbd_dev->parent_spec; 5349 5350 count += sprintf(&buf[count], "%s" 5351 "pool_id %llu\npool_name %s\n" 5352 "pool_ns %s\n" 5353 "image_id %s\nimage_name %s\n" 5354 "snap_id %llu\nsnap_name %s\n" 5355 "overlap %llu\n", 5356 !count ? "" : "\n", /* first? */ 5357 spec->pool_id, spec->pool_name, 5358 spec->pool_ns ?: "", 5359 spec->image_id, spec->image_name ?: "(unknown)", 5360 spec->snap_id, spec->snap_name, 5361 rbd_dev->parent_overlap); 5362 } 5363 5364 return count; 5365 } 5366 5367 static ssize_t rbd_image_refresh(struct device *dev, 5368 struct device_attribute *attr, 5369 const char *buf, 5370 size_t size) 5371 { 5372 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5373 int ret; 5374 5375 ret = rbd_dev_refresh(rbd_dev); 5376 if (ret) 5377 return ret; 5378 5379 return size; 5380 } 5381 5382 static DEVICE_ATTR(size, 0444, rbd_size_show, NULL); 5383 static DEVICE_ATTR(features, 0444, rbd_features_show, NULL); 5384 static DEVICE_ATTR(major, 0444, rbd_major_show, NULL); 5385 static DEVICE_ATTR(minor, 0444, rbd_minor_show, NULL); 5386 static DEVICE_ATTR(client_addr, 0444, rbd_client_addr_show, NULL); 5387 static DEVICE_ATTR(client_id, 0444, rbd_client_id_show, NULL); 5388 static DEVICE_ATTR(cluster_fsid, 0444, rbd_cluster_fsid_show, NULL); 5389 static DEVICE_ATTR(config_info, 0400, rbd_config_info_show, NULL); 5390 static DEVICE_ATTR(pool, 0444, rbd_pool_show, NULL); 5391 static DEVICE_ATTR(pool_id, 0444, rbd_pool_id_show, NULL); 5392 static DEVICE_ATTR(pool_ns, 0444, rbd_pool_ns_show, NULL); 5393 static DEVICE_ATTR(name, 0444, rbd_name_show, NULL); 5394 static DEVICE_ATTR(image_id, 0444, rbd_image_id_show, NULL); 5395 static DEVICE_ATTR(refresh, 0200, NULL, rbd_image_refresh); 5396 static DEVICE_ATTR(current_snap, 0444, rbd_snap_show, NULL); 5397 static DEVICE_ATTR(snap_id, 0444, rbd_snap_id_show, NULL); 5398 static DEVICE_ATTR(parent, 0444, rbd_parent_show, NULL); 5399 5400 static struct attribute *rbd_attrs[] = { 5401 &dev_attr_size.attr, 5402 &dev_attr_features.attr, 5403 &dev_attr_major.attr, 5404 &dev_attr_minor.attr, 5405 &dev_attr_client_addr.attr, 5406 &dev_attr_client_id.attr, 5407 &dev_attr_cluster_fsid.attr, 5408 &dev_attr_config_info.attr, 5409 &dev_attr_pool.attr, 5410 &dev_attr_pool_id.attr, 5411 &dev_attr_pool_ns.attr, 5412 &dev_attr_name.attr, 5413 &dev_attr_image_id.attr, 5414 &dev_attr_current_snap.attr, 5415 &dev_attr_snap_id.attr, 5416 &dev_attr_parent.attr, 5417 &dev_attr_refresh.attr, 5418 NULL 5419 }; 5420 5421 static struct attribute_group rbd_attr_group = { 5422 .attrs = rbd_attrs, 5423 }; 5424 5425 static const struct attribute_group *rbd_attr_groups[] = { 5426 &rbd_attr_group, 5427 NULL 5428 }; 5429 5430 static void rbd_dev_release(struct device *dev); 5431 5432 static const struct device_type rbd_device_type = { 5433 .name = "rbd", 5434 .groups = rbd_attr_groups, 5435 .release = rbd_dev_release, 5436 }; 5437 5438 static struct rbd_spec *rbd_spec_get(struct rbd_spec *spec) 5439 { 5440 kref_get(&spec->kref); 5441 5442 return spec; 5443 } 5444 5445 static void rbd_spec_free(struct kref *kref); 5446 static void rbd_spec_put(struct rbd_spec *spec) 5447 { 5448 if (spec) 5449 kref_put(&spec->kref, rbd_spec_free); 5450 } 5451 5452 static struct rbd_spec *rbd_spec_alloc(void) 5453 { 5454 struct rbd_spec *spec; 5455 5456 spec = kzalloc(sizeof (*spec), GFP_KERNEL); 5457 if (!spec) 5458 return NULL; 5459 5460 spec->pool_id = CEPH_NOPOOL; 5461 spec->snap_id = CEPH_NOSNAP; 5462 kref_init(&spec->kref); 5463 5464 return spec; 5465 } 5466 5467 static void rbd_spec_free(struct kref *kref) 5468 { 5469 struct rbd_spec *spec = container_of(kref, struct rbd_spec, kref); 5470 5471 kfree(spec->pool_name); 5472 kfree(spec->pool_ns); 5473 kfree(spec->image_id); 5474 kfree(spec->image_name); 5475 kfree(spec->snap_name); 5476 kfree(spec); 5477 } 5478 5479 static void rbd_dev_free(struct rbd_device *rbd_dev) 5480 { 5481 WARN_ON(rbd_dev->watch_state != RBD_WATCH_STATE_UNREGISTERED); 5482 WARN_ON(rbd_dev->lock_state != RBD_LOCK_STATE_UNLOCKED); 5483 5484 ceph_oid_destroy(&rbd_dev->header_oid); 5485 ceph_oloc_destroy(&rbd_dev->header_oloc); 5486 kfree(rbd_dev->config_info); 5487 5488 rbd_put_client(rbd_dev->rbd_client); 5489 rbd_spec_put(rbd_dev->spec); 5490 kfree(rbd_dev->opts); 5491 kfree(rbd_dev); 5492 } 5493 5494 static void rbd_dev_release(struct device *dev) 5495 { 5496 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5497 bool need_put = !!rbd_dev->opts; 5498 5499 if (need_put) { 5500 destroy_workqueue(rbd_dev->task_wq); 5501 ida_simple_remove(&rbd_dev_id_ida, rbd_dev->dev_id); 5502 } 5503 5504 rbd_dev_free(rbd_dev); 5505 5506 /* 5507 * This is racy, but way better than putting module outside of 5508 * the release callback. The race window is pretty small, so 5509 * doing something similar to dm (dm-builtin.c) is overkill. 5510 */ 5511 if (need_put) 5512 module_put(THIS_MODULE); 5513 } 5514 5515 static struct rbd_device *__rbd_dev_create(struct rbd_client *rbdc, 5516 struct rbd_spec *spec) 5517 { 5518 struct rbd_device *rbd_dev; 5519 5520 rbd_dev = kzalloc(sizeof(*rbd_dev), GFP_KERNEL); 5521 if (!rbd_dev) 5522 return NULL; 5523 5524 spin_lock_init(&rbd_dev->lock); 5525 INIT_LIST_HEAD(&rbd_dev->node); 5526 init_rwsem(&rbd_dev->header_rwsem); 5527 5528 rbd_dev->header.data_pool_id = CEPH_NOPOOL; 5529 ceph_oid_init(&rbd_dev->header_oid); 5530 rbd_dev->header_oloc.pool = spec->pool_id; 5531 if (spec->pool_ns) { 5532 WARN_ON(!*spec->pool_ns); 5533 rbd_dev->header_oloc.pool_ns = 5534 ceph_find_or_create_string(spec->pool_ns, 5535 strlen(spec->pool_ns)); 5536 } 5537 5538 mutex_init(&rbd_dev->watch_mutex); 5539 rbd_dev->watch_state = RBD_WATCH_STATE_UNREGISTERED; 5540 INIT_DELAYED_WORK(&rbd_dev->watch_dwork, rbd_reregister_watch); 5541 5542 init_rwsem(&rbd_dev->lock_rwsem); 5543 rbd_dev->lock_state = RBD_LOCK_STATE_UNLOCKED; 5544 INIT_WORK(&rbd_dev->acquired_lock_work, rbd_notify_acquired_lock); 5545 INIT_WORK(&rbd_dev->released_lock_work, rbd_notify_released_lock); 5546 INIT_DELAYED_WORK(&rbd_dev->lock_dwork, rbd_acquire_lock); 5547 INIT_WORK(&rbd_dev->unlock_work, rbd_release_lock_work); 5548 spin_lock_init(&rbd_dev->lock_lists_lock); 5549 INIT_LIST_HEAD(&rbd_dev->acquiring_list); 5550 INIT_LIST_HEAD(&rbd_dev->running_list); 5551 init_completion(&rbd_dev->acquire_wait); 5552 init_completion(&rbd_dev->releasing_wait); 5553 5554 spin_lock_init(&rbd_dev->object_map_lock); 5555 5556 rbd_dev->dev.bus = &rbd_bus_type; 5557 rbd_dev->dev.type = &rbd_device_type; 5558 rbd_dev->dev.parent = &rbd_root_dev; 5559 device_initialize(&rbd_dev->dev); 5560 5561 rbd_dev->rbd_client = rbdc; 5562 rbd_dev->spec = spec; 5563 5564 return rbd_dev; 5565 } 5566 5567 /* 5568 * Create a mapping rbd_dev. 5569 */ 5570 static struct rbd_device *rbd_dev_create(struct rbd_client *rbdc, 5571 struct rbd_spec *spec, 5572 struct rbd_options *opts) 5573 { 5574 struct rbd_device *rbd_dev; 5575 5576 rbd_dev = __rbd_dev_create(rbdc, spec); 5577 if (!rbd_dev) 5578 return NULL; 5579 5580 rbd_dev->opts = opts; 5581 5582 /* get an id and fill in device name */ 5583 rbd_dev->dev_id = ida_simple_get(&rbd_dev_id_ida, 0, 5584 minor_to_rbd_dev_id(1 << MINORBITS), 5585 GFP_KERNEL); 5586 if (rbd_dev->dev_id < 0) 5587 goto fail_rbd_dev; 5588 5589 sprintf(rbd_dev->name, RBD_DRV_NAME "%d", rbd_dev->dev_id); 5590 rbd_dev->task_wq = alloc_ordered_workqueue("%s-tasks", WQ_MEM_RECLAIM, 5591 rbd_dev->name); 5592 if (!rbd_dev->task_wq) 5593 goto fail_dev_id; 5594 5595 /* we have a ref from do_rbd_add() */ 5596 __module_get(THIS_MODULE); 5597 5598 dout("%s rbd_dev %p dev_id %d\n", __func__, rbd_dev, rbd_dev->dev_id); 5599 return rbd_dev; 5600 5601 fail_dev_id: 5602 ida_simple_remove(&rbd_dev_id_ida, rbd_dev->dev_id); 5603 fail_rbd_dev: 5604 rbd_dev_free(rbd_dev); 5605 return NULL; 5606 } 5607 5608 static void rbd_dev_destroy(struct rbd_device *rbd_dev) 5609 { 5610 if (rbd_dev) 5611 put_device(&rbd_dev->dev); 5612 } 5613 5614 /* 5615 * Get the size and object order for an image snapshot, or if 5616 * snap_id is CEPH_NOSNAP, gets this information for the base 5617 * image. 5618 */ 5619 static int _rbd_dev_v2_snap_size(struct rbd_device *rbd_dev, u64 snap_id, 5620 u8 *order, u64 *snap_size) 5621 { 5622 __le64 snapid = cpu_to_le64(snap_id); 5623 int ret; 5624 struct { 5625 u8 order; 5626 __le64 size; 5627 } __attribute__ ((packed)) size_buf = { 0 }; 5628 5629 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5630 &rbd_dev->header_oloc, "get_size", 5631 &snapid, sizeof(snapid), 5632 &size_buf, sizeof(size_buf)); 5633 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 5634 if (ret < 0) 5635 return ret; 5636 if (ret < sizeof (size_buf)) 5637 return -ERANGE; 5638 5639 if (order) { 5640 *order = size_buf.order; 5641 dout(" order %u", (unsigned int)*order); 5642 } 5643 *snap_size = le64_to_cpu(size_buf.size); 5644 5645 dout(" snap_id 0x%016llx snap_size = %llu\n", 5646 (unsigned long long)snap_id, 5647 (unsigned long long)*snap_size); 5648 5649 return 0; 5650 } 5651 5652 static int rbd_dev_v2_image_size(struct rbd_device *rbd_dev) 5653 { 5654 return _rbd_dev_v2_snap_size(rbd_dev, CEPH_NOSNAP, 5655 &rbd_dev->header.obj_order, 5656 &rbd_dev->header.image_size); 5657 } 5658 5659 static int rbd_dev_v2_object_prefix(struct rbd_device *rbd_dev) 5660 { 5661 void *reply_buf; 5662 int ret; 5663 void *p; 5664 5665 reply_buf = kzalloc(RBD_OBJ_PREFIX_LEN_MAX, GFP_KERNEL); 5666 if (!reply_buf) 5667 return -ENOMEM; 5668 5669 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5670 &rbd_dev->header_oloc, "get_object_prefix", 5671 NULL, 0, reply_buf, RBD_OBJ_PREFIX_LEN_MAX); 5672 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 5673 if (ret < 0) 5674 goto out; 5675 5676 p = reply_buf; 5677 rbd_dev->header.object_prefix = ceph_extract_encoded_string(&p, 5678 p + ret, NULL, GFP_NOIO); 5679 ret = 0; 5680 5681 if (IS_ERR(rbd_dev->header.object_prefix)) { 5682 ret = PTR_ERR(rbd_dev->header.object_prefix); 5683 rbd_dev->header.object_prefix = NULL; 5684 } else { 5685 dout(" object_prefix = %s\n", rbd_dev->header.object_prefix); 5686 } 5687 out: 5688 kfree(reply_buf); 5689 5690 return ret; 5691 } 5692 5693 static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id, 5694 u64 *snap_features) 5695 { 5696 __le64 snapid = cpu_to_le64(snap_id); 5697 struct { 5698 __le64 features; 5699 __le64 incompat; 5700 } __attribute__ ((packed)) features_buf = { 0 }; 5701 u64 unsup; 5702 int ret; 5703 5704 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5705 &rbd_dev->header_oloc, "get_features", 5706 &snapid, sizeof(snapid), 5707 &features_buf, sizeof(features_buf)); 5708 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 5709 if (ret < 0) 5710 return ret; 5711 if (ret < sizeof (features_buf)) 5712 return -ERANGE; 5713 5714 unsup = le64_to_cpu(features_buf.incompat) & ~RBD_FEATURES_SUPPORTED; 5715 if (unsup) { 5716 rbd_warn(rbd_dev, "image uses unsupported features: 0x%llx", 5717 unsup); 5718 return -ENXIO; 5719 } 5720 5721 *snap_features = le64_to_cpu(features_buf.features); 5722 5723 dout(" snap_id 0x%016llx features = 0x%016llx incompat = 0x%016llx\n", 5724 (unsigned long long)snap_id, 5725 (unsigned long long)*snap_features, 5726 (unsigned long long)le64_to_cpu(features_buf.incompat)); 5727 5728 return 0; 5729 } 5730 5731 static int rbd_dev_v2_features(struct rbd_device *rbd_dev) 5732 { 5733 return _rbd_dev_v2_snap_features(rbd_dev, CEPH_NOSNAP, 5734 &rbd_dev->header.features); 5735 } 5736 5737 /* 5738 * These are generic image flags, but since they are used only for 5739 * object map, store them in rbd_dev->object_map_flags. 5740 * 5741 * For the same reason, this function is called only on object map 5742 * (re)load and not on header refresh. 5743 */ 5744 static int rbd_dev_v2_get_flags(struct rbd_device *rbd_dev) 5745 { 5746 __le64 snapid = cpu_to_le64(rbd_dev->spec->snap_id); 5747 __le64 flags; 5748 int ret; 5749 5750 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5751 &rbd_dev->header_oloc, "get_flags", 5752 &snapid, sizeof(snapid), 5753 &flags, sizeof(flags)); 5754 if (ret < 0) 5755 return ret; 5756 if (ret < sizeof(flags)) 5757 return -EBADMSG; 5758 5759 rbd_dev->object_map_flags = le64_to_cpu(flags); 5760 return 0; 5761 } 5762 5763 struct parent_image_info { 5764 u64 pool_id; 5765 const char *pool_ns; 5766 const char *image_id; 5767 u64 snap_id; 5768 5769 bool has_overlap; 5770 u64 overlap; 5771 }; 5772 5773 /* 5774 * The caller is responsible for @pii. 5775 */ 5776 static int decode_parent_image_spec(void **p, void *end, 5777 struct parent_image_info *pii) 5778 { 5779 u8 struct_v; 5780 u32 struct_len; 5781 int ret; 5782 5783 ret = ceph_start_decoding(p, end, 1, "ParentImageSpec", 5784 &struct_v, &struct_len); 5785 if (ret) 5786 return ret; 5787 5788 ceph_decode_64_safe(p, end, pii->pool_id, e_inval); 5789 pii->pool_ns = ceph_extract_encoded_string(p, end, NULL, GFP_KERNEL); 5790 if (IS_ERR(pii->pool_ns)) { 5791 ret = PTR_ERR(pii->pool_ns); 5792 pii->pool_ns = NULL; 5793 return ret; 5794 } 5795 pii->image_id = ceph_extract_encoded_string(p, end, NULL, GFP_KERNEL); 5796 if (IS_ERR(pii->image_id)) { 5797 ret = PTR_ERR(pii->image_id); 5798 pii->image_id = NULL; 5799 return ret; 5800 } 5801 ceph_decode_64_safe(p, end, pii->snap_id, e_inval); 5802 return 0; 5803 5804 e_inval: 5805 return -EINVAL; 5806 } 5807 5808 static int __get_parent_info(struct rbd_device *rbd_dev, 5809 struct page *req_page, 5810 struct page *reply_page, 5811 struct parent_image_info *pii) 5812 { 5813 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 5814 size_t reply_len = PAGE_SIZE; 5815 void *p, *end; 5816 int ret; 5817 5818 ret = ceph_osdc_call(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 5819 "rbd", "parent_get", CEPH_OSD_FLAG_READ, 5820 req_page, sizeof(u64), &reply_page, &reply_len); 5821 if (ret) 5822 return ret == -EOPNOTSUPP ? 1 : ret; 5823 5824 p = page_address(reply_page); 5825 end = p + reply_len; 5826 ret = decode_parent_image_spec(&p, end, pii); 5827 if (ret) 5828 return ret; 5829 5830 ret = ceph_osdc_call(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 5831 "rbd", "parent_overlap_get", CEPH_OSD_FLAG_READ, 5832 req_page, sizeof(u64), &reply_page, &reply_len); 5833 if (ret) 5834 return ret; 5835 5836 p = page_address(reply_page); 5837 end = p + reply_len; 5838 ceph_decode_8_safe(&p, end, pii->has_overlap, e_inval); 5839 if (pii->has_overlap) 5840 ceph_decode_64_safe(&p, end, pii->overlap, e_inval); 5841 5842 return 0; 5843 5844 e_inval: 5845 return -EINVAL; 5846 } 5847 5848 /* 5849 * The caller is responsible for @pii. 5850 */ 5851 static int __get_parent_info_legacy(struct rbd_device *rbd_dev, 5852 struct page *req_page, 5853 struct page *reply_page, 5854 struct parent_image_info *pii) 5855 { 5856 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 5857 size_t reply_len = PAGE_SIZE; 5858 void *p, *end; 5859 int ret; 5860 5861 ret = ceph_osdc_call(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 5862 "rbd", "get_parent", CEPH_OSD_FLAG_READ, 5863 req_page, sizeof(u64), &reply_page, &reply_len); 5864 if (ret) 5865 return ret; 5866 5867 p = page_address(reply_page); 5868 end = p + reply_len; 5869 ceph_decode_64_safe(&p, end, pii->pool_id, e_inval); 5870 pii->image_id = ceph_extract_encoded_string(&p, end, NULL, GFP_KERNEL); 5871 if (IS_ERR(pii->image_id)) { 5872 ret = PTR_ERR(pii->image_id); 5873 pii->image_id = NULL; 5874 return ret; 5875 } 5876 ceph_decode_64_safe(&p, end, pii->snap_id, e_inval); 5877 pii->has_overlap = true; 5878 ceph_decode_64_safe(&p, end, pii->overlap, e_inval); 5879 5880 return 0; 5881 5882 e_inval: 5883 return -EINVAL; 5884 } 5885 5886 static int get_parent_info(struct rbd_device *rbd_dev, 5887 struct parent_image_info *pii) 5888 { 5889 struct page *req_page, *reply_page; 5890 void *p; 5891 int ret; 5892 5893 req_page = alloc_page(GFP_KERNEL); 5894 if (!req_page) 5895 return -ENOMEM; 5896 5897 reply_page = alloc_page(GFP_KERNEL); 5898 if (!reply_page) { 5899 __free_page(req_page); 5900 return -ENOMEM; 5901 } 5902 5903 p = page_address(req_page); 5904 ceph_encode_64(&p, rbd_dev->spec->snap_id); 5905 ret = __get_parent_info(rbd_dev, req_page, reply_page, pii); 5906 if (ret > 0) 5907 ret = __get_parent_info_legacy(rbd_dev, req_page, reply_page, 5908 pii); 5909 5910 __free_page(req_page); 5911 __free_page(reply_page); 5912 return ret; 5913 } 5914 5915 static int rbd_dev_v2_parent_info(struct rbd_device *rbd_dev) 5916 { 5917 struct rbd_spec *parent_spec; 5918 struct parent_image_info pii = { 0 }; 5919 int ret; 5920 5921 parent_spec = rbd_spec_alloc(); 5922 if (!parent_spec) 5923 return -ENOMEM; 5924 5925 ret = get_parent_info(rbd_dev, &pii); 5926 if (ret) 5927 goto out_err; 5928 5929 dout("%s pool_id %llu pool_ns %s image_id %s snap_id %llu has_overlap %d overlap %llu\n", 5930 __func__, pii.pool_id, pii.pool_ns, pii.image_id, pii.snap_id, 5931 pii.has_overlap, pii.overlap); 5932 5933 if (pii.pool_id == CEPH_NOPOOL || !pii.has_overlap) { 5934 /* 5935 * Either the parent never existed, or we have 5936 * record of it but the image got flattened so it no 5937 * longer has a parent. When the parent of a 5938 * layered image disappears we immediately set the 5939 * overlap to 0. The effect of this is that all new 5940 * requests will be treated as if the image had no 5941 * parent. 5942 * 5943 * If !pii.has_overlap, the parent image spec is not 5944 * applicable. It's there to avoid duplication in each 5945 * snapshot record. 5946 */ 5947 if (rbd_dev->parent_overlap) { 5948 rbd_dev->parent_overlap = 0; 5949 rbd_dev_parent_put(rbd_dev); 5950 pr_info("%s: clone image has been flattened\n", 5951 rbd_dev->disk->disk_name); 5952 } 5953 5954 goto out; /* No parent? No problem. */ 5955 } 5956 5957 /* The ceph file layout needs to fit pool id in 32 bits */ 5958 5959 ret = -EIO; 5960 if (pii.pool_id > (u64)U32_MAX) { 5961 rbd_warn(NULL, "parent pool id too large (%llu > %u)", 5962 (unsigned long long)pii.pool_id, U32_MAX); 5963 goto out_err; 5964 } 5965 5966 /* 5967 * The parent won't change (except when the clone is 5968 * flattened, already handled that). So we only need to 5969 * record the parent spec we have not already done so. 5970 */ 5971 if (!rbd_dev->parent_spec) { 5972 parent_spec->pool_id = pii.pool_id; 5973 if (pii.pool_ns && *pii.pool_ns) { 5974 parent_spec->pool_ns = pii.pool_ns; 5975 pii.pool_ns = NULL; 5976 } 5977 parent_spec->image_id = pii.image_id; 5978 pii.image_id = NULL; 5979 parent_spec->snap_id = pii.snap_id; 5980 5981 rbd_dev->parent_spec = parent_spec; 5982 parent_spec = NULL; /* rbd_dev now owns this */ 5983 } 5984 5985 /* 5986 * We always update the parent overlap. If it's zero we issue 5987 * a warning, as we will proceed as if there was no parent. 5988 */ 5989 if (!pii.overlap) { 5990 if (parent_spec) { 5991 /* refresh, careful to warn just once */ 5992 if (rbd_dev->parent_overlap) 5993 rbd_warn(rbd_dev, 5994 "clone now standalone (overlap became 0)"); 5995 } else { 5996 /* initial probe */ 5997 rbd_warn(rbd_dev, "clone is standalone (overlap 0)"); 5998 } 5999 } 6000 rbd_dev->parent_overlap = pii.overlap; 6001 6002 out: 6003 ret = 0; 6004 out_err: 6005 kfree(pii.pool_ns); 6006 kfree(pii.image_id); 6007 rbd_spec_put(parent_spec); 6008 return ret; 6009 } 6010 6011 static int rbd_dev_v2_striping_info(struct rbd_device *rbd_dev) 6012 { 6013 struct { 6014 __le64 stripe_unit; 6015 __le64 stripe_count; 6016 } __attribute__ ((packed)) striping_info_buf = { 0 }; 6017 size_t size = sizeof (striping_info_buf); 6018 void *p; 6019 int ret; 6020 6021 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6022 &rbd_dev->header_oloc, "get_stripe_unit_count", 6023 NULL, 0, &striping_info_buf, size); 6024 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6025 if (ret < 0) 6026 return ret; 6027 if (ret < size) 6028 return -ERANGE; 6029 6030 p = &striping_info_buf; 6031 rbd_dev->header.stripe_unit = ceph_decode_64(&p); 6032 rbd_dev->header.stripe_count = ceph_decode_64(&p); 6033 return 0; 6034 } 6035 6036 static int rbd_dev_v2_data_pool(struct rbd_device *rbd_dev) 6037 { 6038 __le64 data_pool_id; 6039 int ret; 6040 6041 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6042 &rbd_dev->header_oloc, "get_data_pool", 6043 NULL, 0, &data_pool_id, sizeof(data_pool_id)); 6044 if (ret < 0) 6045 return ret; 6046 if (ret < sizeof(data_pool_id)) 6047 return -EBADMSG; 6048 6049 rbd_dev->header.data_pool_id = le64_to_cpu(data_pool_id); 6050 WARN_ON(rbd_dev->header.data_pool_id == CEPH_NOPOOL); 6051 return 0; 6052 } 6053 6054 static char *rbd_dev_image_name(struct rbd_device *rbd_dev) 6055 { 6056 CEPH_DEFINE_OID_ONSTACK(oid); 6057 size_t image_id_size; 6058 char *image_id; 6059 void *p; 6060 void *end; 6061 size_t size; 6062 void *reply_buf = NULL; 6063 size_t len = 0; 6064 char *image_name = NULL; 6065 int ret; 6066 6067 rbd_assert(!rbd_dev->spec->image_name); 6068 6069 len = strlen(rbd_dev->spec->image_id); 6070 image_id_size = sizeof (__le32) + len; 6071 image_id = kmalloc(image_id_size, GFP_KERNEL); 6072 if (!image_id) 6073 return NULL; 6074 6075 p = image_id; 6076 end = image_id + image_id_size; 6077 ceph_encode_string(&p, end, rbd_dev->spec->image_id, (u32)len); 6078 6079 size = sizeof (__le32) + RBD_IMAGE_NAME_LEN_MAX; 6080 reply_buf = kmalloc(size, GFP_KERNEL); 6081 if (!reply_buf) 6082 goto out; 6083 6084 ceph_oid_printf(&oid, "%s", RBD_DIRECTORY); 6085 ret = rbd_obj_method_sync(rbd_dev, &oid, &rbd_dev->header_oloc, 6086 "dir_get_name", image_id, image_id_size, 6087 reply_buf, size); 6088 if (ret < 0) 6089 goto out; 6090 p = reply_buf; 6091 end = reply_buf + ret; 6092 6093 image_name = ceph_extract_encoded_string(&p, end, &len, GFP_KERNEL); 6094 if (IS_ERR(image_name)) 6095 image_name = NULL; 6096 else 6097 dout("%s: name is %s len is %zd\n", __func__, image_name, len); 6098 out: 6099 kfree(reply_buf); 6100 kfree(image_id); 6101 6102 return image_name; 6103 } 6104 6105 static u64 rbd_v1_snap_id_by_name(struct rbd_device *rbd_dev, const char *name) 6106 { 6107 struct ceph_snap_context *snapc = rbd_dev->header.snapc; 6108 const char *snap_name; 6109 u32 which = 0; 6110 6111 /* Skip over names until we find the one we are looking for */ 6112 6113 snap_name = rbd_dev->header.snap_names; 6114 while (which < snapc->num_snaps) { 6115 if (!strcmp(name, snap_name)) 6116 return snapc->snaps[which]; 6117 snap_name += strlen(snap_name) + 1; 6118 which++; 6119 } 6120 return CEPH_NOSNAP; 6121 } 6122 6123 static u64 rbd_v2_snap_id_by_name(struct rbd_device *rbd_dev, const char *name) 6124 { 6125 struct ceph_snap_context *snapc = rbd_dev->header.snapc; 6126 u32 which; 6127 bool found = false; 6128 u64 snap_id; 6129 6130 for (which = 0; !found && which < snapc->num_snaps; which++) { 6131 const char *snap_name; 6132 6133 snap_id = snapc->snaps[which]; 6134 snap_name = rbd_dev_v2_snap_name(rbd_dev, snap_id); 6135 if (IS_ERR(snap_name)) { 6136 /* ignore no-longer existing snapshots */ 6137 if (PTR_ERR(snap_name) == -ENOENT) 6138 continue; 6139 else 6140 break; 6141 } 6142 found = !strcmp(name, snap_name); 6143 kfree(snap_name); 6144 } 6145 return found ? snap_id : CEPH_NOSNAP; 6146 } 6147 6148 /* 6149 * Assumes name is never RBD_SNAP_HEAD_NAME; returns CEPH_NOSNAP if 6150 * no snapshot by that name is found, or if an error occurs. 6151 */ 6152 static u64 rbd_snap_id_by_name(struct rbd_device *rbd_dev, const char *name) 6153 { 6154 if (rbd_dev->image_format == 1) 6155 return rbd_v1_snap_id_by_name(rbd_dev, name); 6156 6157 return rbd_v2_snap_id_by_name(rbd_dev, name); 6158 } 6159 6160 /* 6161 * An image being mapped will have everything but the snap id. 6162 */ 6163 static int rbd_spec_fill_snap_id(struct rbd_device *rbd_dev) 6164 { 6165 struct rbd_spec *spec = rbd_dev->spec; 6166 6167 rbd_assert(spec->pool_id != CEPH_NOPOOL && spec->pool_name); 6168 rbd_assert(spec->image_id && spec->image_name); 6169 rbd_assert(spec->snap_name); 6170 6171 if (strcmp(spec->snap_name, RBD_SNAP_HEAD_NAME)) { 6172 u64 snap_id; 6173 6174 snap_id = rbd_snap_id_by_name(rbd_dev, spec->snap_name); 6175 if (snap_id == CEPH_NOSNAP) 6176 return -ENOENT; 6177 6178 spec->snap_id = snap_id; 6179 } else { 6180 spec->snap_id = CEPH_NOSNAP; 6181 } 6182 6183 return 0; 6184 } 6185 6186 /* 6187 * A parent image will have all ids but none of the names. 6188 * 6189 * All names in an rbd spec are dynamically allocated. It's OK if we 6190 * can't figure out the name for an image id. 6191 */ 6192 static int rbd_spec_fill_names(struct rbd_device *rbd_dev) 6193 { 6194 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 6195 struct rbd_spec *spec = rbd_dev->spec; 6196 const char *pool_name; 6197 const char *image_name; 6198 const char *snap_name; 6199 int ret; 6200 6201 rbd_assert(spec->pool_id != CEPH_NOPOOL); 6202 rbd_assert(spec->image_id); 6203 rbd_assert(spec->snap_id != CEPH_NOSNAP); 6204 6205 /* Get the pool name; we have to make our own copy of this */ 6206 6207 pool_name = ceph_pg_pool_name_by_id(osdc->osdmap, spec->pool_id); 6208 if (!pool_name) { 6209 rbd_warn(rbd_dev, "no pool with id %llu", spec->pool_id); 6210 return -EIO; 6211 } 6212 pool_name = kstrdup(pool_name, GFP_KERNEL); 6213 if (!pool_name) 6214 return -ENOMEM; 6215 6216 /* Fetch the image name; tolerate failure here */ 6217 6218 image_name = rbd_dev_image_name(rbd_dev); 6219 if (!image_name) 6220 rbd_warn(rbd_dev, "unable to get image name"); 6221 6222 /* Fetch the snapshot name */ 6223 6224 snap_name = rbd_snap_name(rbd_dev, spec->snap_id); 6225 if (IS_ERR(snap_name)) { 6226 ret = PTR_ERR(snap_name); 6227 goto out_err; 6228 } 6229 6230 spec->pool_name = pool_name; 6231 spec->image_name = image_name; 6232 spec->snap_name = snap_name; 6233 6234 return 0; 6235 6236 out_err: 6237 kfree(image_name); 6238 kfree(pool_name); 6239 return ret; 6240 } 6241 6242 static int rbd_dev_v2_snap_context(struct rbd_device *rbd_dev) 6243 { 6244 size_t size; 6245 int ret; 6246 void *reply_buf; 6247 void *p; 6248 void *end; 6249 u64 seq; 6250 u32 snap_count; 6251 struct ceph_snap_context *snapc; 6252 u32 i; 6253 6254 /* 6255 * We'll need room for the seq value (maximum snapshot id), 6256 * snapshot count, and array of that many snapshot ids. 6257 * For now we have a fixed upper limit on the number we're 6258 * prepared to receive. 6259 */ 6260 size = sizeof (__le64) + sizeof (__le32) + 6261 RBD_MAX_SNAP_COUNT * sizeof (__le64); 6262 reply_buf = kzalloc(size, GFP_KERNEL); 6263 if (!reply_buf) 6264 return -ENOMEM; 6265 6266 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6267 &rbd_dev->header_oloc, "get_snapcontext", 6268 NULL, 0, reply_buf, size); 6269 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6270 if (ret < 0) 6271 goto out; 6272 6273 p = reply_buf; 6274 end = reply_buf + ret; 6275 ret = -ERANGE; 6276 ceph_decode_64_safe(&p, end, seq, out); 6277 ceph_decode_32_safe(&p, end, snap_count, out); 6278 6279 /* 6280 * Make sure the reported number of snapshot ids wouldn't go 6281 * beyond the end of our buffer. But before checking that, 6282 * make sure the computed size of the snapshot context we 6283 * allocate is representable in a size_t. 6284 */ 6285 if (snap_count > (SIZE_MAX - sizeof (struct ceph_snap_context)) 6286 / sizeof (u64)) { 6287 ret = -EINVAL; 6288 goto out; 6289 } 6290 if (!ceph_has_room(&p, end, snap_count * sizeof (__le64))) 6291 goto out; 6292 ret = 0; 6293 6294 snapc = ceph_create_snap_context(snap_count, GFP_KERNEL); 6295 if (!snapc) { 6296 ret = -ENOMEM; 6297 goto out; 6298 } 6299 snapc->seq = seq; 6300 for (i = 0; i < snap_count; i++) 6301 snapc->snaps[i] = ceph_decode_64(&p); 6302 6303 ceph_put_snap_context(rbd_dev->header.snapc); 6304 rbd_dev->header.snapc = snapc; 6305 6306 dout(" snap context seq = %llu, snap_count = %u\n", 6307 (unsigned long long)seq, (unsigned int)snap_count); 6308 out: 6309 kfree(reply_buf); 6310 6311 return ret; 6312 } 6313 6314 static const char *rbd_dev_v2_snap_name(struct rbd_device *rbd_dev, 6315 u64 snap_id) 6316 { 6317 size_t size; 6318 void *reply_buf; 6319 __le64 snapid; 6320 int ret; 6321 void *p; 6322 void *end; 6323 char *snap_name; 6324 6325 size = sizeof (__le32) + RBD_MAX_SNAP_NAME_LEN; 6326 reply_buf = kmalloc(size, GFP_KERNEL); 6327 if (!reply_buf) 6328 return ERR_PTR(-ENOMEM); 6329 6330 snapid = cpu_to_le64(snap_id); 6331 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6332 &rbd_dev->header_oloc, "get_snapshot_name", 6333 &snapid, sizeof(snapid), reply_buf, size); 6334 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6335 if (ret < 0) { 6336 snap_name = ERR_PTR(ret); 6337 goto out; 6338 } 6339 6340 p = reply_buf; 6341 end = reply_buf + ret; 6342 snap_name = ceph_extract_encoded_string(&p, end, NULL, GFP_KERNEL); 6343 if (IS_ERR(snap_name)) 6344 goto out; 6345 6346 dout(" snap_id 0x%016llx snap_name = %s\n", 6347 (unsigned long long)snap_id, snap_name); 6348 out: 6349 kfree(reply_buf); 6350 6351 return snap_name; 6352 } 6353 6354 static int rbd_dev_v2_header_info(struct rbd_device *rbd_dev) 6355 { 6356 bool first_time = rbd_dev->header.object_prefix == NULL; 6357 int ret; 6358 6359 ret = rbd_dev_v2_image_size(rbd_dev); 6360 if (ret) 6361 return ret; 6362 6363 if (first_time) { 6364 ret = rbd_dev_v2_header_onetime(rbd_dev); 6365 if (ret) 6366 return ret; 6367 } 6368 6369 ret = rbd_dev_v2_snap_context(rbd_dev); 6370 if (ret && first_time) { 6371 kfree(rbd_dev->header.object_prefix); 6372 rbd_dev->header.object_prefix = NULL; 6373 } 6374 6375 return ret; 6376 } 6377 6378 static int rbd_dev_header_info(struct rbd_device *rbd_dev) 6379 { 6380 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 6381 6382 if (rbd_dev->image_format == 1) 6383 return rbd_dev_v1_header_info(rbd_dev); 6384 6385 return rbd_dev_v2_header_info(rbd_dev); 6386 } 6387 6388 /* 6389 * Skips over white space at *buf, and updates *buf to point to the 6390 * first found non-space character (if any). Returns the length of 6391 * the token (string of non-white space characters) found. Note 6392 * that *buf must be terminated with '\0'. 6393 */ 6394 static inline size_t next_token(const char **buf) 6395 { 6396 /* 6397 * These are the characters that produce nonzero for 6398 * isspace() in the "C" and "POSIX" locales. 6399 */ 6400 const char *spaces = " \f\n\r\t\v"; 6401 6402 *buf += strspn(*buf, spaces); /* Find start of token */ 6403 6404 return strcspn(*buf, spaces); /* Return token length */ 6405 } 6406 6407 /* 6408 * Finds the next token in *buf, dynamically allocates a buffer big 6409 * enough to hold a copy of it, and copies the token into the new 6410 * buffer. The copy is guaranteed to be terminated with '\0'. Note 6411 * that a duplicate buffer is created even for a zero-length token. 6412 * 6413 * Returns a pointer to the newly-allocated duplicate, or a null 6414 * pointer if memory for the duplicate was not available. If 6415 * the lenp argument is a non-null pointer, the length of the token 6416 * (not including the '\0') is returned in *lenp. 6417 * 6418 * If successful, the *buf pointer will be updated to point beyond 6419 * the end of the found token. 6420 * 6421 * Note: uses GFP_KERNEL for allocation. 6422 */ 6423 static inline char *dup_token(const char **buf, size_t *lenp) 6424 { 6425 char *dup; 6426 size_t len; 6427 6428 len = next_token(buf); 6429 dup = kmemdup(*buf, len + 1, GFP_KERNEL); 6430 if (!dup) 6431 return NULL; 6432 *(dup + len) = '\0'; 6433 *buf += len; 6434 6435 if (lenp) 6436 *lenp = len; 6437 6438 return dup; 6439 } 6440 6441 /* 6442 * Parse the options provided for an "rbd add" (i.e., rbd image 6443 * mapping) request. These arrive via a write to /sys/bus/rbd/add, 6444 * and the data written is passed here via a NUL-terminated buffer. 6445 * Returns 0 if successful or an error code otherwise. 6446 * 6447 * The information extracted from these options is recorded in 6448 * the other parameters which return dynamically-allocated 6449 * structures: 6450 * ceph_opts 6451 * The address of a pointer that will refer to a ceph options 6452 * structure. Caller must release the returned pointer using 6453 * ceph_destroy_options() when it is no longer needed. 6454 * rbd_opts 6455 * Address of an rbd options pointer. Fully initialized by 6456 * this function; caller must release with kfree(). 6457 * spec 6458 * Address of an rbd image specification pointer. Fully 6459 * initialized by this function based on parsed options. 6460 * Caller must release with rbd_spec_put(). 6461 * 6462 * The options passed take this form: 6463 * <mon_addrs> <options> <pool_name> <image_name> [<snap_id>] 6464 * where: 6465 * <mon_addrs> 6466 * A comma-separated list of one or more monitor addresses. 6467 * A monitor address is an ip address, optionally followed 6468 * by a port number (separated by a colon). 6469 * I.e.: ip1[:port1][,ip2[:port2]...] 6470 * <options> 6471 * A comma-separated list of ceph and/or rbd options. 6472 * <pool_name> 6473 * The name of the rados pool containing the rbd image. 6474 * <image_name> 6475 * The name of the image in that pool to map. 6476 * <snap_id> 6477 * An optional snapshot id. If provided, the mapping will 6478 * present data from the image at the time that snapshot was 6479 * created. The image head is used if no snapshot id is 6480 * provided. Snapshot mappings are always read-only. 6481 */ 6482 static int rbd_add_parse_args(const char *buf, 6483 struct ceph_options **ceph_opts, 6484 struct rbd_options **opts, 6485 struct rbd_spec **rbd_spec) 6486 { 6487 size_t len; 6488 char *options; 6489 const char *mon_addrs; 6490 char *snap_name; 6491 size_t mon_addrs_size; 6492 struct parse_rbd_opts_ctx pctx = { 0 }; 6493 struct ceph_options *copts; 6494 int ret; 6495 6496 /* The first four tokens are required */ 6497 6498 len = next_token(&buf); 6499 if (!len) { 6500 rbd_warn(NULL, "no monitor address(es) provided"); 6501 return -EINVAL; 6502 } 6503 mon_addrs = buf; 6504 mon_addrs_size = len + 1; 6505 buf += len; 6506 6507 ret = -EINVAL; 6508 options = dup_token(&buf, NULL); 6509 if (!options) 6510 return -ENOMEM; 6511 if (!*options) { 6512 rbd_warn(NULL, "no options provided"); 6513 goto out_err; 6514 } 6515 6516 pctx.spec = rbd_spec_alloc(); 6517 if (!pctx.spec) 6518 goto out_mem; 6519 6520 pctx.spec->pool_name = dup_token(&buf, NULL); 6521 if (!pctx.spec->pool_name) 6522 goto out_mem; 6523 if (!*pctx.spec->pool_name) { 6524 rbd_warn(NULL, "no pool name provided"); 6525 goto out_err; 6526 } 6527 6528 pctx.spec->image_name = dup_token(&buf, NULL); 6529 if (!pctx.spec->image_name) 6530 goto out_mem; 6531 if (!*pctx.spec->image_name) { 6532 rbd_warn(NULL, "no image name provided"); 6533 goto out_err; 6534 } 6535 6536 /* 6537 * Snapshot name is optional; default is to use "-" 6538 * (indicating the head/no snapshot). 6539 */ 6540 len = next_token(&buf); 6541 if (!len) { 6542 buf = RBD_SNAP_HEAD_NAME; /* No snapshot supplied */ 6543 len = sizeof (RBD_SNAP_HEAD_NAME) - 1; 6544 } else if (len > RBD_MAX_SNAP_NAME_LEN) { 6545 ret = -ENAMETOOLONG; 6546 goto out_err; 6547 } 6548 snap_name = kmemdup(buf, len + 1, GFP_KERNEL); 6549 if (!snap_name) 6550 goto out_mem; 6551 *(snap_name + len) = '\0'; 6552 pctx.spec->snap_name = snap_name; 6553 6554 /* Initialize all rbd options to the defaults */ 6555 6556 pctx.opts = kzalloc(sizeof(*pctx.opts), GFP_KERNEL); 6557 if (!pctx.opts) 6558 goto out_mem; 6559 6560 pctx.opts->read_only = RBD_READ_ONLY_DEFAULT; 6561 pctx.opts->queue_depth = RBD_QUEUE_DEPTH_DEFAULT; 6562 pctx.opts->alloc_size = RBD_ALLOC_SIZE_DEFAULT; 6563 pctx.opts->lock_timeout = RBD_LOCK_TIMEOUT_DEFAULT; 6564 pctx.opts->lock_on_read = RBD_LOCK_ON_READ_DEFAULT; 6565 pctx.opts->exclusive = RBD_EXCLUSIVE_DEFAULT; 6566 pctx.opts->trim = RBD_TRIM_DEFAULT; 6567 6568 copts = ceph_parse_options(options, mon_addrs, 6569 mon_addrs + mon_addrs_size - 1, 6570 parse_rbd_opts_token, &pctx); 6571 if (IS_ERR(copts)) { 6572 ret = PTR_ERR(copts); 6573 goto out_err; 6574 } 6575 kfree(options); 6576 6577 *ceph_opts = copts; 6578 *opts = pctx.opts; 6579 *rbd_spec = pctx.spec; 6580 6581 return 0; 6582 out_mem: 6583 ret = -ENOMEM; 6584 out_err: 6585 kfree(pctx.opts); 6586 rbd_spec_put(pctx.spec); 6587 kfree(options); 6588 6589 return ret; 6590 } 6591 6592 static void rbd_dev_image_unlock(struct rbd_device *rbd_dev) 6593 { 6594 down_write(&rbd_dev->lock_rwsem); 6595 if (__rbd_is_lock_owner(rbd_dev)) 6596 __rbd_release_lock(rbd_dev); 6597 up_write(&rbd_dev->lock_rwsem); 6598 } 6599 6600 /* 6601 * If the wait is interrupted, an error is returned even if the lock 6602 * was successfully acquired. rbd_dev_image_unlock() will release it 6603 * if needed. 6604 */ 6605 static int rbd_add_acquire_lock(struct rbd_device *rbd_dev) 6606 { 6607 long ret; 6608 6609 if (!(rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK)) { 6610 if (!rbd_dev->opts->exclusive && !rbd_dev->opts->lock_on_read) 6611 return 0; 6612 6613 rbd_warn(rbd_dev, "exclusive-lock feature is not enabled"); 6614 return -EINVAL; 6615 } 6616 6617 if (rbd_dev->spec->snap_id != CEPH_NOSNAP) 6618 return 0; 6619 6620 rbd_assert(!rbd_is_lock_owner(rbd_dev)); 6621 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 6622 ret = wait_for_completion_killable_timeout(&rbd_dev->acquire_wait, 6623 ceph_timeout_jiffies(rbd_dev->opts->lock_timeout)); 6624 if (ret > 0) 6625 ret = rbd_dev->acquire_err; 6626 else if (!ret) 6627 ret = -ETIMEDOUT; 6628 6629 if (ret) { 6630 rbd_warn(rbd_dev, "failed to acquire exclusive lock: %ld", ret); 6631 return ret; 6632 } 6633 6634 /* 6635 * The lock may have been released by now, unless automatic lock 6636 * transitions are disabled. 6637 */ 6638 rbd_assert(!rbd_dev->opts->exclusive || rbd_is_lock_owner(rbd_dev)); 6639 return 0; 6640 } 6641 6642 /* 6643 * An rbd format 2 image has a unique identifier, distinct from the 6644 * name given to it by the user. Internally, that identifier is 6645 * what's used to specify the names of objects related to the image. 6646 * 6647 * A special "rbd id" object is used to map an rbd image name to its 6648 * id. If that object doesn't exist, then there is no v2 rbd image 6649 * with the supplied name. 6650 * 6651 * This function will record the given rbd_dev's image_id field if 6652 * it can be determined, and in that case will return 0. If any 6653 * errors occur a negative errno will be returned and the rbd_dev's 6654 * image_id field will be unchanged (and should be NULL). 6655 */ 6656 static int rbd_dev_image_id(struct rbd_device *rbd_dev) 6657 { 6658 int ret; 6659 size_t size; 6660 CEPH_DEFINE_OID_ONSTACK(oid); 6661 void *response; 6662 char *image_id; 6663 6664 /* 6665 * When probing a parent image, the image id is already 6666 * known (and the image name likely is not). There's no 6667 * need to fetch the image id again in this case. We 6668 * do still need to set the image format though. 6669 */ 6670 if (rbd_dev->spec->image_id) { 6671 rbd_dev->image_format = *rbd_dev->spec->image_id ? 2 : 1; 6672 6673 return 0; 6674 } 6675 6676 /* 6677 * First, see if the format 2 image id file exists, and if 6678 * so, get the image's persistent id from it. 6679 */ 6680 ret = ceph_oid_aprintf(&oid, GFP_KERNEL, "%s%s", RBD_ID_PREFIX, 6681 rbd_dev->spec->image_name); 6682 if (ret) 6683 return ret; 6684 6685 dout("rbd id object name is %s\n", oid.name); 6686 6687 /* Response will be an encoded string, which includes a length */ 6688 6689 size = sizeof (__le32) + RBD_IMAGE_ID_LEN_MAX; 6690 response = kzalloc(size, GFP_NOIO); 6691 if (!response) { 6692 ret = -ENOMEM; 6693 goto out; 6694 } 6695 6696 /* If it doesn't exist we'll assume it's a format 1 image */ 6697 6698 ret = rbd_obj_method_sync(rbd_dev, &oid, &rbd_dev->header_oloc, 6699 "get_id", NULL, 0, 6700 response, RBD_IMAGE_ID_LEN_MAX); 6701 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6702 if (ret == -ENOENT) { 6703 image_id = kstrdup("", GFP_KERNEL); 6704 ret = image_id ? 0 : -ENOMEM; 6705 if (!ret) 6706 rbd_dev->image_format = 1; 6707 } else if (ret >= 0) { 6708 void *p = response; 6709 6710 image_id = ceph_extract_encoded_string(&p, p + ret, 6711 NULL, GFP_NOIO); 6712 ret = PTR_ERR_OR_ZERO(image_id); 6713 if (!ret) 6714 rbd_dev->image_format = 2; 6715 } 6716 6717 if (!ret) { 6718 rbd_dev->spec->image_id = image_id; 6719 dout("image_id is %s\n", image_id); 6720 } 6721 out: 6722 kfree(response); 6723 ceph_oid_destroy(&oid); 6724 return ret; 6725 } 6726 6727 /* 6728 * Undo whatever state changes are made by v1 or v2 header info 6729 * call. 6730 */ 6731 static void rbd_dev_unprobe(struct rbd_device *rbd_dev) 6732 { 6733 struct rbd_image_header *header; 6734 6735 rbd_dev_parent_put(rbd_dev); 6736 rbd_object_map_free(rbd_dev); 6737 rbd_dev_mapping_clear(rbd_dev); 6738 6739 /* Free dynamic fields from the header, then zero it out */ 6740 6741 header = &rbd_dev->header; 6742 ceph_put_snap_context(header->snapc); 6743 kfree(header->snap_sizes); 6744 kfree(header->snap_names); 6745 kfree(header->object_prefix); 6746 memset(header, 0, sizeof (*header)); 6747 } 6748 6749 static int rbd_dev_v2_header_onetime(struct rbd_device *rbd_dev) 6750 { 6751 int ret; 6752 6753 ret = rbd_dev_v2_object_prefix(rbd_dev); 6754 if (ret) 6755 goto out_err; 6756 6757 /* 6758 * Get the and check features for the image. Currently the 6759 * features are assumed to never change. 6760 */ 6761 ret = rbd_dev_v2_features(rbd_dev); 6762 if (ret) 6763 goto out_err; 6764 6765 /* If the image supports fancy striping, get its parameters */ 6766 6767 if (rbd_dev->header.features & RBD_FEATURE_STRIPINGV2) { 6768 ret = rbd_dev_v2_striping_info(rbd_dev); 6769 if (ret < 0) 6770 goto out_err; 6771 } 6772 6773 if (rbd_dev->header.features & RBD_FEATURE_DATA_POOL) { 6774 ret = rbd_dev_v2_data_pool(rbd_dev); 6775 if (ret) 6776 goto out_err; 6777 } 6778 6779 rbd_init_layout(rbd_dev); 6780 return 0; 6781 6782 out_err: 6783 rbd_dev->header.features = 0; 6784 kfree(rbd_dev->header.object_prefix); 6785 rbd_dev->header.object_prefix = NULL; 6786 return ret; 6787 } 6788 6789 /* 6790 * @depth is rbd_dev_image_probe() -> rbd_dev_probe_parent() -> 6791 * rbd_dev_image_probe() recursion depth, which means it's also the 6792 * length of the already discovered part of the parent chain. 6793 */ 6794 static int rbd_dev_probe_parent(struct rbd_device *rbd_dev, int depth) 6795 { 6796 struct rbd_device *parent = NULL; 6797 int ret; 6798 6799 if (!rbd_dev->parent_spec) 6800 return 0; 6801 6802 if (++depth > RBD_MAX_PARENT_CHAIN_LEN) { 6803 pr_info("parent chain is too long (%d)\n", depth); 6804 ret = -EINVAL; 6805 goto out_err; 6806 } 6807 6808 parent = __rbd_dev_create(rbd_dev->rbd_client, rbd_dev->parent_spec); 6809 if (!parent) { 6810 ret = -ENOMEM; 6811 goto out_err; 6812 } 6813 6814 /* 6815 * Images related by parent/child relationships always share 6816 * rbd_client and spec/parent_spec, so bump their refcounts. 6817 */ 6818 __rbd_get_client(rbd_dev->rbd_client); 6819 rbd_spec_get(rbd_dev->parent_spec); 6820 6821 ret = rbd_dev_image_probe(parent, depth); 6822 if (ret < 0) 6823 goto out_err; 6824 6825 rbd_dev->parent = parent; 6826 atomic_set(&rbd_dev->parent_ref, 1); 6827 return 0; 6828 6829 out_err: 6830 rbd_dev_unparent(rbd_dev); 6831 rbd_dev_destroy(parent); 6832 return ret; 6833 } 6834 6835 static void rbd_dev_device_release(struct rbd_device *rbd_dev) 6836 { 6837 clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); 6838 rbd_free_disk(rbd_dev); 6839 if (!single_major) 6840 unregister_blkdev(rbd_dev->major, rbd_dev->name); 6841 } 6842 6843 /* 6844 * rbd_dev->header_rwsem must be locked for write and will be unlocked 6845 * upon return. 6846 */ 6847 static int rbd_dev_device_setup(struct rbd_device *rbd_dev) 6848 { 6849 int ret; 6850 6851 /* Record our major and minor device numbers. */ 6852 6853 if (!single_major) { 6854 ret = register_blkdev(0, rbd_dev->name); 6855 if (ret < 0) 6856 goto err_out_unlock; 6857 6858 rbd_dev->major = ret; 6859 rbd_dev->minor = 0; 6860 } else { 6861 rbd_dev->major = rbd_major; 6862 rbd_dev->minor = rbd_dev_id_to_minor(rbd_dev->dev_id); 6863 } 6864 6865 /* Set up the blkdev mapping. */ 6866 6867 ret = rbd_init_disk(rbd_dev); 6868 if (ret) 6869 goto err_out_blkdev; 6870 6871 set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE); 6872 set_disk_ro(rbd_dev->disk, rbd_dev->opts->read_only); 6873 6874 ret = dev_set_name(&rbd_dev->dev, "%d", rbd_dev->dev_id); 6875 if (ret) 6876 goto err_out_disk; 6877 6878 set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); 6879 up_write(&rbd_dev->header_rwsem); 6880 return 0; 6881 6882 err_out_disk: 6883 rbd_free_disk(rbd_dev); 6884 err_out_blkdev: 6885 if (!single_major) 6886 unregister_blkdev(rbd_dev->major, rbd_dev->name); 6887 err_out_unlock: 6888 up_write(&rbd_dev->header_rwsem); 6889 return ret; 6890 } 6891 6892 static int rbd_dev_header_name(struct rbd_device *rbd_dev) 6893 { 6894 struct rbd_spec *spec = rbd_dev->spec; 6895 int ret; 6896 6897 /* Record the header object name for this rbd image. */ 6898 6899 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 6900 if (rbd_dev->image_format == 1) 6901 ret = ceph_oid_aprintf(&rbd_dev->header_oid, GFP_KERNEL, "%s%s", 6902 spec->image_name, RBD_SUFFIX); 6903 else 6904 ret = ceph_oid_aprintf(&rbd_dev->header_oid, GFP_KERNEL, "%s%s", 6905 RBD_HEADER_PREFIX, spec->image_id); 6906 6907 return ret; 6908 } 6909 6910 static void rbd_dev_image_release(struct rbd_device *rbd_dev) 6911 { 6912 rbd_dev_unprobe(rbd_dev); 6913 if (rbd_dev->opts) 6914 rbd_unregister_watch(rbd_dev); 6915 rbd_dev->image_format = 0; 6916 kfree(rbd_dev->spec->image_id); 6917 rbd_dev->spec->image_id = NULL; 6918 } 6919 6920 /* 6921 * Probe for the existence of the header object for the given rbd 6922 * device. If this image is the one being mapped (i.e., not a 6923 * parent), initiate a watch on its header object before using that 6924 * object to get detailed information about the rbd image. 6925 */ 6926 static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth) 6927 { 6928 int ret; 6929 6930 /* 6931 * Get the id from the image id object. Unless there's an 6932 * error, rbd_dev->spec->image_id will be filled in with 6933 * a dynamically-allocated string, and rbd_dev->image_format 6934 * will be set to either 1 or 2. 6935 */ 6936 ret = rbd_dev_image_id(rbd_dev); 6937 if (ret) 6938 return ret; 6939 6940 ret = rbd_dev_header_name(rbd_dev); 6941 if (ret) 6942 goto err_out_format; 6943 6944 if (!depth) { 6945 ret = rbd_register_watch(rbd_dev); 6946 if (ret) { 6947 if (ret == -ENOENT) 6948 pr_info("image %s/%s%s%s does not exist\n", 6949 rbd_dev->spec->pool_name, 6950 rbd_dev->spec->pool_ns ?: "", 6951 rbd_dev->spec->pool_ns ? "/" : "", 6952 rbd_dev->spec->image_name); 6953 goto err_out_format; 6954 } 6955 } 6956 6957 ret = rbd_dev_header_info(rbd_dev); 6958 if (ret) 6959 goto err_out_watch; 6960 6961 /* 6962 * If this image is the one being mapped, we have pool name and 6963 * id, image name and id, and snap name - need to fill snap id. 6964 * Otherwise this is a parent image, identified by pool, image 6965 * and snap ids - need to fill in names for those ids. 6966 */ 6967 if (!depth) 6968 ret = rbd_spec_fill_snap_id(rbd_dev); 6969 else 6970 ret = rbd_spec_fill_names(rbd_dev); 6971 if (ret) { 6972 if (ret == -ENOENT) 6973 pr_info("snap %s/%s%s%s@%s does not exist\n", 6974 rbd_dev->spec->pool_name, 6975 rbd_dev->spec->pool_ns ?: "", 6976 rbd_dev->spec->pool_ns ? "/" : "", 6977 rbd_dev->spec->image_name, 6978 rbd_dev->spec->snap_name); 6979 goto err_out_probe; 6980 } 6981 6982 ret = rbd_dev_mapping_set(rbd_dev); 6983 if (ret) 6984 goto err_out_probe; 6985 6986 if (rbd_dev->spec->snap_id != CEPH_NOSNAP && 6987 (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) { 6988 ret = rbd_object_map_load(rbd_dev); 6989 if (ret) 6990 goto err_out_probe; 6991 } 6992 6993 if (rbd_dev->header.features & RBD_FEATURE_LAYERING) { 6994 ret = rbd_dev_v2_parent_info(rbd_dev); 6995 if (ret) 6996 goto err_out_probe; 6997 } 6998 6999 ret = rbd_dev_probe_parent(rbd_dev, depth); 7000 if (ret) 7001 goto err_out_probe; 7002 7003 dout("discovered format %u image, header name is %s\n", 7004 rbd_dev->image_format, rbd_dev->header_oid.name); 7005 return 0; 7006 7007 err_out_probe: 7008 rbd_dev_unprobe(rbd_dev); 7009 err_out_watch: 7010 if (!depth) 7011 rbd_unregister_watch(rbd_dev); 7012 err_out_format: 7013 rbd_dev->image_format = 0; 7014 kfree(rbd_dev->spec->image_id); 7015 rbd_dev->spec->image_id = NULL; 7016 return ret; 7017 } 7018 7019 static ssize_t do_rbd_add(struct bus_type *bus, 7020 const char *buf, 7021 size_t count) 7022 { 7023 struct rbd_device *rbd_dev = NULL; 7024 struct ceph_options *ceph_opts = NULL; 7025 struct rbd_options *rbd_opts = NULL; 7026 struct rbd_spec *spec = NULL; 7027 struct rbd_client *rbdc; 7028 int rc; 7029 7030 if (!try_module_get(THIS_MODULE)) 7031 return -ENODEV; 7032 7033 /* parse add command */ 7034 rc = rbd_add_parse_args(buf, &ceph_opts, &rbd_opts, &spec); 7035 if (rc < 0) 7036 goto out; 7037 7038 rbdc = rbd_get_client(ceph_opts); 7039 if (IS_ERR(rbdc)) { 7040 rc = PTR_ERR(rbdc); 7041 goto err_out_args; 7042 } 7043 7044 /* pick the pool */ 7045 rc = ceph_pg_poolid_by_name(rbdc->client->osdc.osdmap, spec->pool_name); 7046 if (rc < 0) { 7047 if (rc == -ENOENT) 7048 pr_info("pool %s does not exist\n", spec->pool_name); 7049 goto err_out_client; 7050 } 7051 spec->pool_id = (u64)rc; 7052 7053 rbd_dev = rbd_dev_create(rbdc, spec, rbd_opts); 7054 if (!rbd_dev) { 7055 rc = -ENOMEM; 7056 goto err_out_client; 7057 } 7058 rbdc = NULL; /* rbd_dev now owns this */ 7059 spec = NULL; /* rbd_dev now owns this */ 7060 rbd_opts = NULL; /* rbd_dev now owns this */ 7061 7062 rbd_dev->config_info = kstrdup(buf, GFP_KERNEL); 7063 if (!rbd_dev->config_info) { 7064 rc = -ENOMEM; 7065 goto err_out_rbd_dev; 7066 } 7067 7068 down_write(&rbd_dev->header_rwsem); 7069 rc = rbd_dev_image_probe(rbd_dev, 0); 7070 if (rc < 0) { 7071 up_write(&rbd_dev->header_rwsem); 7072 goto err_out_rbd_dev; 7073 } 7074 7075 /* If we are mapping a snapshot it must be marked read-only */ 7076 if (rbd_dev->spec->snap_id != CEPH_NOSNAP) 7077 rbd_dev->opts->read_only = true; 7078 7079 if (rbd_dev->opts->alloc_size > rbd_dev->layout.object_size) { 7080 rbd_warn(rbd_dev, "alloc_size adjusted to %u", 7081 rbd_dev->layout.object_size); 7082 rbd_dev->opts->alloc_size = rbd_dev->layout.object_size; 7083 } 7084 7085 rc = rbd_dev_device_setup(rbd_dev); 7086 if (rc) 7087 goto err_out_image_probe; 7088 7089 rc = rbd_add_acquire_lock(rbd_dev); 7090 if (rc) 7091 goto err_out_image_lock; 7092 7093 /* Everything's ready. Announce the disk to the world. */ 7094 7095 rc = device_add(&rbd_dev->dev); 7096 if (rc) 7097 goto err_out_image_lock; 7098 7099 add_disk(rbd_dev->disk); 7100 /* see rbd_init_disk() */ 7101 blk_put_queue(rbd_dev->disk->queue); 7102 7103 spin_lock(&rbd_dev_list_lock); 7104 list_add_tail(&rbd_dev->node, &rbd_dev_list); 7105 spin_unlock(&rbd_dev_list_lock); 7106 7107 pr_info("%s: capacity %llu features 0x%llx\n", rbd_dev->disk->disk_name, 7108 (unsigned long long)get_capacity(rbd_dev->disk) << SECTOR_SHIFT, 7109 rbd_dev->header.features); 7110 rc = count; 7111 out: 7112 module_put(THIS_MODULE); 7113 return rc; 7114 7115 err_out_image_lock: 7116 rbd_dev_image_unlock(rbd_dev); 7117 rbd_dev_device_release(rbd_dev); 7118 err_out_image_probe: 7119 rbd_dev_image_release(rbd_dev); 7120 err_out_rbd_dev: 7121 rbd_dev_destroy(rbd_dev); 7122 err_out_client: 7123 rbd_put_client(rbdc); 7124 err_out_args: 7125 rbd_spec_put(spec); 7126 kfree(rbd_opts); 7127 goto out; 7128 } 7129 7130 static ssize_t add_store(struct bus_type *bus, const char *buf, size_t count) 7131 { 7132 if (single_major) 7133 return -EINVAL; 7134 7135 return do_rbd_add(bus, buf, count); 7136 } 7137 7138 static ssize_t add_single_major_store(struct bus_type *bus, const char *buf, 7139 size_t count) 7140 { 7141 return do_rbd_add(bus, buf, count); 7142 } 7143 7144 static void rbd_dev_remove_parent(struct rbd_device *rbd_dev) 7145 { 7146 while (rbd_dev->parent) { 7147 struct rbd_device *first = rbd_dev; 7148 struct rbd_device *second = first->parent; 7149 struct rbd_device *third; 7150 7151 /* 7152 * Follow to the parent with no grandparent and 7153 * remove it. 7154 */ 7155 while (second && (third = second->parent)) { 7156 first = second; 7157 second = third; 7158 } 7159 rbd_assert(second); 7160 rbd_dev_image_release(second); 7161 rbd_dev_destroy(second); 7162 first->parent = NULL; 7163 first->parent_overlap = 0; 7164 7165 rbd_assert(first->parent_spec); 7166 rbd_spec_put(first->parent_spec); 7167 first->parent_spec = NULL; 7168 } 7169 } 7170 7171 static ssize_t do_rbd_remove(struct bus_type *bus, 7172 const char *buf, 7173 size_t count) 7174 { 7175 struct rbd_device *rbd_dev = NULL; 7176 struct list_head *tmp; 7177 int dev_id; 7178 char opt_buf[6]; 7179 bool force = false; 7180 int ret; 7181 7182 dev_id = -1; 7183 opt_buf[0] = '\0'; 7184 sscanf(buf, "%d %5s", &dev_id, opt_buf); 7185 if (dev_id < 0) { 7186 pr_err("dev_id out of range\n"); 7187 return -EINVAL; 7188 } 7189 if (opt_buf[0] != '\0') { 7190 if (!strcmp(opt_buf, "force")) { 7191 force = true; 7192 } else { 7193 pr_err("bad remove option at '%s'\n", opt_buf); 7194 return -EINVAL; 7195 } 7196 } 7197 7198 ret = -ENOENT; 7199 spin_lock(&rbd_dev_list_lock); 7200 list_for_each(tmp, &rbd_dev_list) { 7201 rbd_dev = list_entry(tmp, struct rbd_device, node); 7202 if (rbd_dev->dev_id == dev_id) { 7203 ret = 0; 7204 break; 7205 } 7206 } 7207 if (!ret) { 7208 spin_lock_irq(&rbd_dev->lock); 7209 if (rbd_dev->open_count && !force) 7210 ret = -EBUSY; 7211 else if (test_and_set_bit(RBD_DEV_FLAG_REMOVING, 7212 &rbd_dev->flags)) 7213 ret = -EINPROGRESS; 7214 spin_unlock_irq(&rbd_dev->lock); 7215 } 7216 spin_unlock(&rbd_dev_list_lock); 7217 if (ret) 7218 return ret; 7219 7220 if (force) { 7221 /* 7222 * Prevent new IO from being queued and wait for existing 7223 * IO to complete/fail. 7224 */ 7225 blk_mq_freeze_queue(rbd_dev->disk->queue); 7226 blk_set_queue_dying(rbd_dev->disk->queue); 7227 } 7228 7229 del_gendisk(rbd_dev->disk); 7230 spin_lock(&rbd_dev_list_lock); 7231 list_del_init(&rbd_dev->node); 7232 spin_unlock(&rbd_dev_list_lock); 7233 device_del(&rbd_dev->dev); 7234 7235 rbd_dev_image_unlock(rbd_dev); 7236 rbd_dev_device_release(rbd_dev); 7237 rbd_dev_image_release(rbd_dev); 7238 rbd_dev_destroy(rbd_dev); 7239 return count; 7240 } 7241 7242 static ssize_t remove_store(struct bus_type *bus, const char *buf, size_t count) 7243 { 7244 if (single_major) 7245 return -EINVAL; 7246 7247 return do_rbd_remove(bus, buf, count); 7248 } 7249 7250 static ssize_t remove_single_major_store(struct bus_type *bus, const char *buf, 7251 size_t count) 7252 { 7253 return do_rbd_remove(bus, buf, count); 7254 } 7255 7256 /* 7257 * create control files in sysfs 7258 * /sys/bus/rbd/... 7259 */ 7260 static int __init rbd_sysfs_init(void) 7261 { 7262 int ret; 7263 7264 ret = device_register(&rbd_root_dev); 7265 if (ret < 0) 7266 return ret; 7267 7268 ret = bus_register(&rbd_bus_type); 7269 if (ret < 0) 7270 device_unregister(&rbd_root_dev); 7271 7272 return ret; 7273 } 7274 7275 static void __exit rbd_sysfs_cleanup(void) 7276 { 7277 bus_unregister(&rbd_bus_type); 7278 device_unregister(&rbd_root_dev); 7279 } 7280 7281 static int __init rbd_slab_init(void) 7282 { 7283 rbd_assert(!rbd_img_request_cache); 7284 rbd_img_request_cache = KMEM_CACHE(rbd_img_request, 0); 7285 if (!rbd_img_request_cache) 7286 return -ENOMEM; 7287 7288 rbd_assert(!rbd_obj_request_cache); 7289 rbd_obj_request_cache = KMEM_CACHE(rbd_obj_request, 0); 7290 if (!rbd_obj_request_cache) 7291 goto out_err; 7292 7293 return 0; 7294 7295 out_err: 7296 kmem_cache_destroy(rbd_img_request_cache); 7297 rbd_img_request_cache = NULL; 7298 return -ENOMEM; 7299 } 7300 7301 static void rbd_slab_exit(void) 7302 { 7303 rbd_assert(rbd_obj_request_cache); 7304 kmem_cache_destroy(rbd_obj_request_cache); 7305 rbd_obj_request_cache = NULL; 7306 7307 rbd_assert(rbd_img_request_cache); 7308 kmem_cache_destroy(rbd_img_request_cache); 7309 rbd_img_request_cache = NULL; 7310 } 7311 7312 static int __init rbd_init(void) 7313 { 7314 int rc; 7315 7316 if (!libceph_compatible(NULL)) { 7317 rbd_warn(NULL, "libceph incompatibility (quitting)"); 7318 return -EINVAL; 7319 } 7320 7321 rc = rbd_slab_init(); 7322 if (rc) 7323 return rc; 7324 7325 /* 7326 * The number of active work items is limited by the number of 7327 * rbd devices * queue depth, so leave @max_active at default. 7328 */ 7329 rbd_wq = alloc_workqueue(RBD_DRV_NAME, WQ_MEM_RECLAIM, 0); 7330 if (!rbd_wq) { 7331 rc = -ENOMEM; 7332 goto err_out_slab; 7333 } 7334 7335 if (single_major) { 7336 rbd_major = register_blkdev(0, RBD_DRV_NAME); 7337 if (rbd_major < 0) { 7338 rc = rbd_major; 7339 goto err_out_wq; 7340 } 7341 } 7342 7343 rc = rbd_sysfs_init(); 7344 if (rc) 7345 goto err_out_blkdev; 7346 7347 if (single_major) 7348 pr_info("loaded (major %d)\n", rbd_major); 7349 else 7350 pr_info("loaded\n"); 7351 7352 return 0; 7353 7354 err_out_blkdev: 7355 if (single_major) 7356 unregister_blkdev(rbd_major, RBD_DRV_NAME); 7357 err_out_wq: 7358 destroy_workqueue(rbd_wq); 7359 err_out_slab: 7360 rbd_slab_exit(); 7361 return rc; 7362 } 7363 7364 static void __exit rbd_exit(void) 7365 { 7366 ida_destroy(&rbd_dev_id_ida); 7367 rbd_sysfs_cleanup(); 7368 if (single_major) 7369 unregister_blkdev(rbd_major, RBD_DRV_NAME); 7370 destroy_workqueue(rbd_wq); 7371 rbd_slab_exit(); 7372 } 7373 7374 module_init(rbd_init); 7375 module_exit(rbd_exit); 7376 7377 MODULE_AUTHOR("Alex Elder <elder@inktank.com>"); 7378 MODULE_AUTHOR("Sage Weil <sage@newdream.net>"); 7379 MODULE_AUTHOR("Yehuda Sadeh <yehuda@hq.newdream.net>"); 7380 /* following authorship retained from original osdblk.c */ 7381 MODULE_AUTHOR("Jeff Garzik <jeff@garzik.org>"); 7382 7383 MODULE_DESCRIPTION("RADOS Block Device (RBD) driver"); 7384 MODULE_LICENSE("GPL"); 7385