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 return img_request; 1758 } 1759 1760 static void rbd_img_request_destroy(struct kref *kref) 1761 { 1762 struct rbd_img_request *img_request; 1763 struct rbd_obj_request *obj_request; 1764 struct rbd_obj_request *next_obj_request; 1765 1766 img_request = container_of(kref, struct rbd_img_request, kref); 1767 1768 dout("%s: img %p\n", __func__, img_request); 1769 1770 WARN_ON(!list_empty(&img_request->lock_item)); 1771 for_each_obj_request_safe(img_request, obj_request, next_obj_request) 1772 rbd_img_obj_request_del(img_request, obj_request); 1773 1774 if (img_request_layered_test(img_request)) { 1775 img_request_layered_clear(img_request); 1776 rbd_dev_parent_put(img_request->rbd_dev); 1777 } 1778 1779 if (rbd_img_is_write(img_request)) 1780 ceph_put_snap_context(img_request->snapc); 1781 1782 kmem_cache_free(rbd_img_request_cache, img_request); 1783 } 1784 1785 #define BITS_PER_OBJ 2 1786 #define OBJS_PER_BYTE (BITS_PER_BYTE / BITS_PER_OBJ) 1787 #define OBJ_MASK ((1 << BITS_PER_OBJ) - 1) 1788 1789 static void __rbd_object_map_index(struct rbd_device *rbd_dev, u64 objno, 1790 u64 *index, u8 *shift) 1791 { 1792 u32 off; 1793 1794 rbd_assert(objno < rbd_dev->object_map_size); 1795 *index = div_u64_rem(objno, OBJS_PER_BYTE, &off); 1796 *shift = (OBJS_PER_BYTE - off - 1) * BITS_PER_OBJ; 1797 } 1798 1799 static u8 __rbd_object_map_get(struct rbd_device *rbd_dev, u64 objno) 1800 { 1801 u64 index; 1802 u8 shift; 1803 1804 lockdep_assert_held(&rbd_dev->object_map_lock); 1805 __rbd_object_map_index(rbd_dev, objno, &index, &shift); 1806 return (rbd_dev->object_map[index] >> shift) & OBJ_MASK; 1807 } 1808 1809 static void __rbd_object_map_set(struct rbd_device *rbd_dev, u64 objno, u8 val) 1810 { 1811 u64 index; 1812 u8 shift; 1813 u8 *p; 1814 1815 lockdep_assert_held(&rbd_dev->object_map_lock); 1816 rbd_assert(!(val & ~OBJ_MASK)); 1817 1818 __rbd_object_map_index(rbd_dev, objno, &index, &shift); 1819 p = &rbd_dev->object_map[index]; 1820 *p = (*p & ~(OBJ_MASK << shift)) | (val << shift); 1821 } 1822 1823 static u8 rbd_object_map_get(struct rbd_device *rbd_dev, u64 objno) 1824 { 1825 u8 state; 1826 1827 spin_lock(&rbd_dev->object_map_lock); 1828 state = __rbd_object_map_get(rbd_dev, objno); 1829 spin_unlock(&rbd_dev->object_map_lock); 1830 return state; 1831 } 1832 1833 static bool use_object_map(struct rbd_device *rbd_dev) 1834 { 1835 return ((rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) && 1836 !(rbd_dev->object_map_flags & RBD_FLAG_OBJECT_MAP_INVALID)); 1837 } 1838 1839 static bool rbd_object_map_may_exist(struct rbd_device *rbd_dev, u64 objno) 1840 { 1841 u8 state; 1842 1843 /* fall back to default logic if object map is disabled or invalid */ 1844 if (!use_object_map(rbd_dev)) 1845 return true; 1846 1847 state = rbd_object_map_get(rbd_dev, objno); 1848 return state != OBJECT_NONEXISTENT; 1849 } 1850 1851 static void rbd_object_map_name(struct rbd_device *rbd_dev, u64 snap_id, 1852 struct ceph_object_id *oid) 1853 { 1854 if (snap_id == CEPH_NOSNAP) 1855 ceph_oid_printf(oid, "%s%s", RBD_OBJECT_MAP_PREFIX, 1856 rbd_dev->spec->image_id); 1857 else 1858 ceph_oid_printf(oid, "%s%s.%016llx", RBD_OBJECT_MAP_PREFIX, 1859 rbd_dev->spec->image_id, snap_id); 1860 } 1861 1862 static int rbd_object_map_lock(struct rbd_device *rbd_dev) 1863 { 1864 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 1865 CEPH_DEFINE_OID_ONSTACK(oid); 1866 u8 lock_type; 1867 char *lock_tag; 1868 struct ceph_locker *lockers; 1869 u32 num_lockers; 1870 bool broke_lock = false; 1871 int ret; 1872 1873 rbd_object_map_name(rbd_dev, CEPH_NOSNAP, &oid); 1874 1875 again: 1876 ret = ceph_cls_lock(osdc, &oid, &rbd_dev->header_oloc, RBD_LOCK_NAME, 1877 CEPH_CLS_LOCK_EXCLUSIVE, "", "", "", 0); 1878 if (ret != -EBUSY || broke_lock) { 1879 if (ret == -EEXIST) 1880 ret = 0; /* already locked by myself */ 1881 if (ret) 1882 rbd_warn(rbd_dev, "failed to lock object map: %d", ret); 1883 return ret; 1884 } 1885 1886 ret = ceph_cls_lock_info(osdc, &oid, &rbd_dev->header_oloc, 1887 RBD_LOCK_NAME, &lock_type, &lock_tag, 1888 &lockers, &num_lockers); 1889 if (ret) { 1890 if (ret == -ENOENT) 1891 goto again; 1892 1893 rbd_warn(rbd_dev, "failed to get object map lockers: %d", ret); 1894 return ret; 1895 } 1896 1897 kfree(lock_tag); 1898 if (num_lockers == 0) 1899 goto again; 1900 1901 rbd_warn(rbd_dev, "breaking object map lock owned by %s%llu", 1902 ENTITY_NAME(lockers[0].id.name)); 1903 1904 ret = ceph_cls_break_lock(osdc, &oid, &rbd_dev->header_oloc, 1905 RBD_LOCK_NAME, lockers[0].id.cookie, 1906 &lockers[0].id.name); 1907 ceph_free_lockers(lockers, num_lockers); 1908 if (ret) { 1909 if (ret == -ENOENT) 1910 goto again; 1911 1912 rbd_warn(rbd_dev, "failed to break object map lock: %d", ret); 1913 return ret; 1914 } 1915 1916 broke_lock = true; 1917 goto again; 1918 } 1919 1920 static void rbd_object_map_unlock(struct rbd_device *rbd_dev) 1921 { 1922 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 1923 CEPH_DEFINE_OID_ONSTACK(oid); 1924 int ret; 1925 1926 rbd_object_map_name(rbd_dev, CEPH_NOSNAP, &oid); 1927 1928 ret = ceph_cls_unlock(osdc, &oid, &rbd_dev->header_oloc, RBD_LOCK_NAME, 1929 ""); 1930 if (ret && ret != -ENOENT) 1931 rbd_warn(rbd_dev, "failed to unlock object map: %d", ret); 1932 } 1933 1934 static int decode_object_map_header(void **p, void *end, u64 *object_map_size) 1935 { 1936 u8 struct_v; 1937 u32 struct_len; 1938 u32 header_len; 1939 void *header_end; 1940 int ret; 1941 1942 ceph_decode_32_safe(p, end, header_len, e_inval); 1943 header_end = *p + header_len; 1944 1945 ret = ceph_start_decoding(p, end, 1, "BitVector header", &struct_v, 1946 &struct_len); 1947 if (ret) 1948 return ret; 1949 1950 ceph_decode_64_safe(p, end, *object_map_size, e_inval); 1951 1952 *p = header_end; 1953 return 0; 1954 1955 e_inval: 1956 return -EINVAL; 1957 } 1958 1959 static int __rbd_object_map_load(struct rbd_device *rbd_dev) 1960 { 1961 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 1962 CEPH_DEFINE_OID_ONSTACK(oid); 1963 struct page **pages; 1964 void *p, *end; 1965 size_t reply_len; 1966 u64 num_objects; 1967 u64 object_map_bytes; 1968 u64 object_map_size; 1969 int num_pages; 1970 int ret; 1971 1972 rbd_assert(!rbd_dev->object_map && !rbd_dev->object_map_size); 1973 1974 num_objects = ceph_get_num_objects(&rbd_dev->layout, 1975 rbd_dev->mapping.size); 1976 object_map_bytes = DIV_ROUND_UP_ULL(num_objects * BITS_PER_OBJ, 1977 BITS_PER_BYTE); 1978 num_pages = calc_pages_for(0, object_map_bytes) + 1; 1979 pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL); 1980 if (IS_ERR(pages)) 1981 return PTR_ERR(pages); 1982 1983 reply_len = num_pages * PAGE_SIZE; 1984 rbd_object_map_name(rbd_dev, rbd_dev->spec->snap_id, &oid); 1985 ret = ceph_osdc_call(osdc, &oid, &rbd_dev->header_oloc, 1986 "rbd", "object_map_load", CEPH_OSD_FLAG_READ, 1987 NULL, 0, pages, &reply_len); 1988 if (ret) 1989 goto out; 1990 1991 p = page_address(pages[0]); 1992 end = p + min(reply_len, (size_t)PAGE_SIZE); 1993 ret = decode_object_map_header(&p, end, &object_map_size); 1994 if (ret) 1995 goto out; 1996 1997 if (object_map_size != num_objects) { 1998 rbd_warn(rbd_dev, "object map size mismatch: %llu vs %llu", 1999 object_map_size, num_objects); 2000 ret = -EINVAL; 2001 goto out; 2002 } 2003 2004 if (offset_in_page(p) + object_map_bytes > reply_len) { 2005 ret = -EINVAL; 2006 goto out; 2007 } 2008 2009 rbd_dev->object_map = kvmalloc(object_map_bytes, GFP_KERNEL); 2010 if (!rbd_dev->object_map) { 2011 ret = -ENOMEM; 2012 goto out; 2013 } 2014 2015 rbd_dev->object_map_size = object_map_size; 2016 ceph_copy_from_page_vector(pages, rbd_dev->object_map, 2017 offset_in_page(p), object_map_bytes); 2018 2019 out: 2020 ceph_release_page_vector(pages, num_pages); 2021 return ret; 2022 } 2023 2024 static void rbd_object_map_free(struct rbd_device *rbd_dev) 2025 { 2026 kvfree(rbd_dev->object_map); 2027 rbd_dev->object_map = NULL; 2028 rbd_dev->object_map_size = 0; 2029 } 2030 2031 static int rbd_object_map_load(struct rbd_device *rbd_dev) 2032 { 2033 int ret; 2034 2035 ret = __rbd_object_map_load(rbd_dev); 2036 if (ret) 2037 return ret; 2038 2039 ret = rbd_dev_v2_get_flags(rbd_dev); 2040 if (ret) { 2041 rbd_object_map_free(rbd_dev); 2042 return ret; 2043 } 2044 2045 if (rbd_dev->object_map_flags & RBD_FLAG_OBJECT_MAP_INVALID) 2046 rbd_warn(rbd_dev, "object map is invalid"); 2047 2048 return 0; 2049 } 2050 2051 static int rbd_object_map_open(struct rbd_device *rbd_dev) 2052 { 2053 int ret; 2054 2055 ret = rbd_object_map_lock(rbd_dev); 2056 if (ret) 2057 return ret; 2058 2059 ret = rbd_object_map_load(rbd_dev); 2060 if (ret) { 2061 rbd_object_map_unlock(rbd_dev); 2062 return ret; 2063 } 2064 2065 return 0; 2066 } 2067 2068 static void rbd_object_map_close(struct rbd_device *rbd_dev) 2069 { 2070 rbd_object_map_free(rbd_dev); 2071 rbd_object_map_unlock(rbd_dev); 2072 } 2073 2074 /* 2075 * This function needs snap_id (or more precisely just something to 2076 * distinguish between HEAD and snapshot object maps), new_state and 2077 * current_state that were passed to rbd_object_map_update(). 2078 * 2079 * To avoid allocating and stashing a context we piggyback on the OSD 2080 * request. A HEAD update has two ops (assert_locked). For new_state 2081 * and current_state we decode our own object_map_update op, encoded in 2082 * rbd_cls_object_map_update(). 2083 */ 2084 static int rbd_object_map_update_finish(struct rbd_obj_request *obj_req, 2085 struct ceph_osd_request *osd_req) 2086 { 2087 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2088 struct ceph_osd_data *osd_data; 2089 u64 objno; 2090 u8 state, new_state, current_state; 2091 bool has_current_state; 2092 void *p; 2093 2094 if (osd_req->r_result) 2095 return osd_req->r_result; 2096 2097 /* 2098 * Nothing to do for a snapshot object map. 2099 */ 2100 if (osd_req->r_num_ops == 1) 2101 return 0; 2102 2103 /* 2104 * Update in-memory HEAD object map. 2105 */ 2106 rbd_assert(osd_req->r_num_ops == 2); 2107 osd_data = osd_req_op_data(osd_req, 1, cls, request_data); 2108 rbd_assert(osd_data->type == CEPH_OSD_DATA_TYPE_PAGES); 2109 2110 p = page_address(osd_data->pages[0]); 2111 objno = ceph_decode_64(&p); 2112 rbd_assert(objno == obj_req->ex.oe_objno); 2113 rbd_assert(ceph_decode_64(&p) == objno + 1); 2114 new_state = ceph_decode_8(&p); 2115 has_current_state = ceph_decode_8(&p); 2116 if (has_current_state) 2117 current_state = ceph_decode_8(&p); 2118 2119 spin_lock(&rbd_dev->object_map_lock); 2120 state = __rbd_object_map_get(rbd_dev, objno); 2121 if (!has_current_state || current_state == state || 2122 (current_state == OBJECT_EXISTS && state == OBJECT_EXISTS_CLEAN)) 2123 __rbd_object_map_set(rbd_dev, objno, new_state); 2124 spin_unlock(&rbd_dev->object_map_lock); 2125 2126 return 0; 2127 } 2128 2129 static void rbd_object_map_callback(struct ceph_osd_request *osd_req) 2130 { 2131 struct rbd_obj_request *obj_req = osd_req->r_priv; 2132 int result; 2133 2134 dout("%s osd_req %p result %d for obj_req %p\n", __func__, osd_req, 2135 osd_req->r_result, obj_req); 2136 2137 result = rbd_object_map_update_finish(obj_req, osd_req); 2138 rbd_obj_handle_request(obj_req, result); 2139 } 2140 2141 static bool update_needed(struct rbd_device *rbd_dev, u64 objno, u8 new_state) 2142 { 2143 u8 state = rbd_object_map_get(rbd_dev, objno); 2144 2145 if (state == new_state || 2146 (new_state == OBJECT_PENDING && state == OBJECT_NONEXISTENT) || 2147 (new_state == OBJECT_NONEXISTENT && state != OBJECT_PENDING)) 2148 return false; 2149 2150 return true; 2151 } 2152 2153 static int rbd_cls_object_map_update(struct ceph_osd_request *req, 2154 int which, u64 objno, u8 new_state, 2155 const u8 *current_state) 2156 { 2157 struct page **pages; 2158 void *p, *start; 2159 int ret; 2160 2161 ret = osd_req_op_cls_init(req, which, "rbd", "object_map_update"); 2162 if (ret) 2163 return ret; 2164 2165 pages = ceph_alloc_page_vector(1, GFP_NOIO); 2166 if (IS_ERR(pages)) 2167 return PTR_ERR(pages); 2168 2169 p = start = page_address(pages[0]); 2170 ceph_encode_64(&p, objno); 2171 ceph_encode_64(&p, objno + 1); 2172 ceph_encode_8(&p, new_state); 2173 if (current_state) { 2174 ceph_encode_8(&p, 1); 2175 ceph_encode_8(&p, *current_state); 2176 } else { 2177 ceph_encode_8(&p, 0); 2178 } 2179 2180 osd_req_op_cls_request_data_pages(req, which, pages, p - start, 0, 2181 false, true); 2182 return 0; 2183 } 2184 2185 /* 2186 * Return: 2187 * 0 - object map update sent 2188 * 1 - object map update isn't needed 2189 * <0 - error 2190 */ 2191 static int rbd_object_map_update(struct rbd_obj_request *obj_req, u64 snap_id, 2192 u8 new_state, const u8 *current_state) 2193 { 2194 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2195 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 2196 struct ceph_osd_request *req; 2197 int num_ops = 1; 2198 int which = 0; 2199 int ret; 2200 2201 if (snap_id == CEPH_NOSNAP) { 2202 if (!update_needed(rbd_dev, obj_req->ex.oe_objno, new_state)) 2203 return 1; 2204 2205 num_ops++; /* assert_locked */ 2206 } 2207 2208 req = ceph_osdc_alloc_request(osdc, NULL, num_ops, false, GFP_NOIO); 2209 if (!req) 2210 return -ENOMEM; 2211 2212 list_add_tail(&req->r_private_item, &obj_req->osd_reqs); 2213 req->r_callback = rbd_object_map_callback; 2214 req->r_priv = obj_req; 2215 2216 rbd_object_map_name(rbd_dev, snap_id, &req->r_base_oid); 2217 ceph_oloc_copy(&req->r_base_oloc, &rbd_dev->header_oloc); 2218 req->r_flags = CEPH_OSD_FLAG_WRITE; 2219 ktime_get_real_ts64(&req->r_mtime); 2220 2221 if (snap_id == CEPH_NOSNAP) { 2222 /* 2223 * Protect against possible race conditions during lock 2224 * ownership transitions. 2225 */ 2226 ret = ceph_cls_assert_locked(req, which++, RBD_LOCK_NAME, 2227 CEPH_CLS_LOCK_EXCLUSIVE, "", ""); 2228 if (ret) 2229 return ret; 2230 } 2231 2232 ret = rbd_cls_object_map_update(req, which, obj_req->ex.oe_objno, 2233 new_state, current_state); 2234 if (ret) 2235 return ret; 2236 2237 ret = ceph_osdc_alloc_messages(req, GFP_NOIO); 2238 if (ret) 2239 return ret; 2240 2241 ceph_osdc_start_request(osdc, req, false); 2242 return 0; 2243 } 2244 2245 static void prune_extents(struct ceph_file_extent *img_extents, 2246 u32 *num_img_extents, u64 overlap) 2247 { 2248 u32 cnt = *num_img_extents; 2249 2250 /* drop extents completely beyond the overlap */ 2251 while (cnt && img_extents[cnt - 1].fe_off >= overlap) 2252 cnt--; 2253 2254 if (cnt) { 2255 struct ceph_file_extent *ex = &img_extents[cnt - 1]; 2256 2257 /* trim final overlapping extent */ 2258 if (ex->fe_off + ex->fe_len > overlap) 2259 ex->fe_len = overlap - ex->fe_off; 2260 } 2261 2262 *num_img_extents = cnt; 2263 } 2264 2265 /* 2266 * Determine the byte range(s) covered by either just the object extent 2267 * or the entire object in the parent image. 2268 */ 2269 static int rbd_obj_calc_img_extents(struct rbd_obj_request *obj_req, 2270 bool entire) 2271 { 2272 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2273 int ret; 2274 2275 if (!rbd_dev->parent_overlap) 2276 return 0; 2277 2278 ret = ceph_extent_to_file(&rbd_dev->layout, obj_req->ex.oe_objno, 2279 entire ? 0 : obj_req->ex.oe_off, 2280 entire ? rbd_dev->layout.object_size : 2281 obj_req->ex.oe_len, 2282 &obj_req->img_extents, 2283 &obj_req->num_img_extents); 2284 if (ret) 2285 return ret; 2286 2287 prune_extents(obj_req->img_extents, &obj_req->num_img_extents, 2288 rbd_dev->parent_overlap); 2289 return 0; 2290 } 2291 2292 static void rbd_osd_setup_data(struct ceph_osd_request *osd_req, int which) 2293 { 2294 struct rbd_obj_request *obj_req = osd_req->r_priv; 2295 2296 switch (obj_req->img_request->data_type) { 2297 case OBJ_REQUEST_BIO: 2298 osd_req_op_extent_osd_data_bio(osd_req, which, 2299 &obj_req->bio_pos, 2300 obj_req->ex.oe_len); 2301 break; 2302 case OBJ_REQUEST_BVECS: 2303 case OBJ_REQUEST_OWN_BVECS: 2304 rbd_assert(obj_req->bvec_pos.iter.bi_size == 2305 obj_req->ex.oe_len); 2306 rbd_assert(obj_req->bvec_idx == obj_req->bvec_count); 2307 osd_req_op_extent_osd_data_bvec_pos(osd_req, which, 2308 &obj_req->bvec_pos); 2309 break; 2310 default: 2311 BUG(); 2312 } 2313 } 2314 2315 static int rbd_osd_setup_stat(struct ceph_osd_request *osd_req, int which) 2316 { 2317 struct page **pages; 2318 2319 /* 2320 * The response data for a STAT call consists of: 2321 * le64 length; 2322 * struct { 2323 * le32 tv_sec; 2324 * le32 tv_nsec; 2325 * } mtime; 2326 */ 2327 pages = ceph_alloc_page_vector(1, GFP_NOIO); 2328 if (IS_ERR(pages)) 2329 return PTR_ERR(pages); 2330 2331 osd_req_op_init(osd_req, which, CEPH_OSD_OP_STAT, 0); 2332 osd_req_op_raw_data_in_pages(osd_req, which, pages, 2333 8 + sizeof(struct ceph_timespec), 2334 0, false, true); 2335 return 0; 2336 } 2337 2338 static int rbd_osd_setup_copyup(struct ceph_osd_request *osd_req, int which, 2339 u32 bytes) 2340 { 2341 struct rbd_obj_request *obj_req = osd_req->r_priv; 2342 int ret; 2343 2344 ret = osd_req_op_cls_init(osd_req, which, "rbd", "copyup"); 2345 if (ret) 2346 return ret; 2347 2348 osd_req_op_cls_request_data_bvecs(osd_req, which, obj_req->copyup_bvecs, 2349 obj_req->copyup_bvec_count, bytes); 2350 return 0; 2351 } 2352 2353 static int rbd_obj_init_read(struct rbd_obj_request *obj_req) 2354 { 2355 obj_req->read_state = RBD_OBJ_READ_START; 2356 return 0; 2357 } 2358 2359 static void __rbd_osd_setup_write_ops(struct ceph_osd_request *osd_req, 2360 int which) 2361 { 2362 struct rbd_obj_request *obj_req = osd_req->r_priv; 2363 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2364 u16 opcode; 2365 2366 if (!use_object_map(rbd_dev) || 2367 !(obj_req->flags & RBD_OBJ_FLAG_MAY_EXIST)) { 2368 osd_req_op_alloc_hint_init(osd_req, which++, 2369 rbd_dev->layout.object_size, 2370 rbd_dev->layout.object_size); 2371 } 2372 2373 if (rbd_obj_is_entire(obj_req)) 2374 opcode = CEPH_OSD_OP_WRITEFULL; 2375 else 2376 opcode = CEPH_OSD_OP_WRITE; 2377 2378 osd_req_op_extent_init(osd_req, which, opcode, 2379 obj_req->ex.oe_off, obj_req->ex.oe_len, 0, 0); 2380 rbd_osd_setup_data(osd_req, which); 2381 } 2382 2383 static int rbd_obj_init_write(struct rbd_obj_request *obj_req) 2384 { 2385 int ret; 2386 2387 /* reverse map the entire object onto the parent */ 2388 ret = rbd_obj_calc_img_extents(obj_req, true); 2389 if (ret) 2390 return ret; 2391 2392 if (rbd_obj_copyup_enabled(obj_req)) 2393 obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ENABLED; 2394 2395 obj_req->write_state = RBD_OBJ_WRITE_START; 2396 return 0; 2397 } 2398 2399 static u16 truncate_or_zero_opcode(struct rbd_obj_request *obj_req) 2400 { 2401 return rbd_obj_is_tail(obj_req) ? CEPH_OSD_OP_TRUNCATE : 2402 CEPH_OSD_OP_ZERO; 2403 } 2404 2405 static void __rbd_osd_setup_discard_ops(struct ceph_osd_request *osd_req, 2406 int which) 2407 { 2408 struct rbd_obj_request *obj_req = osd_req->r_priv; 2409 2410 if (rbd_obj_is_entire(obj_req) && !obj_req->num_img_extents) { 2411 rbd_assert(obj_req->flags & RBD_OBJ_FLAG_DELETION); 2412 osd_req_op_init(osd_req, which, CEPH_OSD_OP_DELETE, 0); 2413 } else { 2414 osd_req_op_extent_init(osd_req, which, 2415 truncate_or_zero_opcode(obj_req), 2416 obj_req->ex.oe_off, obj_req->ex.oe_len, 2417 0, 0); 2418 } 2419 } 2420 2421 static int rbd_obj_init_discard(struct rbd_obj_request *obj_req) 2422 { 2423 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2424 u64 off, next_off; 2425 int ret; 2426 2427 /* 2428 * Align the range to alloc_size boundary and punt on discards 2429 * that are too small to free up any space. 2430 * 2431 * alloc_size == object_size && is_tail() is a special case for 2432 * filestore with filestore_punch_hole = false, needed to allow 2433 * truncate (in addition to delete). 2434 */ 2435 if (rbd_dev->opts->alloc_size != rbd_dev->layout.object_size || 2436 !rbd_obj_is_tail(obj_req)) { 2437 off = round_up(obj_req->ex.oe_off, rbd_dev->opts->alloc_size); 2438 next_off = round_down(obj_req->ex.oe_off + obj_req->ex.oe_len, 2439 rbd_dev->opts->alloc_size); 2440 if (off >= next_off) 2441 return 1; 2442 2443 dout("%s %p %llu~%llu -> %llu~%llu\n", __func__, 2444 obj_req, obj_req->ex.oe_off, obj_req->ex.oe_len, 2445 off, next_off - off); 2446 obj_req->ex.oe_off = off; 2447 obj_req->ex.oe_len = next_off - off; 2448 } 2449 2450 /* reverse map the entire object onto the parent */ 2451 ret = rbd_obj_calc_img_extents(obj_req, true); 2452 if (ret) 2453 return ret; 2454 2455 obj_req->flags |= RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT; 2456 if (rbd_obj_is_entire(obj_req) && !obj_req->num_img_extents) 2457 obj_req->flags |= RBD_OBJ_FLAG_DELETION; 2458 2459 obj_req->write_state = RBD_OBJ_WRITE_START; 2460 return 0; 2461 } 2462 2463 static void __rbd_osd_setup_zeroout_ops(struct ceph_osd_request *osd_req, 2464 int which) 2465 { 2466 struct rbd_obj_request *obj_req = osd_req->r_priv; 2467 u16 opcode; 2468 2469 if (rbd_obj_is_entire(obj_req)) { 2470 if (obj_req->num_img_extents) { 2471 if (!(obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED)) 2472 osd_req_op_init(osd_req, which++, 2473 CEPH_OSD_OP_CREATE, 0); 2474 opcode = CEPH_OSD_OP_TRUNCATE; 2475 } else { 2476 rbd_assert(obj_req->flags & RBD_OBJ_FLAG_DELETION); 2477 osd_req_op_init(osd_req, which++, 2478 CEPH_OSD_OP_DELETE, 0); 2479 opcode = 0; 2480 } 2481 } else { 2482 opcode = truncate_or_zero_opcode(obj_req); 2483 } 2484 2485 if (opcode) 2486 osd_req_op_extent_init(osd_req, which, opcode, 2487 obj_req->ex.oe_off, obj_req->ex.oe_len, 2488 0, 0); 2489 } 2490 2491 static int rbd_obj_init_zeroout(struct rbd_obj_request *obj_req) 2492 { 2493 int ret; 2494 2495 /* reverse map the entire object onto the parent */ 2496 ret = rbd_obj_calc_img_extents(obj_req, true); 2497 if (ret) 2498 return ret; 2499 2500 if (rbd_obj_copyup_enabled(obj_req)) 2501 obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ENABLED; 2502 if (!obj_req->num_img_extents) { 2503 obj_req->flags |= RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT; 2504 if (rbd_obj_is_entire(obj_req)) 2505 obj_req->flags |= RBD_OBJ_FLAG_DELETION; 2506 } 2507 2508 obj_req->write_state = RBD_OBJ_WRITE_START; 2509 return 0; 2510 } 2511 2512 static int count_write_ops(struct rbd_obj_request *obj_req) 2513 { 2514 struct rbd_img_request *img_req = obj_req->img_request; 2515 2516 switch (img_req->op_type) { 2517 case OBJ_OP_WRITE: 2518 if (!use_object_map(img_req->rbd_dev) || 2519 !(obj_req->flags & RBD_OBJ_FLAG_MAY_EXIST)) 2520 return 2; /* setallochint + write/writefull */ 2521 2522 return 1; /* write/writefull */ 2523 case OBJ_OP_DISCARD: 2524 return 1; /* delete/truncate/zero */ 2525 case OBJ_OP_ZEROOUT: 2526 if (rbd_obj_is_entire(obj_req) && obj_req->num_img_extents && 2527 !(obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED)) 2528 return 2; /* create + truncate */ 2529 2530 return 1; /* delete/truncate/zero */ 2531 default: 2532 BUG(); 2533 } 2534 } 2535 2536 static void rbd_osd_setup_write_ops(struct ceph_osd_request *osd_req, 2537 int which) 2538 { 2539 struct rbd_obj_request *obj_req = osd_req->r_priv; 2540 2541 switch (obj_req->img_request->op_type) { 2542 case OBJ_OP_WRITE: 2543 __rbd_osd_setup_write_ops(osd_req, which); 2544 break; 2545 case OBJ_OP_DISCARD: 2546 __rbd_osd_setup_discard_ops(osd_req, which); 2547 break; 2548 case OBJ_OP_ZEROOUT: 2549 __rbd_osd_setup_zeroout_ops(osd_req, which); 2550 break; 2551 default: 2552 BUG(); 2553 } 2554 } 2555 2556 /* 2557 * Prune the list of object requests (adjust offset and/or length, drop 2558 * redundant requests). Prepare object request state machines and image 2559 * request state machine for execution. 2560 */ 2561 static int __rbd_img_fill_request(struct rbd_img_request *img_req) 2562 { 2563 struct rbd_obj_request *obj_req, *next_obj_req; 2564 int ret; 2565 2566 for_each_obj_request_safe(img_req, obj_req, next_obj_req) { 2567 switch (img_req->op_type) { 2568 case OBJ_OP_READ: 2569 ret = rbd_obj_init_read(obj_req); 2570 break; 2571 case OBJ_OP_WRITE: 2572 ret = rbd_obj_init_write(obj_req); 2573 break; 2574 case OBJ_OP_DISCARD: 2575 ret = rbd_obj_init_discard(obj_req); 2576 break; 2577 case OBJ_OP_ZEROOUT: 2578 ret = rbd_obj_init_zeroout(obj_req); 2579 break; 2580 default: 2581 BUG(); 2582 } 2583 if (ret < 0) 2584 return ret; 2585 if (ret > 0) { 2586 rbd_img_obj_request_del(img_req, obj_req); 2587 continue; 2588 } 2589 } 2590 2591 img_req->state = RBD_IMG_START; 2592 return 0; 2593 } 2594 2595 union rbd_img_fill_iter { 2596 struct ceph_bio_iter bio_iter; 2597 struct ceph_bvec_iter bvec_iter; 2598 }; 2599 2600 struct rbd_img_fill_ctx { 2601 enum obj_request_type pos_type; 2602 union rbd_img_fill_iter *pos; 2603 union rbd_img_fill_iter iter; 2604 ceph_object_extent_fn_t set_pos_fn; 2605 ceph_object_extent_fn_t count_fn; 2606 ceph_object_extent_fn_t copy_fn; 2607 }; 2608 2609 static struct ceph_object_extent *alloc_object_extent(void *arg) 2610 { 2611 struct rbd_img_request *img_req = arg; 2612 struct rbd_obj_request *obj_req; 2613 2614 obj_req = rbd_obj_request_create(); 2615 if (!obj_req) 2616 return NULL; 2617 2618 rbd_img_obj_request_add(img_req, obj_req); 2619 return &obj_req->ex; 2620 } 2621 2622 /* 2623 * While su != os && sc == 1 is technically not fancy (it's the same 2624 * layout as su == os && sc == 1), we can't use the nocopy path for it 2625 * because ->set_pos_fn() should be called only once per object. 2626 * ceph_file_to_extents() invokes action_fn once per stripe unit, so 2627 * treat su != os && sc == 1 as fancy. 2628 */ 2629 static bool rbd_layout_is_fancy(struct ceph_file_layout *l) 2630 { 2631 return l->stripe_unit != l->object_size; 2632 } 2633 2634 static int rbd_img_fill_request_nocopy(struct rbd_img_request *img_req, 2635 struct ceph_file_extent *img_extents, 2636 u32 num_img_extents, 2637 struct rbd_img_fill_ctx *fctx) 2638 { 2639 u32 i; 2640 int ret; 2641 2642 img_req->data_type = fctx->pos_type; 2643 2644 /* 2645 * Create object requests and set each object request's starting 2646 * position in the provided bio (list) or bio_vec array. 2647 */ 2648 fctx->iter = *fctx->pos; 2649 for (i = 0; i < num_img_extents; i++) { 2650 ret = ceph_file_to_extents(&img_req->rbd_dev->layout, 2651 img_extents[i].fe_off, 2652 img_extents[i].fe_len, 2653 &img_req->object_extents, 2654 alloc_object_extent, img_req, 2655 fctx->set_pos_fn, &fctx->iter); 2656 if (ret) 2657 return ret; 2658 } 2659 2660 return __rbd_img_fill_request(img_req); 2661 } 2662 2663 /* 2664 * Map a list of image extents to a list of object extents, create the 2665 * corresponding object requests (normally each to a different object, 2666 * but not always) and add them to @img_req. For each object request, 2667 * set up its data descriptor to point to the corresponding chunk(s) of 2668 * @fctx->pos data buffer. 2669 * 2670 * Because ceph_file_to_extents() will merge adjacent object extents 2671 * together, each object request's data descriptor may point to multiple 2672 * different chunks of @fctx->pos data buffer. 2673 * 2674 * @fctx->pos data buffer is assumed to be large enough. 2675 */ 2676 static int rbd_img_fill_request(struct rbd_img_request *img_req, 2677 struct ceph_file_extent *img_extents, 2678 u32 num_img_extents, 2679 struct rbd_img_fill_ctx *fctx) 2680 { 2681 struct rbd_device *rbd_dev = img_req->rbd_dev; 2682 struct rbd_obj_request *obj_req; 2683 u32 i; 2684 int ret; 2685 2686 if (fctx->pos_type == OBJ_REQUEST_NODATA || 2687 !rbd_layout_is_fancy(&rbd_dev->layout)) 2688 return rbd_img_fill_request_nocopy(img_req, img_extents, 2689 num_img_extents, fctx); 2690 2691 img_req->data_type = OBJ_REQUEST_OWN_BVECS; 2692 2693 /* 2694 * Create object requests and determine ->bvec_count for each object 2695 * request. Note that ->bvec_count sum over all object requests may 2696 * be greater than the number of bio_vecs in the provided bio (list) 2697 * or bio_vec array because when mapped, those bio_vecs can straddle 2698 * stripe unit boundaries. 2699 */ 2700 fctx->iter = *fctx->pos; 2701 for (i = 0; i < num_img_extents; i++) { 2702 ret = ceph_file_to_extents(&rbd_dev->layout, 2703 img_extents[i].fe_off, 2704 img_extents[i].fe_len, 2705 &img_req->object_extents, 2706 alloc_object_extent, img_req, 2707 fctx->count_fn, &fctx->iter); 2708 if (ret) 2709 return ret; 2710 } 2711 2712 for_each_obj_request(img_req, obj_req) { 2713 obj_req->bvec_pos.bvecs = kmalloc_array(obj_req->bvec_count, 2714 sizeof(*obj_req->bvec_pos.bvecs), 2715 GFP_NOIO); 2716 if (!obj_req->bvec_pos.bvecs) 2717 return -ENOMEM; 2718 } 2719 2720 /* 2721 * Fill in each object request's private bio_vec array, splitting and 2722 * rearranging the provided bio_vecs in stripe unit chunks as needed. 2723 */ 2724 fctx->iter = *fctx->pos; 2725 for (i = 0; i < num_img_extents; i++) { 2726 ret = ceph_iterate_extents(&rbd_dev->layout, 2727 img_extents[i].fe_off, 2728 img_extents[i].fe_len, 2729 &img_req->object_extents, 2730 fctx->copy_fn, &fctx->iter); 2731 if (ret) 2732 return ret; 2733 } 2734 2735 return __rbd_img_fill_request(img_req); 2736 } 2737 2738 static int rbd_img_fill_nodata(struct rbd_img_request *img_req, 2739 u64 off, u64 len) 2740 { 2741 struct ceph_file_extent ex = { off, len }; 2742 union rbd_img_fill_iter dummy; 2743 struct rbd_img_fill_ctx fctx = { 2744 .pos_type = OBJ_REQUEST_NODATA, 2745 .pos = &dummy, 2746 }; 2747 2748 return rbd_img_fill_request(img_req, &ex, 1, &fctx); 2749 } 2750 2751 static void set_bio_pos(struct ceph_object_extent *ex, u32 bytes, void *arg) 2752 { 2753 struct rbd_obj_request *obj_req = 2754 container_of(ex, struct rbd_obj_request, ex); 2755 struct ceph_bio_iter *it = arg; 2756 2757 dout("%s objno %llu bytes %u\n", __func__, ex->oe_objno, bytes); 2758 obj_req->bio_pos = *it; 2759 ceph_bio_iter_advance(it, bytes); 2760 } 2761 2762 static void count_bio_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2763 { 2764 struct rbd_obj_request *obj_req = 2765 container_of(ex, struct rbd_obj_request, ex); 2766 struct ceph_bio_iter *it = arg; 2767 2768 dout("%s objno %llu bytes %u\n", __func__, ex->oe_objno, bytes); 2769 ceph_bio_iter_advance_step(it, bytes, ({ 2770 obj_req->bvec_count++; 2771 })); 2772 2773 } 2774 2775 static void copy_bio_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2776 { 2777 struct rbd_obj_request *obj_req = 2778 container_of(ex, struct rbd_obj_request, ex); 2779 struct ceph_bio_iter *it = arg; 2780 2781 dout("%s objno %llu bytes %u\n", __func__, ex->oe_objno, bytes); 2782 ceph_bio_iter_advance_step(it, bytes, ({ 2783 obj_req->bvec_pos.bvecs[obj_req->bvec_idx++] = bv; 2784 obj_req->bvec_pos.iter.bi_size += bv.bv_len; 2785 })); 2786 } 2787 2788 static int __rbd_img_fill_from_bio(struct rbd_img_request *img_req, 2789 struct ceph_file_extent *img_extents, 2790 u32 num_img_extents, 2791 struct ceph_bio_iter *bio_pos) 2792 { 2793 struct rbd_img_fill_ctx fctx = { 2794 .pos_type = OBJ_REQUEST_BIO, 2795 .pos = (union rbd_img_fill_iter *)bio_pos, 2796 .set_pos_fn = set_bio_pos, 2797 .count_fn = count_bio_bvecs, 2798 .copy_fn = copy_bio_bvecs, 2799 }; 2800 2801 return rbd_img_fill_request(img_req, img_extents, num_img_extents, 2802 &fctx); 2803 } 2804 2805 static int rbd_img_fill_from_bio(struct rbd_img_request *img_req, 2806 u64 off, u64 len, struct bio *bio) 2807 { 2808 struct ceph_file_extent ex = { off, len }; 2809 struct ceph_bio_iter it = { .bio = bio, .iter = bio->bi_iter }; 2810 2811 return __rbd_img_fill_from_bio(img_req, &ex, 1, &it); 2812 } 2813 2814 static void set_bvec_pos(struct ceph_object_extent *ex, u32 bytes, void *arg) 2815 { 2816 struct rbd_obj_request *obj_req = 2817 container_of(ex, struct rbd_obj_request, ex); 2818 struct ceph_bvec_iter *it = arg; 2819 2820 obj_req->bvec_pos = *it; 2821 ceph_bvec_iter_shorten(&obj_req->bvec_pos, bytes); 2822 ceph_bvec_iter_advance(it, bytes); 2823 } 2824 2825 static void count_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2826 { 2827 struct rbd_obj_request *obj_req = 2828 container_of(ex, struct rbd_obj_request, ex); 2829 struct ceph_bvec_iter *it = arg; 2830 2831 ceph_bvec_iter_advance_step(it, bytes, ({ 2832 obj_req->bvec_count++; 2833 })); 2834 } 2835 2836 static void copy_bvecs(struct ceph_object_extent *ex, u32 bytes, void *arg) 2837 { 2838 struct rbd_obj_request *obj_req = 2839 container_of(ex, struct rbd_obj_request, ex); 2840 struct ceph_bvec_iter *it = arg; 2841 2842 ceph_bvec_iter_advance_step(it, bytes, ({ 2843 obj_req->bvec_pos.bvecs[obj_req->bvec_idx++] = bv; 2844 obj_req->bvec_pos.iter.bi_size += bv.bv_len; 2845 })); 2846 } 2847 2848 static int __rbd_img_fill_from_bvecs(struct rbd_img_request *img_req, 2849 struct ceph_file_extent *img_extents, 2850 u32 num_img_extents, 2851 struct ceph_bvec_iter *bvec_pos) 2852 { 2853 struct rbd_img_fill_ctx fctx = { 2854 .pos_type = OBJ_REQUEST_BVECS, 2855 .pos = (union rbd_img_fill_iter *)bvec_pos, 2856 .set_pos_fn = set_bvec_pos, 2857 .count_fn = count_bvecs, 2858 .copy_fn = copy_bvecs, 2859 }; 2860 2861 return rbd_img_fill_request(img_req, img_extents, num_img_extents, 2862 &fctx); 2863 } 2864 2865 static int rbd_img_fill_from_bvecs(struct rbd_img_request *img_req, 2866 struct ceph_file_extent *img_extents, 2867 u32 num_img_extents, 2868 struct bio_vec *bvecs) 2869 { 2870 struct ceph_bvec_iter it = { 2871 .bvecs = bvecs, 2872 .iter = { .bi_size = ceph_file_extents_bytes(img_extents, 2873 num_img_extents) }, 2874 }; 2875 2876 return __rbd_img_fill_from_bvecs(img_req, img_extents, num_img_extents, 2877 &it); 2878 } 2879 2880 static void rbd_img_handle_request_work(struct work_struct *work) 2881 { 2882 struct rbd_img_request *img_req = 2883 container_of(work, struct rbd_img_request, work); 2884 2885 rbd_img_handle_request(img_req, img_req->work_result); 2886 } 2887 2888 static void rbd_img_schedule(struct rbd_img_request *img_req, int result) 2889 { 2890 INIT_WORK(&img_req->work, rbd_img_handle_request_work); 2891 img_req->work_result = result; 2892 queue_work(rbd_wq, &img_req->work); 2893 } 2894 2895 static bool rbd_obj_may_exist(struct rbd_obj_request *obj_req) 2896 { 2897 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2898 2899 if (rbd_object_map_may_exist(rbd_dev, obj_req->ex.oe_objno)) { 2900 obj_req->flags |= RBD_OBJ_FLAG_MAY_EXIST; 2901 return true; 2902 } 2903 2904 dout("%s %p objno %llu assuming dne\n", __func__, obj_req, 2905 obj_req->ex.oe_objno); 2906 return false; 2907 } 2908 2909 static int rbd_obj_read_object(struct rbd_obj_request *obj_req) 2910 { 2911 struct ceph_osd_request *osd_req; 2912 int ret; 2913 2914 osd_req = __rbd_obj_add_osd_request(obj_req, NULL, 1); 2915 if (IS_ERR(osd_req)) 2916 return PTR_ERR(osd_req); 2917 2918 osd_req_op_extent_init(osd_req, 0, CEPH_OSD_OP_READ, 2919 obj_req->ex.oe_off, obj_req->ex.oe_len, 0, 0); 2920 rbd_osd_setup_data(osd_req, 0); 2921 rbd_osd_format_read(osd_req); 2922 2923 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 2924 if (ret) 2925 return ret; 2926 2927 rbd_osd_submit(osd_req); 2928 return 0; 2929 } 2930 2931 static int rbd_obj_read_from_parent(struct rbd_obj_request *obj_req) 2932 { 2933 struct rbd_img_request *img_req = obj_req->img_request; 2934 struct rbd_img_request *child_img_req; 2935 int ret; 2936 2937 child_img_req = rbd_img_request_create(img_req->rbd_dev->parent, 2938 OBJ_OP_READ, NULL); 2939 if (!child_img_req) 2940 return -ENOMEM; 2941 2942 __set_bit(IMG_REQ_CHILD, &child_img_req->flags); 2943 child_img_req->obj_request = obj_req; 2944 2945 dout("%s child_img_req %p for obj_req %p\n", __func__, child_img_req, 2946 obj_req); 2947 2948 if (!rbd_img_is_write(img_req)) { 2949 switch (img_req->data_type) { 2950 case OBJ_REQUEST_BIO: 2951 ret = __rbd_img_fill_from_bio(child_img_req, 2952 obj_req->img_extents, 2953 obj_req->num_img_extents, 2954 &obj_req->bio_pos); 2955 break; 2956 case OBJ_REQUEST_BVECS: 2957 case OBJ_REQUEST_OWN_BVECS: 2958 ret = __rbd_img_fill_from_bvecs(child_img_req, 2959 obj_req->img_extents, 2960 obj_req->num_img_extents, 2961 &obj_req->bvec_pos); 2962 break; 2963 default: 2964 BUG(); 2965 } 2966 } else { 2967 ret = rbd_img_fill_from_bvecs(child_img_req, 2968 obj_req->img_extents, 2969 obj_req->num_img_extents, 2970 obj_req->copyup_bvecs); 2971 } 2972 if (ret) { 2973 rbd_img_request_put(child_img_req); 2974 return ret; 2975 } 2976 2977 /* avoid parent chain recursion */ 2978 rbd_img_schedule(child_img_req, 0); 2979 return 0; 2980 } 2981 2982 static bool rbd_obj_advance_read(struct rbd_obj_request *obj_req, int *result) 2983 { 2984 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 2985 int ret; 2986 2987 again: 2988 switch (obj_req->read_state) { 2989 case RBD_OBJ_READ_START: 2990 rbd_assert(!*result); 2991 2992 if (!rbd_obj_may_exist(obj_req)) { 2993 *result = -ENOENT; 2994 obj_req->read_state = RBD_OBJ_READ_OBJECT; 2995 goto again; 2996 } 2997 2998 ret = rbd_obj_read_object(obj_req); 2999 if (ret) { 3000 *result = ret; 3001 return true; 3002 } 3003 obj_req->read_state = RBD_OBJ_READ_OBJECT; 3004 return false; 3005 case RBD_OBJ_READ_OBJECT: 3006 if (*result == -ENOENT && rbd_dev->parent_overlap) { 3007 /* reverse map this object extent onto the parent */ 3008 ret = rbd_obj_calc_img_extents(obj_req, false); 3009 if (ret) { 3010 *result = ret; 3011 return true; 3012 } 3013 if (obj_req->num_img_extents) { 3014 ret = rbd_obj_read_from_parent(obj_req); 3015 if (ret) { 3016 *result = ret; 3017 return true; 3018 } 3019 obj_req->read_state = RBD_OBJ_READ_PARENT; 3020 return false; 3021 } 3022 } 3023 3024 /* 3025 * -ENOENT means a hole in the image -- zero-fill the entire 3026 * length of the request. A short read also implies zero-fill 3027 * to the end of the request. 3028 */ 3029 if (*result == -ENOENT) { 3030 rbd_obj_zero_range(obj_req, 0, obj_req->ex.oe_len); 3031 *result = 0; 3032 } else if (*result >= 0) { 3033 if (*result < obj_req->ex.oe_len) 3034 rbd_obj_zero_range(obj_req, *result, 3035 obj_req->ex.oe_len - *result); 3036 else 3037 rbd_assert(*result == obj_req->ex.oe_len); 3038 *result = 0; 3039 } 3040 return true; 3041 case RBD_OBJ_READ_PARENT: 3042 /* 3043 * The parent image is read only up to the overlap -- zero-fill 3044 * from the overlap to the end of the request. 3045 */ 3046 if (!*result) { 3047 u32 obj_overlap = rbd_obj_img_extents_bytes(obj_req); 3048 3049 if (obj_overlap < obj_req->ex.oe_len) 3050 rbd_obj_zero_range(obj_req, obj_overlap, 3051 obj_req->ex.oe_len - obj_overlap); 3052 } 3053 return true; 3054 default: 3055 BUG(); 3056 } 3057 } 3058 3059 static bool rbd_obj_write_is_noop(struct rbd_obj_request *obj_req) 3060 { 3061 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3062 3063 if (rbd_object_map_may_exist(rbd_dev, obj_req->ex.oe_objno)) 3064 obj_req->flags |= RBD_OBJ_FLAG_MAY_EXIST; 3065 3066 if (!(obj_req->flags & RBD_OBJ_FLAG_MAY_EXIST) && 3067 (obj_req->flags & RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT)) { 3068 dout("%s %p noop for nonexistent\n", __func__, obj_req); 3069 return true; 3070 } 3071 3072 return false; 3073 } 3074 3075 /* 3076 * Return: 3077 * 0 - object map update sent 3078 * 1 - object map update isn't needed 3079 * <0 - error 3080 */ 3081 static int rbd_obj_write_pre_object_map(struct rbd_obj_request *obj_req) 3082 { 3083 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3084 u8 new_state; 3085 3086 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3087 return 1; 3088 3089 if (obj_req->flags & RBD_OBJ_FLAG_DELETION) 3090 new_state = OBJECT_PENDING; 3091 else 3092 new_state = OBJECT_EXISTS; 3093 3094 return rbd_object_map_update(obj_req, CEPH_NOSNAP, new_state, NULL); 3095 } 3096 3097 static int rbd_obj_write_object(struct rbd_obj_request *obj_req) 3098 { 3099 struct ceph_osd_request *osd_req; 3100 int num_ops = count_write_ops(obj_req); 3101 int which = 0; 3102 int ret; 3103 3104 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED) 3105 num_ops++; /* stat */ 3106 3107 osd_req = rbd_obj_add_osd_request(obj_req, num_ops); 3108 if (IS_ERR(osd_req)) 3109 return PTR_ERR(osd_req); 3110 3111 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED) { 3112 ret = rbd_osd_setup_stat(osd_req, which++); 3113 if (ret) 3114 return ret; 3115 } 3116 3117 rbd_osd_setup_write_ops(osd_req, which); 3118 rbd_osd_format_write(osd_req); 3119 3120 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 3121 if (ret) 3122 return ret; 3123 3124 rbd_osd_submit(osd_req); 3125 return 0; 3126 } 3127 3128 /* 3129 * copyup_bvecs pages are never highmem pages 3130 */ 3131 static bool is_zero_bvecs(struct bio_vec *bvecs, u32 bytes) 3132 { 3133 struct ceph_bvec_iter it = { 3134 .bvecs = bvecs, 3135 .iter = { .bi_size = bytes }, 3136 }; 3137 3138 ceph_bvec_iter_advance_step(&it, bytes, ({ 3139 if (memchr_inv(page_address(bv.bv_page) + bv.bv_offset, 0, 3140 bv.bv_len)) 3141 return false; 3142 })); 3143 return true; 3144 } 3145 3146 #define MODS_ONLY U32_MAX 3147 3148 static int rbd_obj_copyup_empty_snapc(struct rbd_obj_request *obj_req, 3149 u32 bytes) 3150 { 3151 struct ceph_osd_request *osd_req; 3152 int ret; 3153 3154 dout("%s obj_req %p bytes %u\n", __func__, obj_req, bytes); 3155 rbd_assert(bytes > 0 && bytes != MODS_ONLY); 3156 3157 osd_req = __rbd_obj_add_osd_request(obj_req, &rbd_empty_snapc, 1); 3158 if (IS_ERR(osd_req)) 3159 return PTR_ERR(osd_req); 3160 3161 ret = rbd_osd_setup_copyup(osd_req, 0, bytes); 3162 if (ret) 3163 return ret; 3164 3165 rbd_osd_format_write(osd_req); 3166 3167 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 3168 if (ret) 3169 return ret; 3170 3171 rbd_osd_submit(osd_req); 3172 return 0; 3173 } 3174 3175 static int rbd_obj_copyup_current_snapc(struct rbd_obj_request *obj_req, 3176 u32 bytes) 3177 { 3178 struct ceph_osd_request *osd_req; 3179 int num_ops = count_write_ops(obj_req); 3180 int which = 0; 3181 int ret; 3182 3183 dout("%s obj_req %p bytes %u\n", __func__, obj_req, bytes); 3184 3185 if (bytes != MODS_ONLY) 3186 num_ops++; /* copyup */ 3187 3188 osd_req = rbd_obj_add_osd_request(obj_req, num_ops); 3189 if (IS_ERR(osd_req)) 3190 return PTR_ERR(osd_req); 3191 3192 if (bytes != MODS_ONLY) { 3193 ret = rbd_osd_setup_copyup(osd_req, which++, bytes); 3194 if (ret) 3195 return ret; 3196 } 3197 3198 rbd_osd_setup_write_ops(osd_req, which); 3199 rbd_osd_format_write(osd_req); 3200 3201 ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO); 3202 if (ret) 3203 return ret; 3204 3205 rbd_osd_submit(osd_req); 3206 return 0; 3207 } 3208 3209 static int setup_copyup_bvecs(struct rbd_obj_request *obj_req, u64 obj_overlap) 3210 { 3211 u32 i; 3212 3213 rbd_assert(!obj_req->copyup_bvecs); 3214 obj_req->copyup_bvec_count = calc_pages_for(0, obj_overlap); 3215 obj_req->copyup_bvecs = kcalloc(obj_req->copyup_bvec_count, 3216 sizeof(*obj_req->copyup_bvecs), 3217 GFP_NOIO); 3218 if (!obj_req->copyup_bvecs) 3219 return -ENOMEM; 3220 3221 for (i = 0; i < obj_req->copyup_bvec_count; i++) { 3222 unsigned int len = min(obj_overlap, (u64)PAGE_SIZE); 3223 3224 obj_req->copyup_bvecs[i].bv_page = alloc_page(GFP_NOIO); 3225 if (!obj_req->copyup_bvecs[i].bv_page) 3226 return -ENOMEM; 3227 3228 obj_req->copyup_bvecs[i].bv_offset = 0; 3229 obj_req->copyup_bvecs[i].bv_len = len; 3230 obj_overlap -= len; 3231 } 3232 3233 rbd_assert(!obj_overlap); 3234 return 0; 3235 } 3236 3237 /* 3238 * The target object doesn't exist. Read the data for the entire 3239 * target object up to the overlap point (if any) from the parent, 3240 * so we can use it for a copyup. 3241 */ 3242 static int rbd_obj_copyup_read_parent(struct rbd_obj_request *obj_req) 3243 { 3244 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3245 int ret; 3246 3247 rbd_assert(obj_req->num_img_extents); 3248 prune_extents(obj_req->img_extents, &obj_req->num_img_extents, 3249 rbd_dev->parent_overlap); 3250 if (!obj_req->num_img_extents) { 3251 /* 3252 * The overlap has become 0 (most likely because the 3253 * image has been flattened). Re-submit the original write 3254 * request -- pass MODS_ONLY since the copyup isn't needed 3255 * anymore. 3256 */ 3257 return rbd_obj_copyup_current_snapc(obj_req, MODS_ONLY); 3258 } 3259 3260 ret = setup_copyup_bvecs(obj_req, rbd_obj_img_extents_bytes(obj_req)); 3261 if (ret) 3262 return ret; 3263 3264 return rbd_obj_read_from_parent(obj_req); 3265 } 3266 3267 static void rbd_obj_copyup_object_maps(struct rbd_obj_request *obj_req) 3268 { 3269 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3270 struct ceph_snap_context *snapc = obj_req->img_request->snapc; 3271 u8 new_state; 3272 u32 i; 3273 int ret; 3274 3275 rbd_assert(!obj_req->pending.result && !obj_req->pending.num_pending); 3276 3277 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3278 return; 3279 3280 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ZEROS) 3281 return; 3282 3283 for (i = 0; i < snapc->num_snaps; i++) { 3284 if ((rbd_dev->header.features & RBD_FEATURE_FAST_DIFF) && 3285 i + 1 < snapc->num_snaps) 3286 new_state = OBJECT_EXISTS_CLEAN; 3287 else 3288 new_state = OBJECT_EXISTS; 3289 3290 ret = rbd_object_map_update(obj_req, snapc->snaps[i], 3291 new_state, NULL); 3292 if (ret < 0) { 3293 obj_req->pending.result = ret; 3294 return; 3295 } 3296 3297 rbd_assert(!ret); 3298 obj_req->pending.num_pending++; 3299 } 3300 } 3301 3302 static void rbd_obj_copyup_write_object(struct rbd_obj_request *obj_req) 3303 { 3304 u32 bytes = rbd_obj_img_extents_bytes(obj_req); 3305 int ret; 3306 3307 rbd_assert(!obj_req->pending.result && !obj_req->pending.num_pending); 3308 3309 /* 3310 * Only send non-zero copyup data to save some I/O and network 3311 * bandwidth -- zero copyup data is equivalent to the object not 3312 * existing. 3313 */ 3314 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ZEROS) 3315 bytes = 0; 3316 3317 if (obj_req->img_request->snapc->num_snaps && bytes > 0) { 3318 /* 3319 * Send a copyup request with an empty snapshot context to 3320 * deep-copyup the object through all existing snapshots. 3321 * A second request with the current snapshot context will be 3322 * sent for the actual modification. 3323 */ 3324 ret = rbd_obj_copyup_empty_snapc(obj_req, bytes); 3325 if (ret) { 3326 obj_req->pending.result = ret; 3327 return; 3328 } 3329 3330 obj_req->pending.num_pending++; 3331 bytes = MODS_ONLY; 3332 } 3333 3334 ret = rbd_obj_copyup_current_snapc(obj_req, bytes); 3335 if (ret) { 3336 obj_req->pending.result = ret; 3337 return; 3338 } 3339 3340 obj_req->pending.num_pending++; 3341 } 3342 3343 static bool rbd_obj_advance_copyup(struct rbd_obj_request *obj_req, int *result) 3344 { 3345 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3346 int ret; 3347 3348 again: 3349 switch (obj_req->copyup_state) { 3350 case RBD_OBJ_COPYUP_START: 3351 rbd_assert(!*result); 3352 3353 ret = rbd_obj_copyup_read_parent(obj_req); 3354 if (ret) { 3355 *result = ret; 3356 return true; 3357 } 3358 if (obj_req->num_img_extents) 3359 obj_req->copyup_state = RBD_OBJ_COPYUP_READ_PARENT; 3360 else 3361 obj_req->copyup_state = RBD_OBJ_COPYUP_WRITE_OBJECT; 3362 return false; 3363 case RBD_OBJ_COPYUP_READ_PARENT: 3364 if (*result) 3365 return true; 3366 3367 if (is_zero_bvecs(obj_req->copyup_bvecs, 3368 rbd_obj_img_extents_bytes(obj_req))) { 3369 dout("%s %p detected zeros\n", __func__, obj_req); 3370 obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ZEROS; 3371 } 3372 3373 rbd_obj_copyup_object_maps(obj_req); 3374 if (!obj_req->pending.num_pending) { 3375 *result = obj_req->pending.result; 3376 obj_req->copyup_state = RBD_OBJ_COPYUP_OBJECT_MAPS; 3377 goto again; 3378 } 3379 obj_req->copyup_state = __RBD_OBJ_COPYUP_OBJECT_MAPS; 3380 return false; 3381 case __RBD_OBJ_COPYUP_OBJECT_MAPS: 3382 if (!pending_result_dec(&obj_req->pending, result)) 3383 return false; 3384 /* fall through */ 3385 case RBD_OBJ_COPYUP_OBJECT_MAPS: 3386 if (*result) { 3387 rbd_warn(rbd_dev, "snap object map update failed: %d", 3388 *result); 3389 return true; 3390 } 3391 3392 rbd_obj_copyup_write_object(obj_req); 3393 if (!obj_req->pending.num_pending) { 3394 *result = obj_req->pending.result; 3395 obj_req->copyup_state = RBD_OBJ_COPYUP_WRITE_OBJECT; 3396 goto again; 3397 } 3398 obj_req->copyup_state = __RBD_OBJ_COPYUP_WRITE_OBJECT; 3399 return false; 3400 case __RBD_OBJ_COPYUP_WRITE_OBJECT: 3401 if (!pending_result_dec(&obj_req->pending, result)) 3402 return false; 3403 /* fall through */ 3404 case RBD_OBJ_COPYUP_WRITE_OBJECT: 3405 return true; 3406 default: 3407 BUG(); 3408 } 3409 } 3410 3411 /* 3412 * Return: 3413 * 0 - object map update sent 3414 * 1 - object map update isn't needed 3415 * <0 - error 3416 */ 3417 static int rbd_obj_write_post_object_map(struct rbd_obj_request *obj_req) 3418 { 3419 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3420 u8 current_state = OBJECT_PENDING; 3421 3422 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3423 return 1; 3424 3425 if (!(obj_req->flags & RBD_OBJ_FLAG_DELETION)) 3426 return 1; 3427 3428 return rbd_object_map_update(obj_req, CEPH_NOSNAP, OBJECT_NONEXISTENT, 3429 ¤t_state); 3430 } 3431 3432 static bool rbd_obj_advance_write(struct rbd_obj_request *obj_req, int *result) 3433 { 3434 struct rbd_device *rbd_dev = obj_req->img_request->rbd_dev; 3435 int ret; 3436 3437 again: 3438 switch (obj_req->write_state) { 3439 case RBD_OBJ_WRITE_START: 3440 rbd_assert(!*result); 3441 3442 if (rbd_obj_write_is_noop(obj_req)) 3443 return true; 3444 3445 ret = rbd_obj_write_pre_object_map(obj_req); 3446 if (ret < 0) { 3447 *result = ret; 3448 return true; 3449 } 3450 obj_req->write_state = RBD_OBJ_WRITE_PRE_OBJECT_MAP; 3451 if (ret > 0) 3452 goto again; 3453 return false; 3454 case RBD_OBJ_WRITE_PRE_OBJECT_MAP: 3455 if (*result) { 3456 rbd_warn(rbd_dev, "pre object map update failed: %d", 3457 *result); 3458 return true; 3459 } 3460 ret = rbd_obj_write_object(obj_req); 3461 if (ret) { 3462 *result = ret; 3463 return true; 3464 } 3465 obj_req->write_state = RBD_OBJ_WRITE_OBJECT; 3466 return false; 3467 case RBD_OBJ_WRITE_OBJECT: 3468 if (*result == -ENOENT) { 3469 if (obj_req->flags & RBD_OBJ_FLAG_COPYUP_ENABLED) { 3470 *result = 0; 3471 obj_req->copyup_state = RBD_OBJ_COPYUP_START; 3472 obj_req->write_state = __RBD_OBJ_WRITE_COPYUP; 3473 goto again; 3474 } 3475 /* 3476 * On a non-existent object: 3477 * delete - -ENOENT, truncate/zero - 0 3478 */ 3479 if (obj_req->flags & RBD_OBJ_FLAG_DELETION) 3480 *result = 0; 3481 } 3482 if (*result) 3483 return true; 3484 3485 obj_req->write_state = RBD_OBJ_WRITE_COPYUP; 3486 goto again; 3487 case __RBD_OBJ_WRITE_COPYUP: 3488 if (!rbd_obj_advance_copyup(obj_req, result)) 3489 return false; 3490 /* fall through */ 3491 case RBD_OBJ_WRITE_COPYUP: 3492 if (*result) { 3493 rbd_warn(rbd_dev, "copyup failed: %d", *result); 3494 return true; 3495 } 3496 ret = rbd_obj_write_post_object_map(obj_req); 3497 if (ret < 0) { 3498 *result = ret; 3499 return true; 3500 } 3501 obj_req->write_state = RBD_OBJ_WRITE_POST_OBJECT_MAP; 3502 if (ret > 0) 3503 goto again; 3504 return false; 3505 case RBD_OBJ_WRITE_POST_OBJECT_MAP: 3506 if (*result) 3507 rbd_warn(rbd_dev, "post object map update failed: %d", 3508 *result); 3509 return true; 3510 default: 3511 BUG(); 3512 } 3513 } 3514 3515 /* 3516 * Return true if @obj_req is completed. 3517 */ 3518 static bool __rbd_obj_handle_request(struct rbd_obj_request *obj_req, 3519 int *result) 3520 { 3521 struct rbd_img_request *img_req = obj_req->img_request; 3522 struct rbd_device *rbd_dev = img_req->rbd_dev; 3523 bool done; 3524 3525 mutex_lock(&obj_req->state_mutex); 3526 if (!rbd_img_is_write(img_req)) 3527 done = rbd_obj_advance_read(obj_req, result); 3528 else 3529 done = rbd_obj_advance_write(obj_req, result); 3530 mutex_unlock(&obj_req->state_mutex); 3531 3532 if (done && *result) { 3533 rbd_assert(*result < 0); 3534 rbd_warn(rbd_dev, "%s at objno %llu %llu~%llu result %d", 3535 obj_op_name(img_req->op_type), obj_req->ex.oe_objno, 3536 obj_req->ex.oe_off, obj_req->ex.oe_len, *result); 3537 } 3538 return done; 3539 } 3540 3541 /* 3542 * This is open-coded in rbd_img_handle_request() to avoid parent chain 3543 * recursion. 3544 */ 3545 static void rbd_obj_handle_request(struct rbd_obj_request *obj_req, int result) 3546 { 3547 if (__rbd_obj_handle_request(obj_req, &result)) 3548 rbd_img_handle_request(obj_req->img_request, result); 3549 } 3550 3551 static bool need_exclusive_lock(struct rbd_img_request *img_req) 3552 { 3553 struct rbd_device *rbd_dev = img_req->rbd_dev; 3554 3555 if (!(rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK)) 3556 return false; 3557 3558 if (rbd_dev->spec->snap_id != CEPH_NOSNAP) 3559 return false; 3560 3561 rbd_assert(!test_bit(IMG_REQ_CHILD, &img_req->flags)); 3562 if (rbd_dev->opts->lock_on_read || 3563 (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) 3564 return true; 3565 3566 return rbd_img_is_write(img_req); 3567 } 3568 3569 static bool rbd_lock_add_request(struct rbd_img_request *img_req) 3570 { 3571 struct rbd_device *rbd_dev = img_req->rbd_dev; 3572 bool locked; 3573 3574 lockdep_assert_held(&rbd_dev->lock_rwsem); 3575 locked = rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED; 3576 spin_lock(&rbd_dev->lock_lists_lock); 3577 rbd_assert(list_empty(&img_req->lock_item)); 3578 if (!locked) 3579 list_add_tail(&img_req->lock_item, &rbd_dev->acquiring_list); 3580 else 3581 list_add_tail(&img_req->lock_item, &rbd_dev->running_list); 3582 spin_unlock(&rbd_dev->lock_lists_lock); 3583 return locked; 3584 } 3585 3586 static void rbd_lock_del_request(struct rbd_img_request *img_req) 3587 { 3588 struct rbd_device *rbd_dev = img_req->rbd_dev; 3589 bool need_wakeup; 3590 3591 lockdep_assert_held(&rbd_dev->lock_rwsem); 3592 spin_lock(&rbd_dev->lock_lists_lock); 3593 rbd_assert(!list_empty(&img_req->lock_item)); 3594 list_del_init(&img_req->lock_item); 3595 need_wakeup = (rbd_dev->lock_state == RBD_LOCK_STATE_RELEASING && 3596 list_empty(&rbd_dev->running_list)); 3597 spin_unlock(&rbd_dev->lock_lists_lock); 3598 if (need_wakeup) 3599 complete(&rbd_dev->releasing_wait); 3600 } 3601 3602 static int rbd_img_exclusive_lock(struct rbd_img_request *img_req) 3603 { 3604 struct rbd_device *rbd_dev = img_req->rbd_dev; 3605 3606 if (!need_exclusive_lock(img_req)) 3607 return 1; 3608 3609 if (rbd_lock_add_request(img_req)) 3610 return 1; 3611 3612 if (rbd_dev->opts->exclusive) { 3613 WARN_ON(1); /* lock got released? */ 3614 return -EROFS; 3615 } 3616 3617 /* 3618 * Note the use of mod_delayed_work() in rbd_acquire_lock() 3619 * and cancel_delayed_work() in wake_lock_waiters(). 3620 */ 3621 dout("%s rbd_dev %p queueing lock_dwork\n", __func__, rbd_dev); 3622 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 3623 return 0; 3624 } 3625 3626 static void rbd_img_object_requests(struct rbd_img_request *img_req) 3627 { 3628 struct rbd_obj_request *obj_req; 3629 3630 rbd_assert(!img_req->pending.result && !img_req->pending.num_pending); 3631 3632 for_each_obj_request(img_req, obj_req) { 3633 int result = 0; 3634 3635 if (__rbd_obj_handle_request(obj_req, &result)) { 3636 if (result) { 3637 img_req->pending.result = result; 3638 return; 3639 } 3640 } else { 3641 img_req->pending.num_pending++; 3642 } 3643 } 3644 } 3645 3646 static bool rbd_img_advance(struct rbd_img_request *img_req, int *result) 3647 { 3648 struct rbd_device *rbd_dev = img_req->rbd_dev; 3649 int ret; 3650 3651 again: 3652 switch (img_req->state) { 3653 case RBD_IMG_START: 3654 rbd_assert(!*result); 3655 3656 ret = rbd_img_exclusive_lock(img_req); 3657 if (ret < 0) { 3658 *result = ret; 3659 return true; 3660 } 3661 img_req->state = RBD_IMG_EXCLUSIVE_LOCK; 3662 if (ret > 0) 3663 goto again; 3664 return false; 3665 case RBD_IMG_EXCLUSIVE_LOCK: 3666 if (*result) 3667 return true; 3668 3669 rbd_assert(!need_exclusive_lock(img_req) || 3670 __rbd_is_lock_owner(rbd_dev)); 3671 3672 rbd_img_object_requests(img_req); 3673 if (!img_req->pending.num_pending) { 3674 *result = img_req->pending.result; 3675 img_req->state = RBD_IMG_OBJECT_REQUESTS; 3676 goto again; 3677 } 3678 img_req->state = __RBD_IMG_OBJECT_REQUESTS; 3679 return false; 3680 case __RBD_IMG_OBJECT_REQUESTS: 3681 if (!pending_result_dec(&img_req->pending, result)) 3682 return false; 3683 /* fall through */ 3684 case RBD_IMG_OBJECT_REQUESTS: 3685 return true; 3686 default: 3687 BUG(); 3688 } 3689 } 3690 3691 /* 3692 * Return true if @img_req is completed. 3693 */ 3694 static bool __rbd_img_handle_request(struct rbd_img_request *img_req, 3695 int *result) 3696 { 3697 struct rbd_device *rbd_dev = img_req->rbd_dev; 3698 bool done; 3699 3700 if (need_exclusive_lock(img_req)) { 3701 down_read(&rbd_dev->lock_rwsem); 3702 mutex_lock(&img_req->state_mutex); 3703 done = rbd_img_advance(img_req, result); 3704 if (done) 3705 rbd_lock_del_request(img_req); 3706 mutex_unlock(&img_req->state_mutex); 3707 up_read(&rbd_dev->lock_rwsem); 3708 } else { 3709 mutex_lock(&img_req->state_mutex); 3710 done = rbd_img_advance(img_req, result); 3711 mutex_unlock(&img_req->state_mutex); 3712 } 3713 3714 if (done && *result) { 3715 rbd_assert(*result < 0); 3716 rbd_warn(rbd_dev, "%s%s result %d", 3717 test_bit(IMG_REQ_CHILD, &img_req->flags) ? "child " : "", 3718 obj_op_name(img_req->op_type), *result); 3719 } 3720 return done; 3721 } 3722 3723 static void rbd_img_handle_request(struct rbd_img_request *img_req, int result) 3724 { 3725 again: 3726 if (!__rbd_img_handle_request(img_req, &result)) 3727 return; 3728 3729 if (test_bit(IMG_REQ_CHILD, &img_req->flags)) { 3730 struct rbd_obj_request *obj_req = img_req->obj_request; 3731 3732 rbd_img_request_put(img_req); 3733 if (__rbd_obj_handle_request(obj_req, &result)) { 3734 img_req = obj_req->img_request; 3735 goto again; 3736 } 3737 } else { 3738 struct request *rq = img_req->rq; 3739 3740 rbd_img_request_put(img_req); 3741 blk_mq_end_request(rq, errno_to_blk_status(result)); 3742 } 3743 } 3744 3745 static const struct rbd_client_id rbd_empty_cid; 3746 3747 static bool rbd_cid_equal(const struct rbd_client_id *lhs, 3748 const struct rbd_client_id *rhs) 3749 { 3750 return lhs->gid == rhs->gid && lhs->handle == rhs->handle; 3751 } 3752 3753 static struct rbd_client_id rbd_get_cid(struct rbd_device *rbd_dev) 3754 { 3755 struct rbd_client_id cid; 3756 3757 mutex_lock(&rbd_dev->watch_mutex); 3758 cid.gid = ceph_client_gid(rbd_dev->rbd_client->client); 3759 cid.handle = rbd_dev->watch_cookie; 3760 mutex_unlock(&rbd_dev->watch_mutex); 3761 return cid; 3762 } 3763 3764 /* 3765 * lock_rwsem must be held for write 3766 */ 3767 static void rbd_set_owner_cid(struct rbd_device *rbd_dev, 3768 const struct rbd_client_id *cid) 3769 { 3770 dout("%s rbd_dev %p %llu-%llu -> %llu-%llu\n", __func__, rbd_dev, 3771 rbd_dev->owner_cid.gid, rbd_dev->owner_cid.handle, 3772 cid->gid, cid->handle); 3773 rbd_dev->owner_cid = *cid; /* struct */ 3774 } 3775 3776 static void format_lock_cookie(struct rbd_device *rbd_dev, char *buf) 3777 { 3778 mutex_lock(&rbd_dev->watch_mutex); 3779 sprintf(buf, "%s %llu", RBD_LOCK_COOKIE_PREFIX, rbd_dev->watch_cookie); 3780 mutex_unlock(&rbd_dev->watch_mutex); 3781 } 3782 3783 static void __rbd_lock(struct rbd_device *rbd_dev, const char *cookie) 3784 { 3785 struct rbd_client_id cid = rbd_get_cid(rbd_dev); 3786 3787 rbd_dev->lock_state = RBD_LOCK_STATE_LOCKED; 3788 strcpy(rbd_dev->lock_cookie, cookie); 3789 rbd_set_owner_cid(rbd_dev, &cid); 3790 queue_work(rbd_dev->task_wq, &rbd_dev->acquired_lock_work); 3791 } 3792 3793 /* 3794 * lock_rwsem must be held for write 3795 */ 3796 static int rbd_lock(struct rbd_device *rbd_dev) 3797 { 3798 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3799 char cookie[32]; 3800 int ret; 3801 3802 WARN_ON(__rbd_is_lock_owner(rbd_dev) || 3803 rbd_dev->lock_cookie[0] != '\0'); 3804 3805 format_lock_cookie(rbd_dev, cookie); 3806 ret = ceph_cls_lock(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 3807 RBD_LOCK_NAME, CEPH_CLS_LOCK_EXCLUSIVE, cookie, 3808 RBD_LOCK_TAG, "", 0); 3809 if (ret) 3810 return ret; 3811 3812 __rbd_lock(rbd_dev, cookie); 3813 return 0; 3814 } 3815 3816 /* 3817 * lock_rwsem must be held for write 3818 */ 3819 static void rbd_unlock(struct rbd_device *rbd_dev) 3820 { 3821 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3822 int ret; 3823 3824 WARN_ON(!__rbd_is_lock_owner(rbd_dev) || 3825 rbd_dev->lock_cookie[0] == '\0'); 3826 3827 ret = ceph_cls_unlock(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 3828 RBD_LOCK_NAME, rbd_dev->lock_cookie); 3829 if (ret && ret != -ENOENT) 3830 rbd_warn(rbd_dev, "failed to unlock header: %d", ret); 3831 3832 /* treat errors as the image is unlocked */ 3833 rbd_dev->lock_state = RBD_LOCK_STATE_UNLOCKED; 3834 rbd_dev->lock_cookie[0] = '\0'; 3835 rbd_set_owner_cid(rbd_dev, &rbd_empty_cid); 3836 queue_work(rbd_dev->task_wq, &rbd_dev->released_lock_work); 3837 } 3838 3839 static int __rbd_notify_op_lock(struct rbd_device *rbd_dev, 3840 enum rbd_notify_op notify_op, 3841 struct page ***preply_pages, 3842 size_t *preply_len) 3843 { 3844 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3845 struct rbd_client_id cid = rbd_get_cid(rbd_dev); 3846 char buf[4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN]; 3847 int buf_size = sizeof(buf); 3848 void *p = buf; 3849 3850 dout("%s rbd_dev %p notify_op %d\n", __func__, rbd_dev, notify_op); 3851 3852 /* encode *LockPayload NotifyMessage (op + ClientId) */ 3853 ceph_start_encoding(&p, 2, 1, buf_size - CEPH_ENCODING_START_BLK_LEN); 3854 ceph_encode_32(&p, notify_op); 3855 ceph_encode_64(&p, cid.gid); 3856 ceph_encode_64(&p, cid.handle); 3857 3858 return ceph_osdc_notify(osdc, &rbd_dev->header_oid, 3859 &rbd_dev->header_oloc, buf, buf_size, 3860 RBD_NOTIFY_TIMEOUT, preply_pages, preply_len); 3861 } 3862 3863 static void rbd_notify_op_lock(struct rbd_device *rbd_dev, 3864 enum rbd_notify_op notify_op) 3865 { 3866 struct page **reply_pages; 3867 size_t reply_len; 3868 3869 __rbd_notify_op_lock(rbd_dev, notify_op, &reply_pages, &reply_len); 3870 ceph_release_page_vector(reply_pages, calc_pages_for(0, reply_len)); 3871 } 3872 3873 static void rbd_notify_acquired_lock(struct work_struct *work) 3874 { 3875 struct rbd_device *rbd_dev = container_of(work, struct rbd_device, 3876 acquired_lock_work); 3877 3878 rbd_notify_op_lock(rbd_dev, RBD_NOTIFY_OP_ACQUIRED_LOCK); 3879 } 3880 3881 static void rbd_notify_released_lock(struct work_struct *work) 3882 { 3883 struct rbd_device *rbd_dev = container_of(work, struct rbd_device, 3884 released_lock_work); 3885 3886 rbd_notify_op_lock(rbd_dev, RBD_NOTIFY_OP_RELEASED_LOCK); 3887 } 3888 3889 static int rbd_request_lock(struct rbd_device *rbd_dev) 3890 { 3891 struct page **reply_pages; 3892 size_t reply_len; 3893 bool lock_owner_responded = false; 3894 int ret; 3895 3896 dout("%s rbd_dev %p\n", __func__, rbd_dev); 3897 3898 ret = __rbd_notify_op_lock(rbd_dev, RBD_NOTIFY_OP_REQUEST_LOCK, 3899 &reply_pages, &reply_len); 3900 if (ret && ret != -ETIMEDOUT) { 3901 rbd_warn(rbd_dev, "failed to request lock: %d", ret); 3902 goto out; 3903 } 3904 3905 if (reply_len > 0 && reply_len <= PAGE_SIZE) { 3906 void *p = page_address(reply_pages[0]); 3907 void *const end = p + reply_len; 3908 u32 n; 3909 3910 ceph_decode_32_safe(&p, end, n, e_inval); /* num_acks */ 3911 while (n--) { 3912 u8 struct_v; 3913 u32 len; 3914 3915 ceph_decode_need(&p, end, 8 + 8, e_inval); 3916 p += 8 + 8; /* skip gid and cookie */ 3917 3918 ceph_decode_32_safe(&p, end, len, e_inval); 3919 if (!len) 3920 continue; 3921 3922 if (lock_owner_responded) { 3923 rbd_warn(rbd_dev, 3924 "duplicate lock owners detected"); 3925 ret = -EIO; 3926 goto out; 3927 } 3928 3929 lock_owner_responded = true; 3930 ret = ceph_start_decoding(&p, end, 1, "ResponseMessage", 3931 &struct_v, &len); 3932 if (ret) { 3933 rbd_warn(rbd_dev, 3934 "failed to decode ResponseMessage: %d", 3935 ret); 3936 goto e_inval; 3937 } 3938 3939 ret = ceph_decode_32(&p); 3940 } 3941 } 3942 3943 if (!lock_owner_responded) { 3944 rbd_warn(rbd_dev, "no lock owners detected"); 3945 ret = -ETIMEDOUT; 3946 } 3947 3948 out: 3949 ceph_release_page_vector(reply_pages, calc_pages_for(0, reply_len)); 3950 return ret; 3951 3952 e_inval: 3953 ret = -EINVAL; 3954 goto out; 3955 } 3956 3957 /* 3958 * Either image request state machine(s) or rbd_add_acquire_lock() 3959 * (i.e. "rbd map"). 3960 */ 3961 static void wake_lock_waiters(struct rbd_device *rbd_dev, int result) 3962 { 3963 struct rbd_img_request *img_req; 3964 3965 dout("%s rbd_dev %p result %d\n", __func__, rbd_dev, result); 3966 lockdep_assert_held_write(&rbd_dev->lock_rwsem); 3967 3968 cancel_delayed_work(&rbd_dev->lock_dwork); 3969 if (!completion_done(&rbd_dev->acquire_wait)) { 3970 rbd_assert(list_empty(&rbd_dev->acquiring_list) && 3971 list_empty(&rbd_dev->running_list)); 3972 rbd_dev->acquire_err = result; 3973 complete_all(&rbd_dev->acquire_wait); 3974 return; 3975 } 3976 3977 list_for_each_entry(img_req, &rbd_dev->acquiring_list, lock_item) { 3978 mutex_lock(&img_req->state_mutex); 3979 rbd_assert(img_req->state == RBD_IMG_EXCLUSIVE_LOCK); 3980 rbd_img_schedule(img_req, result); 3981 mutex_unlock(&img_req->state_mutex); 3982 } 3983 3984 list_splice_tail_init(&rbd_dev->acquiring_list, &rbd_dev->running_list); 3985 } 3986 3987 static int get_lock_owner_info(struct rbd_device *rbd_dev, 3988 struct ceph_locker **lockers, u32 *num_lockers) 3989 { 3990 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 3991 u8 lock_type; 3992 char *lock_tag; 3993 int ret; 3994 3995 dout("%s rbd_dev %p\n", __func__, rbd_dev); 3996 3997 ret = ceph_cls_lock_info(osdc, &rbd_dev->header_oid, 3998 &rbd_dev->header_oloc, RBD_LOCK_NAME, 3999 &lock_type, &lock_tag, lockers, num_lockers); 4000 if (ret) 4001 return ret; 4002 4003 if (*num_lockers == 0) { 4004 dout("%s rbd_dev %p no lockers detected\n", __func__, rbd_dev); 4005 goto out; 4006 } 4007 4008 if (strcmp(lock_tag, RBD_LOCK_TAG)) { 4009 rbd_warn(rbd_dev, "locked by external mechanism, tag %s", 4010 lock_tag); 4011 ret = -EBUSY; 4012 goto out; 4013 } 4014 4015 if (lock_type == CEPH_CLS_LOCK_SHARED) { 4016 rbd_warn(rbd_dev, "shared lock type detected"); 4017 ret = -EBUSY; 4018 goto out; 4019 } 4020 4021 if (strncmp((*lockers)[0].id.cookie, RBD_LOCK_COOKIE_PREFIX, 4022 strlen(RBD_LOCK_COOKIE_PREFIX))) { 4023 rbd_warn(rbd_dev, "locked by external mechanism, cookie %s", 4024 (*lockers)[0].id.cookie); 4025 ret = -EBUSY; 4026 goto out; 4027 } 4028 4029 out: 4030 kfree(lock_tag); 4031 return ret; 4032 } 4033 4034 static int find_watcher(struct rbd_device *rbd_dev, 4035 const struct ceph_locker *locker) 4036 { 4037 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4038 struct ceph_watch_item *watchers; 4039 u32 num_watchers; 4040 u64 cookie; 4041 int i; 4042 int ret; 4043 4044 ret = ceph_osdc_list_watchers(osdc, &rbd_dev->header_oid, 4045 &rbd_dev->header_oloc, &watchers, 4046 &num_watchers); 4047 if (ret) 4048 return ret; 4049 4050 sscanf(locker->id.cookie, RBD_LOCK_COOKIE_PREFIX " %llu", &cookie); 4051 for (i = 0; i < num_watchers; i++) { 4052 if (!memcmp(&watchers[i].addr, &locker->info.addr, 4053 sizeof(locker->info.addr)) && 4054 watchers[i].cookie == cookie) { 4055 struct rbd_client_id cid = { 4056 .gid = le64_to_cpu(watchers[i].name.num), 4057 .handle = cookie, 4058 }; 4059 4060 dout("%s rbd_dev %p found cid %llu-%llu\n", __func__, 4061 rbd_dev, cid.gid, cid.handle); 4062 rbd_set_owner_cid(rbd_dev, &cid); 4063 ret = 1; 4064 goto out; 4065 } 4066 } 4067 4068 dout("%s rbd_dev %p no watchers\n", __func__, rbd_dev); 4069 ret = 0; 4070 out: 4071 kfree(watchers); 4072 return ret; 4073 } 4074 4075 /* 4076 * lock_rwsem must be held for write 4077 */ 4078 static int rbd_try_lock(struct rbd_device *rbd_dev) 4079 { 4080 struct ceph_client *client = rbd_dev->rbd_client->client; 4081 struct ceph_locker *lockers; 4082 u32 num_lockers; 4083 int ret; 4084 4085 for (;;) { 4086 ret = rbd_lock(rbd_dev); 4087 if (ret != -EBUSY) 4088 return ret; 4089 4090 /* determine if the current lock holder is still alive */ 4091 ret = get_lock_owner_info(rbd_dev, &lockers, &num_lockers); 4092 if (ret) 4093 return ret; 4094 4095 if (num_lockers == 0) 4096 goto again; 4097 4098 ret = find_watcher(rbd_dev, lockers); 4099 if (ret) 4100 goto out; /* request lock or error */ 4101 4102 rbd_warn(rbd_dev, "breaking header lock owned by %s%llu", 4103 ENTITY_NAME(lockers[0].id.name)); 4104 4105 ret = ceph_monc_blacklist_add(&client->monc, 4106 &lockers[0].info.addr); 4107 if (ret) { 4108 rbd_warn(rbd_dev, "blacklist of %s%llu failed: %d", 4109 ENTITY_NAME(lockers[0].id.name), ret); 4110 goto out; 4111 } 4112 4113 ret = ceph_cls_break_lock(&client->osdc, &rbd_dev->header_oid, 4114 &rbd_dev->header_oloc, RBD_LOCK_NAME, 4115 lockers[0].id.cookie, 4116 &lockers[0].id.name); 4117 if (ret && ret != -ENOENT) 4118 goto out; 4119 4120 again: 4121 ceph_free_lockers(lockers, num_lockers); 4122 } 4123 4124 out: 4125 ceph_free_lockers(lockers, num_lockers); 4126 return ret; 4127 } 4128 4129 static int rbd_post_acquire_action(struct rbd_device *rbd_dev) 4130 { 4131 int ret; 4132 4133 if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) { 4134 ret = rbd_object_map_open(rbd_dev); 4135 if (ret) 4136 return ret; 4137 } 4138 4139 return 0; 4140 } 4141 4142 /* 4143 * Return: 4144 * 0 - lock acquired 4145 * 1 - caller should call rbd_request_lock() 4146 * <0 - error 4147 */ 4148 static int rbd_try_acquire_lock(struct rbd_device *rbd_dev) 4149 { 4150 int ret; 4151 4152 down_read(&rbd_dev->lock_rwsem); 4153 dout("%s rbd_dev %p read lock_state %d\n", __func__, rbd_dev, 4154 rbd_dev->lock_state); 4155 if (__rbd_is_lock_owner(rbd_dev)) { 4156 up_read(&rbd_dev->lock_rwsem); 4157 return 0; 4158 } 4159 4160 up_read(&rbd_dev->lock_rwsem); 4161 down_write(&rbd_dev->lock_rwsem); 4162 dout("%s rbd_dev %p write lock_state %d\n", __func__, rbd_dev, 4163 rbd_dev->lock_state); 4164 if (__rbd_is_lock_owner(rbd_dev)) { 4165 up_write(&rbd_dev->lock_rwsem); 4166 return 0; 4167 } 4168 4169 ret = rbd_try_lock(rbd_dev); 4170 if (ret < 0) { 4171 rbd_warn(rbd_dev, "failed to lock header: %d", ret); 4172 if (ret == -EBLACKLISTED) 4173 goto out; 4174 4175 ret = 1; /* request lock anyway */ 4176 } 4177 if (ret > 0) { 4178 up_write(&rbd_dev->lock_rwsem); 4179 return ret; 4180 } 4181 4182 rbd_assert(rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED); 4183 rbd_assert(list_empty(&rbd_dev->running_list)); 4184 4185 ret = rbd_post_acquire_action(rbd_dev); 4186 if (ret) { 4187 rbd_warn(rbd_dev, "post-acquire action failed: %d", ret); 4188 /* 4189 * Can't stay in RBD_LOCK_STATE_LOCKED because 4190 * rbd_lock_add_request() would let the request through, 4191 * assuming that e.g. object map is locked and loaded. 4192 */ 4193 rbd_unlock(rbd_dev); 4194 } 4195 4196 out: 4197 wake_lock_waiters(rbd_dev, ret); 4198 up_write(&rbd_dev->lock_rwsem); 4199 return ret; 4200 } 4201 4202 static void rbd_acquire_lock(struct work_struct *work) 4203 { 4204 struct rbd_device *rbd_dev = container_of(to_delayed_work(work), 4205 struct rbd_device, lock_dwork); 4206 int ret; 4207 4208 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4209 again: 4210 ret = rbd_try_acquire_lock(rbd_dev); 4211 if (ret <= 0) { 4212 dout("%s rbd_dev %p ret %d - done\n", __func__, rbd_dev, ret); 4213 return; 4214 } 4215 4216 ret = rbd_request_lock(rbd_dev); 4217 if (ret == -ETIMEDOUT) { 4218 goto again; /* treat this as a dead client */ 4219 } else if (ret == -EROFS) { 4220 rbd_warn(rbd_dev, "peer will not release lock"); 4221 down_write(&rbd_dev->lock_rwsem); 4222 wake_lock_waiters(rbd_dev, ret); 4223 up_write(&rbd_dev->lock_rwsem); 4224 } else if (ret < 0) { 4225 rbd_warn(rbd_dev, "error requesting lock: %d", ret); 4226 mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 4227 RBD_RETRY_DELAY); 4228 } else { 4229 /* 4230 * lock owner acked, but resend if we don't see them 4231 * release the lock 4232 */ 4233 dout("%s rbd_dev %p requeueing lock_dwork\n", __func__, 4234 rbd_dev); 4235 mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 4236 msecs_to_jiffies(2 * RBD_NOTIFY_TIMEOUT * MSEC_PER_SEC)); 4237 } 4238 } 4239 4240 static bool rbd_quiesce_lock(struct rbd_device *rbd_dev) 4241 { 4242 bool need_wait; 4243 4244 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4245 lockdep_assert_held_write(&rbd_dev->lock_rwsem); 4246 4247 if (rbd_dev->lock_state != RBD_LOCK_STATE_LOCKED) 4248 return false; 4249 4250 /* 4251 * Ensure that all in-flight IO is flushed. 4252 */ 4253 rbd_dev->lock_state = RBD_LOCK_STATE_RELEASING; 4254 rbd_assert(!completion_done(&rbd_dev->releasing_wait)); 4255 need_wait = !list_empty(&rbd_dev->running_list); 4256 downgrade_write(&rbd_dev->lock_rwsem); 4257 if (need_wait) 4258 wait_for_completion(&rbd_dev->releasing_wait); 4259 up_read(&rbd_dev->lock_rwsem); 4260 4261 down_write(&rbd_dev->lock_rwsem); 4262 if (rbd_dev->lock_state != RBD_LOCK_STATE_RELEASING) 4263 return false; 4264 4265 rbd_assert(list_empty(&rbd_dev->running_list)); 4266 return true; 4267 } 4268 4269 static void rbd_pre_release_action(struct rbd_device *rbd_dev) 4270 { 4271 if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) 4272 rbd_object_map_close(rbd_dev); 4273 } 4274 4275 static void __rbd_release_lock(struct rbd_device *rbd_dev) 4276 { 4277 rbd_assert(list_empty(&rbd_dev->running_list)); 4278 4279 rbd_pre_release_action(rbd_dev); 4280 rbd_unlock(rbd_dev); 4281 } 4282 4283 /* 4284 * lock_rwsem must be held for write 4285 */ 4286 static void rbd_release_lock(struct rbd_device *rbd_dev) 4287 { 4288 if (!rbd_quiesce_lock(rbd_dev)) 4289 return; 4290 4291 __rbd_release_lock(rbd_dev); 4292 4293 /* 4294 * Give others a chance to grab the lock - we would re-acquire 4295 * almost immediately if we got new IO while draining the running 4296 * list otherwise. We need to ack our own notifications, so this 4297 * lock_dwork will be requeued from rbd_handle_released_lock() by 4298 * way of maybe_kick_acquire(). 4299 */ 4300 cancel_delayed_work(&rbd_dev->lock_dwork); 4301 } 4302 4303 static void rbd_release_lock_work(struct work_struct *work) 4304 { 4305 struct rbd_device *rbd_dev = container_of(work, struct rbd_device, 4306 unlock_work); 4307 4308 down_write(&rbd_dev->lock_rwsem); 4309 rbd_release_lock(rbd_dev); 4310 up_write(&rbd_dev->lock_rwsem); 4311 } 4312 4313 static void maybe_kick_acquire(struct rbd_device *rbd_dev) 4314 { 4315 bool have_requests; 4316 4317 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4318 if (__rbd_is_lock_owner(rbd_dev)) 4319 return; 4320 4321 spin_lock(&rbd_dev->lock_lists_lock); 4322 have_requests = !list_empty(&rbd_dev->acquiring_list); 4323 spin_unlock(&rbd_dev->lock_lists_lock); 4324 if (have_requests || delayed_work_pending(&rbd_dev->lock_dwork)) { 4325 dout("%s rbd_dev %p kicking lock_dwork\n", __func__, rbd_dev); 4326 mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 4327 } 4328 } 4329 4330 static void rbd_handle_acquired_lock(struct rbd_device *rbd_dev, u8 struct_v, 4331 void **p) 4332 { 4333 struct rbd_client_id cid = { 0 }; 4334 4335 if (struct_v >= 2) { 4336 cid.gid = ceph_decode_64(p); 4337 cid.handle = ceph_decode_64(p); 4338 } 4339 4340 dout("%s rbd_dev %p cid %llu-%llu\n", __func__, rbd_dev, cid.gid, 4341 cid.handle); 4342 if (!rbd_cid_equal(&cid, &rbd_empty_cid)) { 4343 down_write(&rbd_dev->lock_rwsem); 4344 if (rbd_cid_equal(&cid, &rbd_dev->owner_cid)) { 4345 /* 4346 * we already know that the remote client is 4347 * the owner 4348 */ 4349 up_write(&rbd_dev->lock_rwsem); 4350 return; 4351 } 4352 4353 rbd_set_owner_cid(rbd_dev, &cid); 4354 downgrade_write(&rbd_dev->lock_rwsem); 4355 } else { 4356 down_read(&rbd_dev->lock_rwsem); 4357 } 4358 4359 maybe_kick_acquire(rbd_dev); 4360 up_read(&rbd_dev->lock_rwsem); 4361 } 4362 4363 static void rbd_handle_released_lock(struct rbd_device *rbd_dev, u8 struct_v, 4364 void **p) 4365 { 4366 struct rbd_client_id cid = { 0 }; 4367 4368 if (struct_v >= 2) { 4369 cid.gid = ceph_decode_64(p); 4370 cid.handle = ceph_decode_64(p); 4371 } 4372 4373 dout("%s rbd_dev %p cid %llu-%llu\n", __func__, rbd_dev, cid.gid, 4374 cid.handle); 4375 if (!rbd_cid_equal(&cid, &rbd_empty_cid)) { 4376 down_write(&rbd_dev->lock_rwsem); 4377 if (!rbd_cid_equal(&cid, &rbd_dev->owner_cid)) { 4378 dout("%s rbd_dev %p unexpected owner, cid %llu-%llu != owner_cid %llu-%llu\n", 4379 __func__, rbd_dev, cid.gid, cid.handle, 4380 rbd_dev->owner_cid.gid, rbd_dev->owner_cid.handle); 4381 up_write(&rbd_dev->lock_rwsem); 4382 return; 4383 } 4384 4385 rbd_set_owner_cid(rbd_dev, &rbd_empty_cid); 4386 downgrade_write(&rbd_dev->lock_rwsem); 4387 } else { 4388 down_read(&rbd_dev->lock_rwsem); 4389 } 4390 4391 maybe_kick_acquire(rbd_dev); 4392 up_read(&rbd_dev->lock_rwsem); 4393 } 4394 4395 /* 4396 * Returns result for ResponseMessage to be encoded (<= 0), or 1 if no 4397 * ResponseMessage is needed. 4398 */ 4399 static int rbd_handle_request_lock(struct rbd_device *rbd_dev, u8 struct_v, 4400 void **p) 4401 { 4402 struct rbd_client_id my_cid = rbd_get_cid(rbd_dev); 4403 struct rbd_client_id cid = { 0 }; 4404 int result = 1; 4405 4406 if (struct_v >= 2) { 4407 cid.gid = ceph_decode_64(p); 4408 cid.handle = ceph_decode_64(p); 4409 } 4410 4411 dout("%s rbd_dev %p cid %llu-%llu\n", __func__, rbd_dev, cid.gid, 4412 cid.handle); 4413 if (rbd_cid_equal(&cid, &my_cid)) 4414 return result; 4415 4416 down_read(&rbd_dev->lock_rwsem); 4417 if (__rbd_is_lock_owner(rbd_dev)) { 4418 if (rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED && 4419 rbd_cid_equal(&rbd_dev->owner_cid, &rbd_empty_cid)) 4420 goto out_unlock; 4421 4422 /* 4423 * encode ResponseMessage(0) so the peer can detect 4424 * a missing owner 4425 */ 4426 result = 0; 4427 4428 if (rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED) { 4429 if (!rbd_dev->opts->exclusive) { 4430 dout("%s rbd_dev %p queueing unlock_work\n", 4431 __func__, rbd_dev); 4432 queue_work(rbd_dev->task_wq, 4433 &rbd_dev->unlock_work); 4434 } else { 4435 /* refuse to release the lock */ 4436 result = -EROFS; 4437 } 4438 } 4439 } 4440 4441 out_unlock: 4442 up_read(&rbd_dev->lock_rwsem); 4443 return result; 4444 } 4445 4446 static void __rbd_acknowledge_notify(struct rbd_device *rbd_dev, 4447 u64 notify_id, u64 cookie, s32 *result) 4448 { 4449 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4450 char buf[4 + CEPH_ENCODING_START_BLK_LEN]; 4451 int buf_size = sizeof(buf); 4452 int ret; 4453 4454 if (result) { 4455 void *p = buf; 4456 4457 /* encode ResponseMessage */ 4458 ceph_start_encoding(&p, 1, 1, 4459 buf_size - CEPH_ENCODING_START_BLK_LEN); 4460 ceph_encode_32(&p, *result); 4461 } else { 4462 buf_size = 0; 4463 } 4464 4465 ret = ceph_osdc_notify_ack(osdc, &rbd_dev->header_oid, 4466 &rbd_dev->header_oloc, notify_id, cookie, 4467 buf, buf_size); 4468 if (ret) 4469 rbd_warn(rbd_dev, "acknowledge_notify failed: %d", ret); 4470 } 4471 4472 static void rbd_acknowledge_notify(struct rbd_device *rbd_dev, u64 notify_id, 4473 u64 cookie) 4474 { 4475 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4476 __rbd_acknowledge_notify(rbd_dev, notify_id, cookie, NULL); 4477 } 4478 4479 static void rbd_acknowledge_notify_result(struct rbd_device *rbd_dev, 4480 u64 notify_id, u64 cookie, s32 result) 4481 { 4482 dout("%s rbd_dev %p result %d\n", __func__, rbd_dev, result); 4483 __rbd_acknowledge_notify(rbd_dev, notify_id, cookie, &result); 4484 } 4485 4486 static void rbd_watch_cb(void *arg, u64 notify_id, u64 cookie, 4487 u64 notifier_id, void *data, size_t data_len) 4488 { 4489 struct rbd_device *rbd_dev = arg; 4490 void *p = data; 4491 void *const end = p + data_len; 4492 u8 struct_v = 0; 4493 u32 len; 4494 u32 notify_op; 4495 int ret; 4496 4497 dout("%s rbd_dev %p cookie %llu notify_id %llu data_len %zu\n", 4498 __func__, rbd_dev, cookie, notify_id, data_len); 4499 if (data_len) { 4500 ret = ceph_start_decoding(&p, end, 1, "NotifyMessage", 4501 &struct_v, &len); 4502 if (ret) { 4503 rbd_warn(rbd_dev, "failed to decode NotifyMessage: %d", 4504 ret); 4505 return; 4506 } 4507 4508 notify_op = ceph_decode_32(&p); 4509 } else { 4510 /* legacy notification for header updates */ 4511 notify_op = RBD_NOTIFY_OP_HEADER_UPDATE; 4512 len = 0; 4513 } 4514 4515 dout("%s rbd_dev %p notify_op %u\n", __func__, rbd_dev, notify_op); 4516 switch (notify_op) { 4517 case RBD_NOTIFY_OP_ACQUIRED_LOCK: 4518 rbd_handle_acquired_lock(rbd_dev, struct_v, &p); 4519 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4520 break; 4521 case RBD_NOTIFY_OP_RELEASED_LOCK: 4522 rbd_handle_released_lock(rbd_dev, struct_v, &p); 4523 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4524 break; 4525 case RBD_NOTIFY_OP_REQUEST_LOCK: 4526 ret = rbd_handle_request_lock(rbd_dev, struct_v, &p); 4527 if (ret <= 0) 4528 rbd_acknowledge_notify_result(rbd_dev, notify_id, 4529 cookie, ret); 4530 else 4531 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4532 break; 4533 case RBD_NOTIFY_OP_HEADER_UPDATE: 4534 ret = rbd_dev_refresh(rbd_dev); 4535 if (ret) 4536 rbd_warn(rbd_dev, "refresh failed: %d", ret); 4537 4538 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4539 break; 4540 default: 4541 if (rbd_is_lock_owner(rbd_dev)) 4542 rbd_acknowledge_notify_result(rbd_dev, notify_id, 4543 cookie, -EOPNOTSUPP); 4544 else 4545 rbd_acknowledge_notify(rbd_dev, notify_id, cookie); 4546 break; 4547 } 4548 } 4549 4550 static void __rbd_unregister_watch(struct rbd_device *rbd_dev); 4551 4552 static void rbd_watch_errcb(void *arg, u64 cookie, int err) 4553 { 4554 struct rbd_device *rbd_dev = arg; 4555 4556 rbd_warn(rbd_dev, "encountered watch error: %d", err); 4557 4558 down_write(&rbd_dev->lock_rwsem); 4559 rbd_set_owner_cid(rbd_dev, &rbd_empty_cid); 4560 up_write(&rbd_dev->lock_rwsem); 4561 4562 mutex_lock(&rbd_dev->watch_mutex); 4563 if (rbd_dev->watch_state == RBD_WATCH_STATE_REGISTERED) { 4564 __rbd_unregister_watch(rbd_dev); 4565 rbd_dev->watch_state = RBD_WATCH_STATE_ERROR; 4566 4567 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->watch_dwork, 0); 4568 } 4569 mutex_unlock(&rbd_dev->watch_mutex); 4570 } 4571 4572 /* 4573 * watch_mutex must be locked 4574 */ 4575 static int __rbd_register_watch(struct rbd_device *rbd_dev) 4576 { 4577 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4578 struct ceph_osd_linger_request *handle; 4579 4580 rbd_assert(!rbd_dev->watch_handle); 4581 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4582 4583 handle = ceph_osdc_watch(osdc, &rbd_dev->header_oid, 4584 &rbd_dev->header_oloc, rbd_watch_cb, 4585 rbd_watch_errcb, rbd_dev); 4586 if (IS_ERR(handle)) 4587 return PTR_ERR(handle); 4588 4589 rbd_dev->watch_handle = handle; 4590 return 0; 4591 } 4592 4593 /* 4594 * watch_mutex must be locked 4595 */ 4596 static void __rbd_unregister_watch(struct rbd_device *rbd_dev) 4597 { 4598 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4599 int ret; 4600 4601 rbd_assert(rbd_dev->watch_handle); 4602 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4603 4604 ret = ceph_osdc_unwatch(osdc, rbd_dev->watch_handle); 4605 if (ret) 4606 rbd_warn(rbd_dev, "failed to unwatch: %d", ret); 4607 4608 rbd_dev->watch_handle = NULL; 4609 } 4610 4611 static int rbd_register_watch(struct rbd_device *rbd_dev) 4612 { 4613 int ret; 4614 4615 mutex_lock(&rbd_dev->watch_mutex); 4616 rbd_assert(rbd_dev->watch_state == RBD_WATCH_STATE_UNREGISTERED); 4617 ret = __rbd_register_watch(rbd_dev); 4618 if (ret) 4619 goto out; 4620 4621 rbd_dev->watch_state = RBD_WATCH_STATE_REGISTERED; 4622 rbd_dev->watch_cookie = rbd_dev->watch_handle->linger_id; 4623 4624 out: 4625 mutex_unlock(&rbd_dev->watch_mutex); 4626 return ret; 4627 } 4628 4629 static void cancel_tasks_sync(struct rbd_device *rbd_dev) 4630 { 4631 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4632 4633 cancel_work_sync(&rbd_dev->acquired_lock_work); 4634 cancel_work_sync(&rbd_dev->released_lock_work); 4635 cancel_delayed_work_sync(&rbd_dev->lock_dwork); 4636 cancel_work_sync(&rbd_dev->unlock_work); 4637 } 4638 4639 static void rbd_unregister_watch(struct rbd_device *rbd_dev) 4640 { 4641 cancel_tasks_sync(rbd_dev); 4642 4643 mutex_lock(&rbd_dev->watch_mutex); 4644 if (rbd_dev->watch_state == RBD_WATCH_STATE_REGISTERED) 4645 __rbd_unregister_watch(rbd_dev); 4646 rbd_dev->watch_state = RBD_WATCH_STATE_UNREGISTERED; 4647 mutex_unlock(&rbd_dev->watch_mutex); 4648 4649 cancel_delayed_work_sync(&rbd_dev->watch_dwork); 4650 ceph_osdc_flush_notifies(&rbd_dev->rbd_client->client->osdc); 4651 } 4652 4653 /* 4654 * lock_rwsem must be held for write 4655 */ 4656 static void rbd_reacquire_lock(struct rbd_device *rbd_dev) 4657 { 4658 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4659 char cookie[32]; 4660 int ret; 4661 4662 if (!rbd_quiesce_lock(rbd_dev)) 4663 return; 4664 4665 format_lock_cookie(rbd_dev, cookie); 4666 ret = ceph_cls_set_cookie(osdc, &rbd_dev->header_oid, 4667 &rbd_dev->header_oloc, RBD_LOCK_NAME, 4668 CEPH_CLS_LOCK_EXCLUSIVE, rbd_dev->lock_cookie, 4669 RBD_LOCK_TAG, cookie); 4670 if (ret) { 4671 if (ret != -EOPNOTSUPP) 4672 rbd_warn(rbd_dev, "failed to update lock cookie: %d", 4673 ret); 4674 4675 /* 4676 * Lock cookie cannot be updated on older OSDs, so do 4677 * a manual release and queue an acquire. 4678 */ 4679 __rbd_release_lock(rbd_dev); 4680 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 4681 } else { 4682 __rbd_lock(rbd_dev, cookie); 4683 wake_lock_waiters(rbd_dev, 0); 4684 } 4685 } 4686 4687 static void rbd_reregister_watch(struct work_struct *work) 4688 { 4689 struct rbd_device *rbd_dev = container_of(to_delayed_work(work), 4690 struct rbd_device, watch_dwork); 4691 int ret; 4692 4693 dout("%s rbd_dev %p\n", __func__, rbd_dev); 4694 4695 mutex_lock(&rbd_dev->watch_mutex); 4696 if (rbd_dev->watch_state != RBD_WATCH_STATE_ERROR) { 4697 mutex_unlock(&rbd_dev->watch_mutex); 4698 return; 4699 } 4700 4701 ret = __rbd_register_watch(rbd_dev); 4702 if (ret) { 4703 rbd_warn(rbd_dev, "failed to reregister watch: %d", ret); 4704 if (ret != -EBLACKLISTED && ret != -ENOENT) { 4705 queue_delayed_work(rbd_dev->task_wq, 4706 &rbd_dev->watch_dwork, 4707 RBD_RETRY_DELAY); 4708 mutex_unlock(&rbd_dev->watch_mutex); 4709 return; 4710 } 4711 4712 mutex_unlock(&rbd_dev->watch_mutex); 4713 down_write(&rbd_dev->lock_rwsem); 4714 wake_lock_waiters(rbd_dev, ret); 4715 up_write(&rbd_dev->lock_rwsem); 4716 return; 4717 } 4718 4719 rbd_dev->watch_state = RBD_WATCH_STATE_REGISTERED; 4720 rbd_dev->watch_cookie = rbd_dev->watch_handle->linger_id; 4721 mutex_unlock(&rbd_dev->watch_mutex); 4722 4723 down_write(&rbd_dev->lock_rwsem); 4724 if (rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED) 4725 rbd_reacquire_lock(rbd_dev); 4726 up_write(&rbd_dev->lock_rwsem); 4727 4728 ret = rbd_dev_refresh(rbd_dev); 4729 if (ret) 4730 rbd_warn(rbd_dev, "reregistration refresh failed: %d", ret); 4731 } 4732 4733 /* 4734 * Synchronous osd object method call. Returns the number of bytes 4735 * returned in the outbound buffer, or a negative error code. 4736 */ 4737 static int rbd_obj_method_sync(struct rbd_device *rbd_dev, 4738 struct ceph_object_id *oid, 4739 struct ceph_object_locator *oloc, 4740 const char *method_name, 4741 const void *outbound, 4742 size_t outbound_size, 4743 void *inbound, 4744 size_t inbound_size) 4745 { 4746 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4747 struct page *req_page = NULL; 4748 struct page *reply_page; 4749 int ret; 4750 4751 /* 4752 * Method calls are ultimately read operations. The result 4753 * should placed into the inbound buffer provided. They 4754 * also supply outbound data--parameters for the object 4755 * method. Currently if this is present it will be a 4756 * snapshot id. 4757 */ 4758 if (outbound) { 4759 if (outbound_size > PAGE_SIZE) 4760 return -E2BIG; 4761 4762 req_page = alloc_page(GFP_KERNEL); 4763 if (!req_page) 4764 return -ENOMEM; 4765 4766 memcpy(page_address(req_page), outbound, outbound_size); 4767 } 4768 4769 reply_page = alloc_page(GFP_KERNEL); 4770 if (!reply_page) { 4771 if (req_page) 4772 __free_page(req_page); 4773 return -ENOMEM; 4774 } 4775 4776 ret = ceph_osdc_call(osdc, oid, oloc, RBD_DRV_NAME, method_name, 4777 CEPH_OSD_FLAG_READ, req_page, outbound_size, 4778 &reply_page, &inbound_size); 4779 if (!ret) { 4780 memcpy(inbound, page_address(reply_page), inbound_size); 4781 ret = inbound_size; 4782 } 4783 4784 if (req_page) 4785 __free_page(req_page); 4786 __free_page(reply_page); 4787 return ret; 4788 } 4789 4790 static void rbd_queue_workfn(struct work_struct *work) 4791 { 4792 struct request *rq = blk_mq_rq_from_pdu(work); 4793 struct rbd_device *rbd_dev = rq->q->queuedata; 4794 struct rbd_img_request *img_request; 4795 struct ceph_snap_context *snapc = NULL; 4796 u64 offset = (u64)blk_rq_pos(rq) << SECTOR_SHIFT; 4797 u64 length = blk_rq_bytes(rq); 4798 enum obj_operation_type op_type; 4799 u64 mapping_size; 4800 int result; 4801 4802 switch (req_op(rq)) { 4803 case REQ_OP_DISCARD: 4804 op_type = OBJ_OP_DISCARD; 4805 break; 4806 case REQ_OP_WRITE_ZEROES: 4807 op_type = OBJ_OP_ZEROOUT; 4808 break; 4809 case REQ_OP_WRITE: 4810 op_type = OBJ_OP_WRITE; 4811 break; 4812 case REQ_OP_READ: 4813 op_type = OBJ_OP_READ; 4814 break; 4815 default: 4816 dout("%s: non-fs request type %d\n", __func__, req_op(rq)); 4817 result = -EIO; 4818 goto err; 4819 } 4820 4821 /* Ignore/skip any zero-length requests */ 4822 4823 if (!length) { 4824 dout("%s: zero-length request\n", __func__); 4825 result = 0; 4826 goto err_rq; 4827 } 4828 4829 if (op_type != OBJ_OP_READ && rbd_dev->spec->snap_id != CEPH_NOSNAP) { 4830 rbd_warn(rbd_dev, "%s on read-only snapshot", 4831 obj_op_name(op_type)); 4832 result = -EIO; 4833 goto err; 4834 } 4835 4836 /* 4837 * Quit early if the mapped snapshot no longer exists. It's 4838 * still possible the snapshot will have disappeared by the 4839 * time our request arrives at the osd, but there's no sense in 4840 * sending it if we already know. 4841 */ 4842 if (!test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags)) { 4843 dout("request for non-existent snapshot"); 4844 rbd_assert(rbd_dev->spec->snap_id != CEPH_NOSNAP); 4845 result = -ENXIO; 4846 goto err_rq; 4847 } 4848 4849 if (offset && length > U64_MAX - offset + 1) { 4850 rbd_warn(rbd_dev, "bad request range (%llu~%llu)", offset, 4851 length); 4852 result = -EINVAL; 4853 goto err_rq; /* Shouldn't happen */ 4854 } 4855 4856 blk_mq_start_request(rq); 4857 4858 down_read(&rbd_dev->header_rwsem); 4859 mapping_size = rbd_dev->mapping.size; 4860 if (op_type != OBJ_OP_READ) { 4861 snapc = rbd_dev->header.snapc; 4862 ceph_get_snap_context(snapc); 4863 } 4864 up_read(&rbd_dev->header_rwsem); 4865 4866 if (offset + length > mapping_size) { 4867 rbd_warn(rbd_dev, "beyond EOD (%llu~%llu > %llu)", offset, 4868 length, mapping_size); 4869 result = -EIO; 4870 goto err_rq; 4871 } 4872 4873 img_request = rbd_img_request_create(rbd_dev, op_type, snapc); 4874 if (!img_request) { 4875 result = -ENOMEM; 4876 goto err_rq; 4877 } 4878 img_request->rq = rq; 4879 snapc = NULL; /* img_request consumes a ref */ 4880 4881 dout("%s rbd_dev %p img_req %p %s %llu~%llu\n", __func__, rbd_dev, 4882 img_request, obj_op_name(op_type), offset, length); 4883 4884 if (op_type == OBJ_OP_DISCARD || op_type == OBJ_OP_ZEROOUT) 4885 result = rbd_img_fill_nodata(img_request, offset, length); 4886 else 4887 result = rbd_img_fill_from_bio(img_request, offset, length, 4888 rq->bio); 4889 if (result) 4890 goto err_img_request; 4891 4892 rbd_img_handle_request(img_request, 0); 4893 return; 4894 4895 err_img_request: 4896 rbd_img_request_put(img_request); 4897 err_rq: 4898 if (result) 4899 rbd_warn(rbd_dev, "%s %llx at %llx result %d", 4900 obj_op_name(op_type), length, offset, result); 4901 ceph_put_snap_context(snapc); 4902 err: 4903 blk_mq_end_request(rq, errno_to_blk_status(result)); 4904 } 4905 4906 static blk_status_t rbd_queue_rq(struct blk_mq_hw_ctx *hctx, 4907 const struct blk_mq_queue_data *bd) 4908 { 4909 struct request *rq = bd->rq; 4910 struct work_struct *work = blk_mq_rq_to_pdu(rq); 4911 4912 queue_work(rbd_wq, work); 4913 return BLK_STS_OK; 4914 } 4915 4916 static void rbd_free_disk(struct rbd_device *rbd_dev) 4917 { 4918 blk_cleanup_queue(rbd_dev->disk->queue); 4919 blk_mq_free_tag_set(&rbd_dev->tag_set); 4920 put_disk(rbd_dev->disk); 4921 rbd_dev->disk = NULL; 4922 } 4923 4924 static int rbd_obj_read_sync(struct rbd_device *rbd_dev, 4925 struct ceph_object_id *oid, 4926 struct ceph_object_locator *oloc, 4927 void *buf, int buf_len) 4928 4929 { 4930 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 4931 struct ceph_osd_request *req; 4932 struct page **pages; 4933 int num_pages = calc_pages_for(0, buf_len); 4934 int ret; 4935 4936 req = ceph_osdc_alloc_request(osdc, NULL, 1, false, GFP_KERNEL); 4937 if (!req) 4938 return -ENOMEM; 4939 4940 ceph_oid_copy(&req->r_base_oid, oid); 4941 ceph_oloc_copy(&req->r_base_oloc, oloc); 4942 req->r_flags = CEPH_OSD_FLAG_READ; 4943 4944 pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL); 4945 if (IS_ERR(pages)) { 4946 ret = PTR_ERR(pages); 4947 goto out_req; 4948 } 4949 4950 osd_req_op_extent_init(req, 0, CEPH_OSD_OP_READ, 0, buf_len, 0, 0); 4951 osd_req_op_extent_osd_data_pages(req, 0, pages, buf_len, 0, false, 4952 true); 4953 4954 ret = ceph_osdc_alloc_messages(req, GFP_KERNEL); 4955 if (ret) 4956 goto out_req; 4957 4958 ceph_osdc_start_request(osdc, req, false); 4959 ret = ceph_osdc_wait_request(osdc, req); 4960 if (ret >= 0) 4961 ceph_copy_from_page_vector(pages, buf, 0, ret); 4962 4963 out_req: 4964 ceph_osdc_put_request(req); 4965 return ret; 4966 } 4967 4968 /* 4969 * Read the complete header for the given rbd device. On successful 4970 * return, the rbd_dev->header field will contain up-to-date 4971 * information about the image. 4972 */ 4973 static int rbd_dev_v1_header_info(struct rbd_device *rbd_dev) 4974 { 4975 struct rbd_image_header_ondisk *ondisk = NULL; 4976 u32 snap_count = 0; 4977 u64 names_size = 0; 4978 u32 want_count; 4979 int ret; 4980 4981 /* 4982 * The complete header will include an array of its 64-bit 4983 * snapshot ids, followed by the names of those snapshots as 4984 * a contiguous block of NUL-terminated strings. Note that 4985 * the number of snapshots could change by the time we read 4986 * it in, in which case we re-read it. 4987 */ 4988 do { 4989 size_t size; 4990 4991 kfree(ondisk); 4992 4993 size = sizeof (*ondisk); 4994 size += snap_count * sizeof (struct rbd_image_snap_ondisk); 4995 size += names_size; 4996 ondisk = kmalloc(size, GFP_KERNEL); 4997 if (!ondisk) 4998 return -ENOMEM; 4999 5000 ret = rbd_obj_read_sync(rbd_dev, &rbd_dev->header_oid, 5001 &rbd_dev->header_oloc, ondisk, size); 5002 if (ret < 0) 5003 goto out; 5004 if ((size_t)ret < size) { 5005 ret = -ENXIO; 5006 rbd_warn(rbd_dev, "short header read (want %zd got %d)", 5007 size, ret); 5008 goto out; 5009 } 5010 if (!rbd_dev_ondisk_valid(ondisk)) { 5011 ret = -ENXIO; 5012 rbd_warn(rbd_dev, "invalid header"); 5013 goto out; 5014 } 5015 5016 names_size = le64_to_cpu(ondisk->snap_names_len); 5017 want_count = snap_count; 5018 snap_count = le32_to_cpu(ondisk->snap_count); 5019 } while (snap_count != want_count); 5020 5021 ret = rbd_header_from_disk(rbd_dev, ondisk); 5022 out: 5023 kfree(ondisk); 5024 5025 return ret; 5026 } 5027 5028 /* 5029 * Clear the rbd device's EXISTS flag if the snapshot it's mapped to 5030 * has disappeared from the (just updated) snapshot context. 5031 */ 5032 static void rbd_exists_validate(struct rbd_device *rbd_dev) 5033 { 5034 u64 snap_id; 5035 5036 if (!test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags)) 5037 return; 5038 5039 snap_id = rbd_dev->spec->snap_id; 5040 if (snap_id == CEPH_NOSNAP) 5041 return; 5042 5043 if (rbd_dev_snap_index(rbd_dev, snap_id) == BAD_SNAP_INDEX) 5044 clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); 5045 } 5046 5047 static void rbd_dev_update_size(struct rbd_device *rbd_dev) 5048 { 5049 sector_t size; 5050 5051 /* 5052 * If EXISTS is not set, rbd_dev->disk may be NULL, so don't 5053 * try to update its size. If REMOVING is set, updating size 5054 * is just useless work since the device can't be opened. 5055 */ 5056 if (test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags) && 5057 !test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags)) { 5058 size = (sector_t)rbd_dev->mapping.size / SECTOR_SIZE; 5059 dout("setting size to %llu sectors", (unsigned long long)size); 5060 set_capacity(rbd_dev->disk, size); 5061 revalidate_disk(rbd_dev->disk); 5062 } 5063 } 5064 5065 static int rbd_dev_refresh(struct rbd_device *rbd_dev) 5066 { 5067 u64 mapping_size; 5068 int ret; 5069 5070 down_write(&rbd_dev->header_rwsem); 5071 mapping_size = rbd_dev->mapping.size; 5072 5073 ret = rbd_dev_header_info(rbd_dev); 5074 if (ret) 5075 goto out; 5076 5077 /* 5078 * If there is a parent, see if it has disappeared due to the 5079 * mapped image getting flattened. 5080 */ 5081 if (rbd_dev->parent) { 5082 ret = rbd_dev_v2_parent_info(rbd_dev); 5083 if (ret) 5084 goto out; 5085 } 5086 5087 if (rbd_dev->spec->snap_id == CEPH_NOSNAP) { 5088 rbd_dev->mapping.size = rbd_dev->header.image_size; 5089 } else { 5090 /* validate mapped snapshot's EXISTS flag */ 5091 rbd_exists_validate(rbd_dev); 5092 } 5093 5094 out: 5095 up_write(&rbd_dev->header_rwsem); 5096 if (!ret && mapping_size != rbd_dev->mapping.size) 5097 rbd_dev_update_size(rbd_dev); 5098 5099 return ret; 5100 } 5101 5102 static int rbd_init_request(struct blk_mq_tag_set *set, struct request *rq, 5103 unsigned int hctx_idx, unsigned int numa_node) 5104 { 5105 struct work_struct *work = blk_mq_rq_to_pdu(rq); 5106 5107 INIT_WORK(work, rbd_queue_workfn); 5108 return 0; 5109 } 5110 5111 static const struct blk_mq_ops rbd_mq_ops = { 5112 .queue_rq = rbd_queue_rq, 5113 .init_request = rbd_init_request, 5114 }; 5115 5116 static int rbd_init_disk(struct rbd_device *rbd_dev) 5117 { 5118 struct gendisk *disk; 5119 struct request_queue *q; 5120 unsigned int objset_bytes = 5121 rbd_dev->layout.object_size * rbd_dev->layout.stripe_count; 5122 int err; 5123 5124 /* create gendisk info */ 5125 disk = alloc_disk(single_major ? 5126 (1 << RBD_SINGLE_MAJOR_PART_SHIFT) : 5127 RBD_MINORS_PER_MAJOR); 5128 if (!disk) 5129 return -ENOMEM; 5130 5131 snprintf(disk->disk_name, sizeof(disk->disk_name), RBD_DRV_NAME "%d", 5132 rbd_dev->dev_id); 5133 disk->major = rbd_dev->major; 5134 disk->first_minor = rbd_dev->minor; 5135 if (single_major) 5136 disk->flags |= GENHD_FL_EXT_DEVT; 5137 disk->fops = &rbd_bd_ops; 5138 disk->private_data = rbd_dev; 5139 5140 memset(&rbd_dev->tag_set, 0, sizeof(rbd_dev->tag_set)); 5141 rbd_dev->tag_set.ops = &rbd_mq_ops; 5142 rbd_dev->tag_set.queue_depth = rbd_dev->opts->queue_depth; 5143 rbd_dev->tag_set.numa_node = NUMA_NO_NODE; 5144 rbd_dev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; 5145 rbd_dev->tag_set.nr_hw_queues = 1; 5146 rbd_dev->tag_set.cmd_size = sizeof(struct work_struct); 5147 5148 err = blk_mq_alloc_tag_set(&rbd_dev->tag_set); 5149 if (err) 5150 goto out_disk; 5151 5152 q = blk_mq_init_queue(&rbd_dev->tag_set); 5153 if (IS_ERR(q)) { 5154 err = PTR_ERR(q); 5155 goto out_tag_set; 5156 } 5157 5158 blk_queue_flag_set(QUEUE_FLAG_NONROT, q); 5159 /* QUEUE_FLAG_ADD_RANDOM is off by default for blk-mq */ 5160 5161 blk_queue_max_hw_sectors(q, objset_bytes >> SECTOR_SHIFT); 5162 q->limits.max_sectors = queue_max_hw_sectors(q); 5163 blk_queue_max_segments(q, USHRT_MAX); 5164 blk_queue_max_segment_size(q, UINT_MAX); 5165 blk_queue_io_min(q, rbd_dev->opts->alloc_size); 5166 blk_queue_io_opt(q, rbd_dev->opts->alloc_size); 5167 5168 if (rbd_dev->opts->trim) { 5169 blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); 5170 q->limits.discard_granularity = rbd_dev->opts->alloc_size; 5171 blk_queue_max_discard_sectors(q, objset_bytes >> SECTOR_SHIFT); 5172 blk_queue_max_write_zeroes_sectors(q, objset_bytes >> SECTOR_SHIFT); 5173 } 5174 5175 if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC)) 5176 q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES; 5177 5178 /* 5179 * disk_release() expects a queue ref from add_disk() and will 5180 * put it. Hold an extra ref until add_disk() is called. 5181 */ 5182 WARN_ON(!blk_get_queue(q)); 5183 disk->queue = q; 5184 q->queuedata = rbd_dev; 5185 5186 rbd_dev->disk = disk; 5187 5188 return 0; 5189 out_tag_set: 5190 blk_mq_free_tag_set(&rbd_dev->tag_set); 5191 out_disk: 5192 put_disk(disk); 5193 return err; 5194 } 5195 5196 /* 5197 sysfs 5198 */ 5199 5200 static struct rbd_device *dev_to_rbd_dev(struct device *dev) 5201 { 5202 return container_of(dev, struct rbd_device, dev); 5203 } 5204 5205 static ssize_t rbd_size_show(struct device *dev, 5206 struct device_attribute *attr, char *buf) 5207 { 5208 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5209 5210 return sprintf(buf, "%llu\n", 5211 (unsigned long long)rbd_dev->mapping.size); 5212 } 5213 5214 /* 5215 * Note this shows the features for whatever's mapped, which is not 5216 * necessarily the base image. 5217 */ 5218 static ssize_t rbd_features_show(struct device *dev, 5219 struct device_attribute *attr, char *buf) 5220 { 5221 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5222 5223 return sprintf(buf, "0x%016llx\n", 5224 (unsigned long long)rbd_dev->mapping.features); 5225 } 5226 5227 static ssize_t rbd_major_show(struct device *dev, 5228 struct device_attribute *attr, char *buf) 5229 { 5230 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5231 5232 if (rbd_dev->major) 5233 return sprintf(buf, "%d\n", rbd_dev->major); 5234 5235 return sprintf(buf, "(none)\n"); 5236 } 5237 5238 static ssize_t rbd_minor_show(struct device *dev, 5239 struct device_attribute *attr, char *buf) 5240 { 5241 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5242 5243 return sprintf(buf, "%d\n", rbd_dev->minor); 5244 } 5245 5246 static ssize_t rbd_client_addr_show(struct device *dev, 5247 struct device_attribute *attr, char *buf) 5248 { 5249 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5250 struct ceph_entity_addr *client_addr = 5251 ceph_client_addr(rbd_dev->rbd_client->client); 5252 5253 return sprintf(buf, "%pISpc/%u\n", &client_addr->in_addr, 5254 le32_to_cpu(client_addr->nonce)); 5255 } 5256 5257 static ssize_t rbd_client_id_show(struct device *dev, 5258 struct device_attribute *attr, char *buf) 5259 { 5260 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5261 5262 return sprintf(buf, "client%lld\n", 5263 ceph_client_gid(rbd_dev->rbd_client->client)); 5264 } 5265 5266 static ssize_t rbd_cluster_fsid_show(struct device *dev, 5267 struct device_attribute *attr, char *buf) 5268 { 5269 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5270 5271 return sprintf(buf, "%pU\n", &rbd_dev->rbd_client->client->fsid); 5272 } 5273 5274 static ssize_t rbd_config_info_show(struct device *dev, 5275 struct device_attribute *attr, char *buf) 5276 { 5277 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5278 5279 return sprintf(buf, "%s\n", rbd_dev->config_info); 5280 } 5281 5282 static ssize_t rbd_pool_show(struct device *dev, 5283 struct device_attribute *attr, char *buf) 5284 { 5285 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5286 5287 return sprintf(buf, "%s\n", rbd_dev->spec->pool_name); 5288 } 5289 5290 static ssize_t rbd_pool_id_show(struct device *dev, 5291 struct device_attribute *attr, char *buf) 5292 { 5293 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5294 5295 return sprintf(buf, "%llu\n", 5296 (unsigned long long) rbd_dev->spec->pool_id); 5297 } 5298 5299 static ssize_t rbd_pool_ns_show(struct device *dev, 5300 struct device_attribute *attr, char *buf) 5301 { 5302 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5303 5304 return sprintf(buf, "%s\n", rbd_dev->spec->pool_ns ?: ""); 5305 } 5306 5307 static ssize_t rbd_name_show(struct device *dev, 5308 struct device_attribute *attr, char *buf) 5309 { 5310 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5311 5312 if (rbd_dev->spec->image_name) 5313 return sprintf(buf, "%s\n", rbd_dev->spec->image_name); 5314 5315 return sprintf(buf, "(unknown)\n"); 5316 } 5317 5318 static ssize_t rbd_image_id_show(struct device *dev, 5319 struct device_attribute *attr, char *buf) 5320 { 5321 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5322 5323 return sprintf(buf, "%s\n", rbd_dev->spec->image_id); 5324 } 5325 5326 /* 5327 * Shows the name of the currently-mapped snapshot (or 5328 * RBD_SNAP_HEAD_NAME for the base image). 5329 */ 5330 static ssize_t rbd_snap_show(struct device *dev, 5331 struct device_attribute *attr, 5332 char *buf) 5333 { 5334 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5335 5336 return sprintf(buf, "%s\n", rbd_dev->spec->snap_name); 5337 } 5338 5339 static ssize_t rbd_snap_id_show(struct device *dev, 5340 struct device_attribute *attr, char *buf) 5341 { 5342 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5343 5344 return sprintf(buf, "%llu\n", rbd_dev->spec->snap_id); 5345 } 5346 5347 /* 5348 * For a v2 image, shows the chain of parent images, separated by empty 5349 * lines. For v1 images or if there is no parent, shows "(no parent 5350 * image)". 5351 */ 5352 static ssize_t rbd_parent_show(struct device *dev, 5353 struct device_attribute *attr, 5354 char *buf) 5355 { 5356 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5357 ssize_t count = 0; 5358 5359 if (!rbd_dev->parent) 5360 return sprintf(buf, "(no parent image)\n"); 5361 5362 for ( ; rbd_dev->parent; rbd_dev = rbd_dev->parent) { 5363 struct rbd_spec *spec = rbd_dev->parent_spec; 5364 5365 count += sprintf(&buf[count], "%s" 5366 "pool_id %llu\npool_name %s\n" 5367 "pool_ns %s\n" 5368 "image_id %s\nimage_name %s\n" 5369 "snap_id %llu\nsnap_name %s\n" 5370 "overlap %llu\n", 5371 !count ? "" : "\n", /* first? */ 5372 spec->pool_id, spec->pool_name, 5373 spec->pool_ns ?: "", 5374 spec->image_id, spec->image_name ?: "(unknown)", 5375 spec->snap_id, spec->snap_name, 5376 rbd_dev->parent_overlap); 5377 } 5378 5379 return count; 5380 } 5381 5382 static ssize_t rbd_image_refresh(struct device *dev, 5383 struct device_attribute *attr, 5384 const char *buf, 5385 size_t size) 5386 { 5387 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5388 int ret; 5389 5390 ret = rbd_dev_refresh(rbd_dev); 5391 if (ret) 5392 return ret; 5393 5394 return size; 5395 } 5396 5397 static DEVICE_ATTR(size, 0444, rbd_size_show, NULL); 5398 static DEVICE_ATTR(features, 0444, rbd_features_show, NULL); 5399 static DEVICE_ATTR(major, 0444, rbd_major_show, NULL); 5400 static DEVICE_ATTR(minor, 0444, rbd_minor_show, NULL); 5401 static DEVICE_ATTR(client_addr, 0444, rbd_client_addr_show, NULL); 5402 static DEVICE_ATTR(client_id, 0444, rbd_client_id_show, NULL); 5403 static DEVICE_ATTR(cluster_fsid, 0444, rbd_cluster_fsid_show, NULL); 5404 static DEVICE_ATTR(config_info, 0400, rbd_config_info_show, NULL); 5405 static DEVICE_ATTR(pool, 0444, rbd_pool_show, NULL); 5406 static DEVICE_ATTR(pool_id, 0444, rbd_pool_id_show, NULL); 5407 static DEVICE_ATTR(pool_ns, 0444, rbd_pool_ns_show, NULL); 5408 static DEVICE_ATTR(name, 0444, rbd_name_show, NULL); 5409 static DEVICE_ATTR(image_id, 0444, rbd_image_id_show, NULL); 5410 static DEVICE_ATTR(refresh, 0200, NULL, rbd_image_refresh); 5411 static DEVICE_ATTR(current_snap, 0444, rbd_snap_show, NULL); 5412 static DEVICE_ATTR(snap_id, 0444, rbd_snap_id_show, NULL); 5413 static DEVICE_ATTR(parent, 0444, rbd_parent_show, NULL); 5414 5415 static struct attribute *rbd_attrs[] = { 5416 &dev_attr_size.attr, 5417 &dev_attr_features.attr, 5418 &dev_attr_major.attr, 5419 &dev_attr_minor.attr, 5420 &dev_attr_client_addr.attr, 5421 &dev_attr_client_id.attr, 5422 &dev_attr_cluster_fsid.attr, 5423 &dev_attr_config_info.attr, 5424 &dev_attr_pool.attr, 5425 &dev_attr_pool_id.attr, 5426 &dev_attr_pool_ns.attr, 5427 &dev_attr_name.attr, 5428 &dev_attr_image_id.attr, 5429 &dev_attr_current_snap.attr, 5430 &dev_attr_snap_id.attr, 5431 &dev_attr_parent.attr, 5432 &dev_attr_refresh.attr, 5433 NULL 5434 }; 5435 5436 static struct attribute_group rbd_attr_group = { 5437 .attrs = rbd_attrs, 5438 }; 5439 5440 static const struct attribute_group *rbd_attr_groups[] = { 5441 &rbd_attr_group, 5442 NULL 5443 }; 5444 5445 static void rbd_dev_release(struct device *dev); 5446 5447 static const struct device_type rbd_device_type = { 5448 .name = "rbd", 5449 .groups = rbd_attr_groups, 5450 .release = rbd_dev_release, 5451 }; 5452 5453 static struct rbd_spec *rbd_spec_get(struct rbd_spec *spec) 5454 { 5455 kref_get(&spec->kref); 5456 5457 return spec; 5458 } 5459 5460 static void rbd_spec_free(struct kref *kref); 5461 static void rbd_spec_put(struct rbd_spec *spec) 5462 { 5463 if (spec) 5464 kref_put(&spec->kref, rbd_spec_free); 5465 } 5466 5467 static struct rbd_spec *rbd_spec_alloc(void) 5468 { 5469 struct rbd_spec *spec; 5470 5471 spec = kzalloc(sizeof (*spec), GFP_KERNEL); 5472 if (!spec) 5473 return NULL; 5474 5475 spec->pool_id = CEPH_NOPOOL; 5476 spec->snap_id = CEPH_NOSNAP; 5477 kref_init(&spec->kref); 5478 5479 return spec; 5480 } 5481 5482 static void rbd_spec_free(struct kref *kref) 5483 { 5484 struct rbd_spec *spec = container_of(kref, struct rbd_spec, kref); 5485 5486 kfree(spec->pool_name); 5487 kfree(spec->pool_ns); 5488 kfree(spec->image_id); 5489 kfree(spec->image_name); 5490 kfree(spec->snap_name); 5491 kfree(spec); 5492 } 5493 5494 static void rbd_dev_free(struct rbd_device *rbd_dev) 5495 { 5496 WARN_ON(rbd_dev->watch_state != RBD_WATCH_STATE_UNREGISTERED); 5497 WARN_ON(rbd_dev->lock_state != RBD_LOCK_STATE_UNLOCKED); 5498 5499 ceph_oid_destroy(&rbd_dev->header_oid); 5500 ceph_oloc_destroy(&rbd_dev->header_oloc); 5501 kfree(rbd_dev->config_info); 5502 5503 rbd_put_client(rbd_dev->rbd_client); 5504 rbd_spec_put(rbd_dev->spec); 5505 kfree(rbd_dev->opts); 5506 kfree(rbd_dev); 5507 } 5508 5509 static void rbd_dev_release(struct device *dev) 5510 { 5511 struct rbd_device *rbd_dev = dev_to_rbd_dev(dev); 5512 bool need_put = !!rbd_dev->opts; 5513 5514 if (need_put) { 5515 destroy_workqueue(rbd_dev->task_wq); 5516 ida_simple_remove(&rbd_dev_id_ida, rbd_dev->dev_id); 5517 } 5518 5519 rbd_dev_free(rbd_dev); 5520 5521 /* 5522 * This is racy, but way better than putting module outside of 5523 * the release callback. The race window is pretty small, so 5524 * doing something similar to dm (dm-builtin.c) is overkill. 5525 */ 5526 if (need_put) 5527 module_put(THIS_MODULE); 5528 } 5529 5530 static struct rbd_device *__rbd_dev_create(struct rbd_client *rbdc, 5531 struct rbd_spec *spec) 5532 { 5533 struct rbd_device *rbd_dev; 5534 5535 rbd_dev = kzalloc(sizeof(*rbd_dev), GFP_KERNEL); 5536 if (!rbd_dev) 5537 return NULL; 5538 5539 spin_lock_init(&rbd_dev->lock); 5540 INIT_LIST_HEAD(&rbd_dev->node); 5541 init_rwsem(&rbd_dev->header_rwsem); 5542 5543 rbd_dev->header.data_pool_id = CEPH_NOPOOL; 5544 ceph_oid_init(&rbd_dev->header_oid); 5545 rbd_dev->header_oloc.pool = spec->pool_id; 5546 if (spec->pool_ns) { 5547 WARN_ON(!*spec->pool_ns); 5548 rbd_dev->header_oloc.pool_ns = 5549 ceph_find_or_create_string(spec->pool_ns, 5550 strlen(spec->pool_ns)); 5551 } 5552 5553 mutex_init(&rbd_dev->watch_mutex); 5554 rbd_dev->watch_state = RBD_WATCH_STATE_UNREGISTERED; 5555 INIT_DELAYED_WORK(&rbd_dev->watch_dwork, rbd_reregister_watch); 5556 5557 init_rwsem(&rbd_dev->lock_rwsem); 5558 rbd_dev->lock_state = RBD_LOCK_STATE_UNLOCKED; 5559 INIT_WORK(&rbd_dev->acquired_lock_work, rbd_notify_acquired_lock); 5560 INIT_WORK(&rbd_dev->released_lock_work, rbd_notify_released_lock); 5561 INIT_DELAYED_WORK(&rbd_dev->lock_dwork, rbd_acquire_lock); 5562 INIT_WORK(&rbd_dev->unlock_work, rbd_release_lock_work); 5563 spin_lock_init(&rbd_dev->lock_lists_lock); 5564 INIT_LIST_HEAD(&rbd_dev->acquiring_list); 5565 INIT_LIST_HEAD(&rbd_dev->running_list); 5566 init_completion(&rbd_dev->acquire_wait); 5567 init_completion(&rbd_dev->releasing_wait); 5568 5569 spin_lock_init(&rbd_dev->object_map_lock); 5570 5571 rbd_dev->dev.bus = &rbd_bus_type; 5572 rbd_dev->dev.type = &rbd_device_type; 5573 rbd_dev->dev.parent = &rbd_root_dev; 5574 device_initialize(&rbd_dev->dev); 5575 5576 rbd_dev->rbd_client = rbdc; 5577 rbd_dev->spec = spec; 5578 5579 return rbd_dev; 5580 } 5581 5582 /* 5583 * Create a mapping rbd_dev. 5584 */ 5585 static struct rbd_device *rbd_dev_create(struct rbd_client *rbdc, 5586 struct rbd_spec *spec, 5587 struct rbd_options *opts) 5588 { 5589 struct rbd_device *rbd_dev; 5590 5591 rbd_dev = __rbd_dev_create(rbdc, spec); 5592 if (!rbd_dev) 5593 return NULL; 5594 5595 rbd_dev->opts = opts; 5596 5597 /* get an id and fill in device name */ 5598 rbd_dev->dev_id = ida_simple_get(&rbd_dev_id_ida, 0, 5599 minor_to_rbd_dev_id(1 << MINORBITS), 5600 GFP_KERNEL); 5601 if (rbd_dev->dev_id < 0) 5602 goto fail_rbd_dev; 5603 5604 sprintf(rbd_dev->name, RBD_DRV_NAME "%d", rbd_dev->dev_id); 5605 rbd_dev->task_wq = alloc_ordered_workqueue("%s-tasks", WQ_MEM_RECLAIM, 5606 rbd_dev->name); 5607 if (!rbd_dev->task_wq) 5608 goto fail_dev_id; 5609 5610 /* we have a ref from do_rbd_add() */ 5611 __module_get(THIS_MODULE); 5612 5613 dout("%s rbd_dev %p dev_id %d\n", __func__, rbd_dev, rbd_dev->dev_id); 5614 return rbd_dev; 5615 5616 fail_dev_id: 5617 ida_simple_remove(&rbd_dev_id_ida, rbd_dev->dev_id); 5618 fail_rbd_dev: 5619 rbd_dev_free(rbd_dev); 5620 return NULL; 5621 } 5622 5623 static void rbd_dev_destroy(struct rbd_device *rbd_dev) 5624 { 5625 if (rbd_dev) 5626 put_device(&rbd_dev->dev); 5627 } 5628 5629 /* 5630 * Get the size and object order for an image snapshot, or if 5631 * snap_id is CEPH_NOSNAP, gets this information for the base 5632 * image. 5633 */ 5634 static int _rbd_dev_v2_snap_size(struct rbd_device *rbd_dev, u64 snap_id, 5635 u8 *order, u64 *snap_size) 5636 { 5637 __le64 snapid = cpu_to_le64(snap_id); 5638 int ret; 5639 struct { 5640 u8 order; 5641 __le64 size; 5642 } __attribute__ ((packed)) size_buf = { 0 }; 5643 5644 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5645 &rbd_dev->header_oloc, "get_size", 5646 &snapid, sizeof(snapid), 5647 &size_buf, sizeof(size_buf)); 5648 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 5649 if (ret < 0) 5650 return ret; 5651 if (ret < sizeof (size_buf)) 5652 return -ERANGE; 5653 5654 if (order) { 5655 *order = size_buf.order; 5656 dout(" order %u", (unsigned int)*order); 5657 } 5658 *snap_size = le64_to_cpu(size_buf.size); 5659 5660 dout(" snap_id 0x%016llx snap_size = %llu\n", 5661 (unsigned long long)snap_id, 5662 (unsigned long long)*snap_size); 5663 5664 return 0; 5665 } 5666 5667 static int rbd_dev_v2_image_size(struct rbd_device *rbd_dev) 5668 { 5669 return _rbd_dev_v2_snap_size(rbd_dev, CEPH_NOSNAP, 5670 &rbd_dev->header.obj_order, 5671 &rbd_dev->header.image_size); 5672 } 5673 5674 static int rbd_dev_v2_object_prefix(struct rbd_device *rbd_dev) 5675 { 5676 size_t size; 5677 void *reply_buf; 5678 int ret; 5679 void *p; 5680 5681 /* Response will be an encoded string, which includes a length */ 5682 size = sizeof(__le32) + RBD_OBJ_PREFIX_LEN_MAX; 5683 reply_buf = kzalloc(size, GFP_KERNEL); 5684 if (!reply_buf) 5685 return -ENOMEM; 5686 5687 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5688 &rbd_dev->header_oloc, "get_object_prefix", 5689 NULL, 0, reply_buf, size); 5690 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 5691 if (ret < 0) 5692 goto out; 5693 5694 p = reply_buf; 5695 rbd_dev->header.object_prefix = ceph_extract_encoded_string(&p, 5696 p + ret, NULL, GFP_NOIO); 5697 ret = 0; 5698 5699 if (IS_ERR(rbd_dev->header.object_prefix)) { 5700 ret = PTR_ERR(rbd_dev->header.object_prefix); 5701 rbd_dev->header.object_prefix = NULL; 5702 } else { 5703 dout(" object_prefix = %s\n", rbd_dev->header.object_prefix); 5704 } 5705 out: 5706 kfree(reply_buf); 5707 5708 return ret; 5709 } 5710 5711 static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id, 5712 u64 *snap_features) 5713 { 5714 __le64 snapid = cpu_to_le64(snap_id); 5715 struct { 5716 __le64 features; 5717 __le64 incompat; 5718 } __attribute__ ((packed)) features_buf = { 0 }; 5719 u64 unsup; 5720 int ret; 5721 5722 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5723 &rbd_dev->header_oloc, "get_features", 5724 &snapid, sizeof(snapid), 5725 &features_buf, sizeof(features_buf)); 5726 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 5727 if (ret < 0) 5728 return ret; 5729 if (ret < sizeof (features_buf)) 5730 return -ERANGE; 5731 5732 unsup = le64_to_cpu(features_buf.incompat) & ~RBD_FEATURES_SUPPORTED; 5733 if (unsup) { 5734 rbd_warn(rbd_dev, "image uses unsupported features: 0x%llx", 5735 unsup); 5736 return -ENXIO; 5737 } 5738 5739 *snap_features = le64_to_cpu(features_buf.features); 5740 5741 dout(" snap_id 0x%016llx features = 0x%016llx incompat = 0x%016llx\n", 5742 (unsigned long long)snap_id, 5743 (unsigned long long)*snap_features, 5744 (unsigned long long)le64_to_cpu(features_buf.incompat)); 5745 5746 return 0; 5747 } 5748 5749 static int rbd_dev_v2_features(struct rbd_device *rbd_dev) 5750 { 5751 return _rbd_dev_v2_snap_features(rbd_dev, CEPH_NOSNAP, 5752 &rbd_dev->header.features); 5753 } 5754 5755 /* 5756 * These are generic image flags, but since they are used only for 5757 * object map, store them in rbd_dev->object_map_flags. 5758 * 5759 * For the same reason, this function is called only on object map 5760 * (re)load and not on header refresh. 5761 */ 5762 static int rbd_dev_v2_get_flags(struct rbd_device *rbd_dev) 5763 { 5764 __le64 snapid = cpu_to_le64(rbd_dev->spec->snap_id); 5765 __le64 flags; 5766 int ret; 5767 5768 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 5769 &rbd_dev->header_oloc, "get_flags", 5770 &snapid, sizeof(snapid), 5771 &flags, sizeof(flags)); 5772 if (ret < 0) 5773 return ret; 5774 if (ret < sizeof(flags)) 5775 return -EBADMSG; 5776 5777 rbd_dev->object_map_flags = le64_to_cpu(flags); 5778 return 0; 5779 } 5780 5781 struct parent_image_info { 5782 u64 pool_id; 5783 const char *pool_ns; 5784 const char *image_id; 5785 u64 snap_id; 5786 5787 bool has_overlap; 5788 u64 overlap; 5789 }; 5790 5791 /* 5792 * The caller is responsible for @pii. 5793 */ 5794 static int decode_parent_image_spec(void **p, void *end, 5795 struct parent_image_info *pii) 5796 { 5797 u8 struct_v; 5798 u32 struct_len; 5799 int ret; 5800 5801 ret = ceph_start_decoding(p, end, 1, "ParentImageSpec", 5802 &struct_v, &struct_len); 5803 if (ret) 5804 return ret; 5805 5806 ceph_decode_64_safe(p, end, pii->pool_id, e_inval); 5807 pii->pool_ns = ceph_extract_encoded_string(p, end, NULL, GFP_KERNEL); 5808 if (IS_ERR(pii->pool_ns)) { 5809 ret = PTR_ERR(pii->pool_ns); 5810 pii->pool_ns = NULL; 5811 return ret; 5812 } 5813 pii->image_id = ceph_extract_encoded_string(p, end, NULL, GFP_KERNEL); 5814 if (IS_ERR(pii->image_id)) { 5815 ret = PTR_ERR(pii->image_id); 5816 pii->image_id = NULL; 5817 return ret; 5818 } 5819 ceph_decode_64_safe(p, end, pii->snap_id, e_inval); 5820 return 0; 5821 5822 e_inval: 5823 return -EINVAL; 5824 } 5825 5826 static int __get_parent_info(struct rbd_device *rbd_dev, 5827 struct page *req_page, 5828 struct page *reply_page, 5829 struct parent_image_info *pii) 5830 { 5831 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 5832 size_t reply_len = PAGE_SIZE; 5833 void *p, *end; 5834 int ret; 5835 5836 ret = ceph_osdc_call(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 5837 "rbd", "parent_get", CEPH_OSD_FLAG_READ, 5838 req_page, sizeof(u64), &reply_page, &reply_len); 5839 if (ret) 5840 return ret == -EOPNOTSUPP ? 1 : ret; 5841 5842 p = page_address(reply_page); 5843 end = p + reply_len; 5844 ret = decode_parent_image_spec(&p, end, pii); 5845 if (ret) 5846 return ret; 5847 5848 ret = ceph_osdc_call(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 5849 "rbd", "parent_overlap_get", CEPH_OSD_FLAG_READ, 5850 req_page, sizeof(u64), &reply_page, &reply_len); 5851 if (ret) 5852 return ret; 5853 5854 p = page_address(reply_page); 5855 end = p + reply_len; 5856 ceph_decode_8_safe(&p, end, pii->has_overlap, e_inval); 5857 if (pii->has_overlap) 5858 ceph_decode_64_safe(&p, end, pii->overlap, e_inval); 5859 5860 return 0; 5861 5862 e_inval: 5863 return -EINVAL; 5864 } 5865 5866 /* 5867 * The caller is responsible for @pii. 5868 */ 5869 static int __get_parent_info_legacy(struct rbd_device *rbd_dev, 5870 struct page *req_page, 5871 struct page *reply_page, 5872 struct parent_image_info *pii) 5873 { 5874 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 5875 size_t reply_len = PAGE_SIZE; 5876 void *p, *end; 5877 int ret; 5878 5879 ret = ceph_osdc_call(osdc, &rbd_dev->header_oid, &rbd_dev->header_oloc, 5880 "rbd", "get_parent", CEPH_OSD_FLAG_READ, 5881 req_page, sizeof(u64), &reply_page, &reply_len); 5882 if (ret) 5883 return ret; 5884 5885 p = page_address(reply_page); 5886 end = p + reply_len; 5887 ceph_decode_64_safe(&p, end, pii->pool_id, e_inval); 5888 pii->image_id = ceph_extract_encoded_string(&p, end, NULL, GFP_KERNEL); 5889 if (IS_ERR(pii->image_id)) { 5890 ret = PTR_ERR(pii->image_id); 5891 pii->image_id = NULL; 5892 return ret; 5893 } 5894 ceph_decode_64_safe(&p, end, pii->snap_id, e_inval); 5895 pii->has_overlap = true; 5896 ceph_decode_64_safe(&p, end, pii->overlap, e_inval); 5897 5898 return 0; 5899 5900 e_inval: 5901 return -EINVAL; 5902 } 5903 5904 static int get_parent_info(struct rbd_device *rbd_dev, 5905 struct parent_image_info *pii) 5906 { 5907 struct page *req_page, *reply_page; 5908 void *p; 5909 int ret; 5910 5911 req_page = alloc_page(GFP_KERNEL); 5912 if (!req_page) 5913 return -ENOMEM; 5914 5915 reply_page = alloc_page(GFP_KERNEL); 5916 if (!reply_page) { 5917 __free_page(req_page); 5918 return -ENOMEM; 5919 } 5920 5921 p = page_address(req_page); 5922 ceph_encode_64(&p, rbd_dev->spec->snap_id); 5923 ret = __get_parent_info(rbd_dev, req_page, reply_page, pii); 5924 if (ret > 0) 5925 ret = __get_parent_info_legacy(rbd_dev, req_page, reply_page, 5926 pii); 5927 5928 __free_page(req_page); 5929 __free_page(reply_page); 5930 return ret; 5931 } 5932 5933 static int rbd_dev_v2_parent_info(struct rbd_device *rbd_dev) 5934 { 5935 struct rbd_spec *parent_spec; 5936 struct parent_image_info pii = { 0 }; 5937 int ret; 5938 5939 parent_spec = rbd_spec_alloc(); 5940 if (!parent_spec) 5941 return -ENOMEM; 5942 5943 ret = get_parent_info(rbd_dev, &pii); 5944 if (ret) 5945 goto out_err; 5946 5947 dout("%s pool_id %llu pool_ns %s image_id %s snap_id %llu has_overlap %d overlap %llu\n", 5948 __func__, pii.pool_id, pii.pool_ns, pii.image_id, pii.snap_id, 5949 pii.has_overlap, pii.overlap); 5950 5951 if (pii.pool_id == CEPH_NOPOOL || !pii.has_overlap) { 5952 /* 5953 * Either the parent never existed, or we have 5954 * record of it but the image got flattened so it no 5955 * longer has a parent. When the parent of a 5956 * layered image disappears we immediately set the 5957 * overlap to 0. The effect of this is that all new 5958 * requests will be treated as if the image had no 5959 * parent. 5960 * 5961 * If !pii.has_overlap, the parent image spec is not 5962 * applicable. It's there to avoid duplication in each 5963 * snapshot record. 5964 */ 5965 if (rbd_dev->parent_overlap) { 5966 rbd_dev->parent_overlap = 0; 5967 rbd_dev_parent_put(rbd_dev); 5968 pr_info("%s: clone image has been flattened\n", 5969 rbd_dev->disk->disk_name); 5970 } 5971 5972 goto out; /* No parent? No problem. */ 5973 } 5974 5975 /* The ceph file layout needs to fit pool id in 32 bits */ 5976 5977 ret = -EIO; 5978 if (pii.pool_id > (u64)U32_MAX) { 5979 rbd_warn(NULL, "parent pool id too large (%llu > %u)", 5980 (unsigned long long)pii.pool_id, U32_MAX); 5981 goto out_err; 5982 } 5983 5984 /* 5985 * The parent won't change (except when the clone is 5986 * flattened, already handled that). So we only need to 5987 * record the parent spec we have not already done so. 5988 */ 5989 if (!rbd_dev->parent_spec) { 5990 parent_spec->pool_id = pii.pool_id; 5991 if (pii.pool_ns && *pii.pool_ns) { 5992 parent_spec->pool_ns = pii.pool_ns; 5993 pii.pool_ns = NULL; 5994 } 5995 parent_spec->image_id = pii.image_id; 5996 pii.image_id = NULL; 5997 parent_spec->snap_id = pii.snap_id; 5998 5999 rbd_dev->parent_spec = parent_spec; 6000 parent_spec = NULL; /* rbd_dev now owns this */ 6001 } 6002 6003 /* 6004 * We always update the parent overlap. If it's zero we issue 6005 * a warning, as we will proceed as if there was no parent. 6006 */ 6007 if (!pii.overlap) { 6008 if (parent_spec) { 6009 /* refresh, careful to warn just once */ 6010 if (rbd_dev->parent_overlap) 6011 rbd_warn(rbd_dev, 6012 "clone now standalone (overlap became 0)"); 6013 } else { 6014 /* initial probe */ 6015 rbd_warn(rbd_dev, "clone is standalone (overlap 0)"); 6016 } 6017 } 6018 rbd_dev->parent_overlap = pii.overlap; 6019 6020 out: 6021 ret = 0; 6022 out_err: 6023 kfree(pii.pool_ns); 6024 kfree(pii.image_id); 6025 rbd_spec_put(parent_spec); 6026 return ret; 6027 } 6028 6029 static int rbd_dev_v2_striping_info(struct rbd_device *rbd_dev) 6030 { 6031 struct { 6032 __le64 stripe_unit; 6033 __le64 stripe_count; 6034 } __attribute__ ((packed)) striping_info_buf = { 0 }; 6035 size_t size = sizeof (striping_info_buf); 6036 void *p; 6037 int ret; 6038 6039 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6040 &rbd_dev->header_oloc, "get_stripe_unit_count", 6041 NULL, 0, &striping_info_buf, size); 6042 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6043 if (ret < 0) 6044 return ret; 6045 if (ret < size) 6046 return -ERANGE; 6047 6048 p = &striping_info_buf; 6049 rbd_dev->header.stripe_unit = ceph_decode_64(&p); 6050 rbd_dev->header.stripe_count = ceph_decode_64(&p); 6051 return 0; 6052 } 6053 6054 static int rbd_dev_v2_data_pool(struct rbd_device *rbd_dev) 6055 { 6056 __le64 data_pool_id; 6057 int ret; 6058 6059 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6060 &rbd_dev->header_oloc, "get_data_pool", 6061 NULL, 0, &data_pool_id, sizeof(data_pool_id)); 6062 if (ret < 0) 6063 return ret; 6064 if (ret < sizeof(data_pool_id)) 6065 return -EBADMSG; 6066 6067 rbd_dev->header.data_pool_id = le64_to_cpu(data_pool_id); 6068 WARN_ON(rbd_dev->header.data_pool_id == CEPH_NOPOOL); 6069 return 0; 6070 } 6071 6072 static char *rbd_dev_image_name(struct rbd_device *rbd_dev) 6073 { 6074 CEPH_DEFINE_OID_ONSTACK(oid); 6075 size_t image_id_size; 6076 char *image_id; 6077 void *p; 6078 void *end; 6079 size_t size; 6080 void *reply_buf = NULL; 6081 size_t len = 0; 6082 char *image_name = NULL; 6083 int ret; 6084 6085 rbd_assert(!rbd_dev->spec->image_name); 6086 6087 len = strlen(rbd_dev->spec->image_id); 6088 image_id_size = sizeof (__le32) + len; 6089 image_id = kmalloc(image_id_size, GFP_KERNEL); 6090 if (!image_id) 6091 return NULL; 6092 6093 p = image_id; 6094 end = image_id + image_id_size; 6095 ceph_encode_string(&p, end, rbd_dev->spec->image_id, (u32)len); 6096 6097 size = sizeof (__le32) + RBD_IMAGE_NAME_LEN_MAX; 6098 reply_buf = kmalloc(size, GFP_KERNEL); 6099 if (!reply_buf) 6100 goto out; 6101 6102 ceph_oid_printf(&oid, "%s", RBD_DIRECTORY); 6103 ret = rbd_obj_method_sync(rbd_dev, &oid, &rbd_dev->header_oloc, 6104 "dir_get_name", image_id, image_id_size, 6105 reply_buf, size); 6106 if (ret < 0) 6107 goto out; 6108 p = reply_buf; 6109 end = reply_buf + ret; 6110 6111 image_name = ceph_extract_encoded_string(&p, end, &len, GFP_KERNEL); 6112 if (IS_ERR(image_name)) 6113 image_name = NULL; 6114 else 6115 dout("%s: name is %s len is %zd\n", __func__, image_name, len); 6116 out: 6117 kfree(reply_buf); 6118 kfree(image_id); 6119 6120 return image_name; 6121 } 6122 6123 static u64 rbd_v1_snap_id_by_name(struct rbd_device *rbd_dev, const char *name) 6124 { 6125 struct ceph_snap_context *snapc = rbd_dev->header.snapc; 6126 const char *snap_name; 6127 u32 which = 0; 6128 6129 /* Skip over names until we find the one we are looking for */ 6130 6131 snap_name = rbd_dev->header.snap_names; 6132 while (which < snapc->num_snaps) { 6133 if (!strcmp(name, snap_name)) 6134 return snapc->snaps[which]; 6135 snap_name += strlen(snap_name) + 1; 6136 which++; 6137 } 6138 return CEPH_NOSNAP; 6139 } 6140 6141 static u64 rbd_v2_snap_id_by_name(struct rbd_device *rbd_dev, const char *name) 6142 { 6143 struct ceph_snap_context *snapc = rbd_dev->header.snapc; 6144 u32 which; 6145 bool found = false; 6146 u64 snap_id; 6147 6148 for (which = 0; !found && which < snapc->num_snaps; which++) { 6149 const char *snap_name; 6150 6151 snap_id = snapc->snaps[which]; 6152 snap_name = rbd_dev_v2_snap_name(rbd_dev, snap_id); 6153 if (IS_ERR(snap_name)) { 6154 /* ignore no-longer existing snapshots */ 6155 if (PTR_ERR(snap_name) == -ENOENT) 6156 continue; 6157 else 6158 break; 6159 } 6160 found = !strcmp(name, snap_name); 6161 kfree(snap_name); 6162 } 6163 return found ? snap_id : CEPH_NOSNAP; 6164 } 6165 6166 /* 6167 * Assumes name is never RBD_SNAP_HEAD_NAME; returns CEPH_NOSNAP if 6168 * no snapshot by that name is found, or if an error occurs. 6169 */ 6170 static u64 rbd_snap_id_by_name(struct rbd_device *rbd_dev, const char *name) 6171 { 6172 if (rbd_dev->image_format == 1) 6173 return rbd_v1_snap_id_by_name(rbd_dev, name); 6174 6175 return rbd_v2_snap_id_by_name(rbd_dev, name); 6176 } 6177 6178 /* 6179 * An image being mapped will have everything but the snap id. 6180 */ 6181 static int rbd_spec_fill_snap_id(struct rbd_device *rbd_dev) 6182 { 6183 struct rbd_spec *spec = rbd_dev->spec; 6184 6185 rbd_assert(spec->pool_id != CEPH_NOPOOL && spec->pool_name); 6186 rbd_assert(spec->image_id && spec->image_name); 6187 rbd_assert(spec->snap_name); 6188 6189 if (strcmp(spec->snap_name, RBD_SNAP_HEAD_NAME)) { 6190 u64 snap_id; 6191 6192 snap_id = rbd_snap_id_by_name(rbd_dev, spec->snap_name); 6193 if (snap_id == CEPH_NOSNAP) 6194 return -ENOENT; 6195 6196 spec->snap_id = snap_id; 6197 } else { 6198 spec->snap_id = CEPH_NOSNAP; 6199 } 6200 6201 return 0; 6202 } 6203 6204 /* 6205 * A parent image will have all ids but none of the names. 6206 * 6207 * All names in an rbd spec are dynamically allocated. It's OK if we 6208 * can't figure out the name for an image id. 6209 */ 6210 static int rbd_spec_fill_names(struct rbd_device *rbd_dev) 6211 { 6212 struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; 6213 struct rbd_spec *spec = rbd_dev->spec; 6214 const char *pool_name; 6215 const char *image_name; 6216 const char *snap_name; 6217 int ret; 6218 6219 rbd_assert(spec->pool_id != CEPH_NOPOOL); 6220 rbd_assert(spec->image_id); 6221 rbd_assert(spec->snap_id != CEPH_NOSNAP); 6222 6223 /* Get the pool name; we have to make our own copy of this */ 6224 6225 pool_name = ceph_pg_pool_name_by_id(osdc->osdmap, spec->pool_id); 6226 if (!pool_name) { 6227 rbd_warn(rbd_dev, "no pool with id %llu", spec->pool_id); 6228 return -EIO; 6229 } 6230 pool_name = kstrdup(pool_name, GFP_KERNEL); 6231 if (!pool_name) 6232 return -ENOMEM; 6233 6234 /* Fetch the image name; tolerate failure here */ 6235 6236 image_name = rbd_dev_image_name(rbd_dev); 6237 if (!image_name) 6238 rbd_warn(rbd_dev, "unable to get image name"); 6239 6240 /* Fetch the snapshot name */ 6241 6242 snap_name = rbd_snap_name(rbd_dev, spec->snap_id); 6243 if (IS_ERR(snap_name)) { 6244 ret = PTR_ERR(snap_name); 6245 goto out_err; 6246 } 6247 6248 spec->pool_name = pool_name; 6249 spec->image_name = image_name; 6250 spec->snap_name = snap_name; 6251 6252 return 0; 6253 6254 out_err: 6255 kfree(image_name); 6256 kfree(pool_name); 6257 return ret; 6258 } 6259 6260 static int rbd_dev_v2_snap_context(struct rbd_device *rbd_dev) 6261 { 6262 size_t size; 6263 int ret; 6264 void *reply_buf; 6265 void *p; 6266 void *end; 6267 u64 seq; 6268 u32 snap_count; 6269 struct ceph_snap_context *snapc; 6270 u32 i; 6271 6272 /* 6273 * We'll need room for the seq value (maximum snapshot id), 6274 * snapshot count, and array of that many snapshot ids. 6275 * For now we have a fixed upper limit on the number we're 6276 * prepared to receive. 6277 */ 6278 size = sizeof (__le64) + sizeof (__le32) + 6279 RBD_MAX_SNAP_COUNT * sizeof (__le64); 6280 reply_buf = kzalloc(size, GFP_KERNEL); 6281 if (!reply_buf) 6282 return -ENOMEM; 6283 6284 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6285 &rbd_dev->header_oloc, "get_snapcontext", 6286 NULL, 0, reply_buf, size); 6287 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6288 if (ret < 0) 6289 goto out; 6290 6291 p = reply_buf; 6292 end = reply_buf + ret; 6293 ret = -ERANGE; 6294 ceph_decode_64_safe(&p, end, seq, out); 6295 ceph_decode_32_safe(&p, end, snap_count, out); 6296 6297 /* 6298 * Make sure the reported number of snapshot ids wouldn't go 6299 * beyond the end of our buffer. But before checking that, 6300 * make sure the computed size of the snapshot context we 6301 * allocate is representable in a size_t. 6302 */ 6303 if (snap_count > (SIZE_MAX - sizeof (struct ceph_snap_context)) 6304 / sizeof (u64)) { 6305 ret = -EINVAL; 6306 goto out; 6307 } 6308 if (!ceph_has_room(&p, end, snap_count * sizeof (__le64))) 6309 goto out; 6310 ret = 0; 6311 6312 snapc = ceph_create_snap_context(snap_count, GFP_KERNEL); 6313 if (!snapc) { 6314 ret = -ENOMEM; 6315 goto out; 6316 } 6317 snapc->seq = seq; 6318 for (i = 0; i < snap_count; i++) 6319 snapc->snaps[i] = ceph_decode_64(&p); 6320 6321 ceph_put_snap_context(rbd_dev->header.snapc); 6322 rbd_dev->header.snapc = snapc; 6323 6324 dout(" snap context seq = %llu, snap_count = %u\n", 6325 (unsigned long long)seq, (unsigned int)snap_count); 6326 out: 6327 kfree(reply_buf); 6328 6329 return ret; 6330 } 6331 6332 static const char *rbd_dev_v2_snap_name(struct rbd_device *rbd_dev, 6333 u64 snap_id) 6334 { 6335 size_t size; 6336 void *reply_buf; 6337 __le64 snapid; 6338 int ret; 6339 void *p; 6340 void *end; 6341 char *snap_name; 6342 6343 size = sizeof (__le32) + RBD_MAX_SNAP_NAME_LEN; 6344 reply_buf = kmalloc(size, GFP_KERNEL); 6345 if (!reply_buf) 6346 return ERR_PTR(-ENOMEM); 6347 6348 snapid = cpu_to_le64(snap_id); 6349 ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, 6350 &rbd_dev->header_oloc, "get_snapshot_name", 6351 &snapid, sizeof(snapid), reply_buf, size); 6352 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6353 if (ret < 0) { 6354 snap_name = ERR_PTR(ret); 6355 goto out; 6356 } 6357 6358 p = reply_buf; 6359 end = reply_buf + ret; 6360 snap_name = ceph_extract_encoded_string(&p, end, NULL, GFP_KERNEL); 6361 if (IS_ERR(snap_name)) 6362 goto out; 6363 6364 dout(" snap_id 0x%016llx snap_name = %s\n", 6365 (unsigned long long)snap_id, snap_name); 6366 out: 6367 kfree(reply_buf); 6368 6369 return snap_name; 6370 } 6371 6372 static int rbd_dev_v2_header_info(struct rbd_device *rbd_dev) 6373 { 6374 bool first_time = rbd_dev->header.object_prefix == NULL; 6375 int ret; 6376 6377 ret = rbd_dev_v2_image_size(rbd_dev); 6378 if (ret) 6379 return ret; 6380 6381 if (first_time) { 6382 ret = rbd_dev_v2_header_onetime(rbd_dev); 6383 if (ret) 6384 return ret; 6385 } 6386 6387 ret = rbd_dev_v2_snap_context(rbd_dev); 6388 if (ret && first_time) { 6389 kfree(rbd_dev->header.object_prefix); 6390 rbd_dev->header.object_prefix = NULL; 6391 } 6392 6393 return ret; 6394 } 6395 6396 static int rbd_dev_header_info(struct rbd_device *rbd_dev) 6397 { 6398 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 6399 6400 if (rbd_dev->image_format == 1) 6401 return rbd_dev_v1_header_info(rbd_dev); 6402 6403 return rbd_dev_v2_header_info(rbd_dev); 6404 } 6405 6406 /* 6407 * Skips over white space at *buf, and updates *buf to point to the 6408 * first found non-space character (if any). Returns the length of 6409 * the token (string of non-white space characters) found. Note 6410 * that *buf must be terminated with '\0'. 6411 */ 6412 static inline size_t next_token(const char **buf) 6413 { 6414 /* 6415 * These are the characters that produce nonzero for 6416 * isspace() in the "C" and "POSIX" locales. 6417 */ 6418 const char *spaces = " \f\n\r\t\v"; 6419 6420 *buf += strspn(*buf, spaces); /* Find start of token */ 6421 6422 return strcspn(*buf, spaces); /* Return token length */ 6423 } 6424 6425 /* 6426 * Finds the next token in *buf, dynamically allocates a buffer big 6427 * enough to hold a copy of it, and copies the token into the new 6428 * buffer. The copy is guaranteed to be terminated with '\0'. Note 6429 * that a duplicate buffer is created even for a zero-length token. 6430 * 6431 * Returns a pointer to the newly-allocated duplicate, or a null 6432 * pointer if memory for the duplicate was not available. If 6433 * the lenp argument is a non-null pointer, the length of the token 6434 * (not including the '\0') is returned in *lenp. 6435 * 6436 * If successful, the *buf pointer will be updated to point beyond 6437 * the end of the found token. 6438 * 6439 * Note: uses GFP_KERNEL for allocation. 6440 */ 6441 static inline char *dup_token(const char **buf, size_t *lenp) 6442 { 6443 char *dup; 6444 size_t len; 6445 6446 len = next_token(buf); 6447 dup = kmemdup(*buf, len + 1, GFP_KERNEL); 6448 if (!dup) 6449 return NULL; 6450 *(dup + len) = '\0'; 6451 *buf += len; 6452 6453 if (lenp) 6454 *lenp = len; 6455 6456 return dup; 6457 } 6458 6459 /* 6460 * Parse the options provided for an "rbd add" (i.e., rbd image 6461 * mapping) request. These arrive via a write to /sys/bus/rbd/add, 6462 * and the data written is passed here via a NUL-terminated buffer. 6463 * Returns 0 if successful or an error code otherwise. 6464 * 6465 * The information extracted from these options is recorded in 6466 * the other parameters which return dynamically-allocated 6467 * structures: 6468 * ceph_opts 6469 * The address of a pointer that will refer to a ceph options 6470 * structure. Caller must release the returned pointer using 6471 * ceph_destroy_options() when it is no longer needed. 6472 * rbd_opts 6473 * Address of an rbd options pointer. Fully initialized by 6474 * this function; caller must release with kfree(). 6475 * spec 6476 * Address of an rbd image specification pointer. Fully 6477 * initialized by this function based on parsed options. 6478 * Caller must release with rbd_spec_put(). 6479 * 6480 * The options passed take this form: 6481 * <mon_addrs> <options> <pool_name> <image_name> [<snap_id>] 6482 * where: 6483 * <mon_addrs> 6484 * A comma-separated list of one or more monitor addresses. 6485 * A monitor address is an ip address, optionally followed 6486 * by a port number (separated by a colon). 6487 * I.e.: ip1[:port1][,ip2[:port2]...] 6488 * <options> 6489 * A comma-separated list of ceph and/or rbd options. 6490 * <pool_name> 6491 * The name of the rados pool containing the rbd image. 6492 * <image_name> 6493 * The name of the image in that pool to map. 6494 * <snap_id> 6495 * An optional snapshot id. If provided, the mapping will 6496 * present data from the image at the time that snapshot was 6497 * created. The image head is used if no snapshot id is 6498 * provided. Snapshot mappings are always read-only. 6499 */ 6500 static int rbd_add_parse_args(const char *buf, 6501 struct ceph_options **ceph_opts, 6502 struct rbd_options **opts, 6503 struct rbd_spec **rbd_spec) 6504 { 6505 size_t len; 6506 char *options; 6507 const char *mon_addrs; 6508 char *snap_name; 6509 size_t mon_addrs_size; 6510 struct parse_rbd_opts_ctx pctx = { 0 }; 6511 struct ceph_options *copts; 6512 int ret; 6513 6514 /* The first four tokens are required */ 6515 6516 len = next_token(&buf); 6517 if (!len) { 6518 rbd_warn(NULL, "no monitor address(es) provided"); 6519 return -EINVAL; 6520 } 6521 mon_addrs = buf; 6522 mon_addrs_size = len + 1; 6523 buf += len; 6524 6525 ret = -EINVAL; 6526 options = dup_token(&buf, NULL); 6527 if (!options) 6528 return -ENOMEM; 6529 if (!*options) { 6530 rbd_warn(NULL, "no options provided"); 6531 goto out_err; 6532 } 6533 6534 pctx.spec = rbd_spec_alloc(); 6535 if (!pctx.spec) 6536 goto out_mem; 6537 6538 pctx.spec->pool_name = dup_token(&buf, NULL); 6539 if (!pctx.spec->pool_name) 6540 goto out_mem; 6541 if (!*pctx.spec->pool_name) { 6542 rbd_warn(NULL, "no pool name provided"); 6543 goto out_err; 6544 } 6545 6546 pctx.spec->image_name = dup_token(&buf, NULL); 6547 if (!pctx.spec->image_name) 6548 goto out_mem; 6549 if (!*pctx.spec->image_name) { 6550 rbd_warn(NULL, "no image name provided"); 6551 goto out_err; 6552 } 6553 6554 /* 6555 * Snapshot name is optional; default is to use "-" 6556 * (indicating the head/no snapshot). 6557 */ 6558 len = next_token(&buf); 6559 if (!len) { 6560 buf = RBD_SNAP_HEAD_NAME; /* No snapshot supplied */ 6561 len = sizeof (RBD_SNAP_HEAD_NAME) - 1; 6562 } else if (len > RBD_MAX_SNAP_NAME_LEN) { 6563 ret = -ENAMETOOLONG; 6564 goto out_err; 6565 } 6566 snap_name = kmemdup(buf, len + 1, GFP_KERNEL); 6567 if (!snap_name) 6568 goto out_mem; 6569 *(snap_name + len) = '\0'; 6570 pctx.spec->snap_name = snap_name; 6571 6572 /* Initialize all rbd options to the defaults */ 6573 6574 pctx.opts = kzalloc(sizeof(*pctx.opts), GFP_KERNEL); 6575 if (!pctx.opts) 6576 goto out_mem; 6577 6578 pctx.opts->read_only = RBD_READ_ONLY_DEFAULT; 6579 pctx.opts->queue_depth = RBD_QUEUE_DEPTH_DEFAULT; 6580 pctx.opts->alloc_size = RBD_ALLOC_SIZE_DEFAULT; 6581 pctx.opts->lock_timeout = RBD_LOCK_TIMEOUT_DEFAULT; 6582 pctx.opts->lock_on_read = RBD_LOCK_ON_READ_DEFAULT; 6583 pctx.opts->exclusive = RBD_EXCLUSIVE_DEFAULT; 6584 pctx.opts->trim = RBD_TRIM_DEFAULT; 6585 6586 copts = ceph_parse_options(options, mon_addrs, 6587 mon_addrs + mon_addrs_size - 1, 6588 parse_rbd_opts_token, &pctx); 6589 if (IS_ERR(copts)) { 6590 ret = PTR_ERR(copts); 6591 goto out_err; 6592 } 6593 kfree(options); 6594 6595 *ceph_opts = copts; 6596 *opts = pctx.opts; 6597 *rbd_spec = pctx.spec; 6598 6599 return 0; 6600 out_mem: 6601 ret = -ENOMEM; 6602 out_err: 6603 kfree(pctx.opts); 6604 rbd_spec_put(pctx.spec); 6605 kfree(options); 6606 6607 return ret; 6608 } 6609 6610 static void rbd_dev_image_unlock(struct rbd_device *rbd_dev) 6611 { 6612 down_write(&rbd_dev->lock_rwsem); 6613 if (__rbd_is_lock_owner(rbd_dev)) 6614 __rbd_release_lock(rbd_dev); 6615 up_write(&rbd_dev->lock_rwsem); 6616 } 6617 6618 /* 6619 * If the wait is interrupted, an error is returned even if the lock 6620 * was successfully acquired. rbd_dev_image_unlock() will release it 6621 * if needed. 6622 */ 6623 static int rbd_add_acquire_lock(struct rbd_device *rbd_dev) 6624 { 6625 long ret; 6626 6627 if (!(rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK)) { 6628 if (!rbd_dev->opts->exclusive && !rbd_dev->opts->lock_on_read) 6629 return 0; 6630 6631 rbd_warn(rbd_dev, "exclusive-lock feature is not enabled"); 6632 return -EINVAL; 6633 } 6634 6635 if (rbd_dev->spec->snap_id != CEPH_NOSNAP) 6636 return 0; 6637 6638 rbd_assert(!rbd_is_lock_owner(rbd_dev)); 6639 queue_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0); 6640 ret = wait_for_completion_killable_timeout(&rbd_dev->acquire_wait, 6641 ceph_timeout_jiffies(rbd_dev->opts->lock_timeout)); 6642 if (ret > 0) { 6643 ret = rbd_dev->acquire_err; 6644 } else { 6645 cancel_delayed_work_sync(&rbd_dev->lock_dwork); 6646 if (!ret) 6647 ret = -ETIMEDOUT; 6648 } 6649 6650 if (ret) { 6651 rbd_warn(rbd_dev, "failed to acquire exclusive lock: %ld", ret); 6652 return ret; 6653 } 6654 6655 /* 6656 * The lock may have been released by now, unless automatic lock 6657 * transitions are disabled. 6658 */ 6659 rbd_assert(!rbd_dev->opts->exclusive || rbd_is_lock_owner(rbd_dev)); 6660 return 0; 6661 } 6662 6663 /* 6664 * An rbd format 2 image has a unique identifier, distinct from the 6665 * name given to it by the user. Internally, that identifier is 6666 * what's used to specify the names of objects related to the image. 6667 * 6668 * A special "rbd id" object is used to map an rbd image name to its 6669 * id. If that object doesn't exist, then there is no v2 rbd image 6670 * with the supplied name. 6671 * 6672 * This function will record the given rbd_dev's image_id field if 6673 * it can be determined, and in that case will return 0. If any 6674 * errors occur a negative errno will be returned and the rbd_dev's 6675 * image_id field will be unchanged (and should be NULL). 6676 */ 6677 static int rbd_dev_image_id(struct rbd_device *rbd_dev) 6678 { 6679 int ret; 6680 size_t size; 6681 CEPH_DEFINE_OID_ONSTACK(oid); 6682 void *response; 6683 char *image_id; 6684 6685 /* 6686 * When probing a parent image, the image id is already 6687 * known (and the image name likely is not). There's no 6688 * need to fetch the image id again in this case. We 6689 * do still need to set the image format though. 6690 */ 6691 if (rbd_dev->spec->image_id) { 6692 rbd_dev->image_format = *rbd_dev->spec->image_id ? 2 : 1; 6693 6694 return 0; 6695 } 6696 6697 /* 6698 * First, see if the format 2 image id file exists, and if 6699 * so, get the image's persistent id from it. 6700 */ 6701 ret = ceph_oid_aprintf(&oid, GFP_KERNEL, "%s%s", RBD_ID_PREFIX, 6702 rbd_dev->spec->image_name); 6703 if (ret) 6704 return ret; 6705 6706 dout("rbd id object name is %s\n", oid.name); 6707 6708 /* Response will be an encoded string, which includes a length */ 6709 size = sizeof (__le32) + RBD_IMAGE_ID_LEN_MAX; 6710 response = kzalloc(size, GFP_NOIO); 6711 if (!response) { 6712 ret = -ENOMEM; 6713 goto out; 6714 } 6715 6716 /* If it doesn't exist we'll assume it's a format 1 image */ 6717 6718 ret = rbd_obj_method_sync(rbd_dev, &oid, &rbd_dev->header_oloc, 6719 "get_id", NULL, 0, 6720 response, size); 6721 dout("%s: rbd_obj_method_sync returned %d\n", __func__, ret); 6722 if (ret == -ENOENT) { 6723 image_id = kstrdup("", GFP_KERNEL); 6724 ret = image_id ? 0 : -ENOMEM; 6725 if (!ret) 6726 rbd_dev->image_format = 1; 6727 } else if (ret >= 0) { 6728 void *p = response; 6729 6730 image_id = ceph_extract_encoded_string(&p, p + ret, 6731 NULL, GFP_NOIO); 6732 ret = PTR_ERR_OR_ZERO(image_id); 6733 if (!ret) 6734 rbd_dev->image_format = 2; 6735 } 6736 6737 if (!ret) { 6738 rbd_dev->spec->image_id = image_id; 6739 dout("image_id is %s\n", image_id); 6740 } 6741 out: 6742 kfree(response); 6743 ceph_oid_destroy(&oid); 6744 return ret; 6745 } 6746 6747 /* 6748 * Undo whatever state changes are made by v1 or v2 header info 6749 * call. 6750 */ 6751 static void rbd_dev_unprobe(struct rbd_device *rbd_dev) 6752 { 6753 struct rbd_image_header *header; 6754 6755 rbd_dev_parent_put(rbd_dev); 6756 rbd_object_map_free(rbd_dev); 6757 rbd_dev_mapping_clear(rbd_dev); 6758 6759 /* Free dynamic fields from the header, then zero it out */ 6760 6761 header = &rbd_dev->header; 6762 ceph_put_snap_context(header->snapc); 6763 kfree(header->snap_sizes); 6764 kfree(header->snap_names); 6765 kfree(header->object_prefix); 6766 memset(header, 0, sizeof (*header)); 6767 } 6768 6769 static int rbd_dev_v2_header_onetime(struct rbd_device *rbd_dev) 6770 { 6771 int ret; 6772 6773 ret = rbd_dev_v2_object_prefix(rbd_dev); 6774 if (ret) 6775 goto out_err; 6776 6777 /* 6778 * Get the and check features for the image. Currently the 6779 * features are assumed to never change. 6780 */ 6781 ret = rbd_dev_v2_features(rbd_dev); 6782 if (ret) 6783 goto out_err; 6784 6785 /* If the image supports fancy striping, get its parameters */ 6786 6787 if (rbd_dev->header.features & RBD_FEATURE_STRIPINGV2) { 6788 ret = rbd_dev_v2_striping_info(rbd_dev); 6789 if (ret < 0) 6790 goto out_err; 6791 } 6792 6793 if (rbd_dev->header.features & RBD_FEATURE_DATA_POOL) { 6794 ret = rbd_dev_v2_data_pool(rbd_dev); 6795 if (ret) 6796 goto out_err; 6797 } 6798 6799 rbd_init_layout(rbd_dev); 6800 return 0; 6801 6802 out_err: 6803 rbd_dev->header.features = 0; 6804 kfree(rbd_dev->header.object_prefix); 6805 rbd_dev->header.object_prefix = NULL; 6806 return ret; 6807 } 6808 6809 /* 6810 * @depth is rbd_dev_image_probe() -> rbd_dev_probe_parent() -> 6811 * rbd_dev_image_probe() recursion depth, which means it's also the 6812 * length of the already discovered part of the parent chain. 6813 */ 6814 static int rbd_dev_probe_parent(struct rbd_device *rbd_dev, int depth) 6815 { 6816 struct rbd_device *parent = NULL; 6817 int ret; 6818 6819 if (!rbd_dev->parent_spec) 6820 return 0; 6821 6822 if (++depth > RBD_MAX_PARENT_CHAIN_LEN) { 6823 pr_info("parent chain is too long (%d)\n", depth); 6824 ret = -EINVAL; 6825 goto out_err; 6826 } 6827 6828 parent = __rbd_dev_create(rbd_dev->rbd_client, rbd_dev->parent_spec); 6829 if (!parent) { 6830 ret = -ENOMEM; 6831 goto out_err; 6832 } 6833 6834 /* 6835 * Images related by parent/child relationships always share 6836 * rbd_client and spec/parent_spec, so bump their refcounts. 6837 */ 6838 __rbd_get_client(rbd_dev->rbd_client); 6839 rbd_spec_get(rbd_dev->parent_spec); 6840 6841 ret = rbd_dev_image_probe(parent, depth); 6842 if (ret < 0) 6843 goto out_err; 6844 6845 rbd_dev->parent = parent; 6846 atomic_set(&rbd_dev->parent_ref, 1); 6847 return 0; 6848 6849 out_err: 6850 rbd_dev_unparent(rbd_dev); 6851 rbd_dev_destroy(parent); 6852 return ret; 6853 } 6854 6855 static void rbd_dev_device_release(struct rbd_device *rbd_dev) 6856 { 6857 clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); 6858 rbd_free_disk(rbd_dev); 6859 if (!single_major) 6860 unregister_blkdev(rbd_dev->major, rbd_dev->name); 6861 } 6862 6863 /* 6864 * rbd_dev->header_rwsem must be locked for write and will be unlocked 6865 * upon return. 6866 */ 6867 static int rbd_dev_device_setup(struct rbd_device *rbd_dev) 6868 { 6869 int ret; 6870 6871 /* Record our major and minor device numbers. */ 6872 6873 if (!single_major) { 6874 ret = register_blkdev(0, rbd_dev->name); 6875 if (ret < 0) 6876 goto err_out_unlock; 6877 6878 rbd_dev->major = ret; 6879 rbd_dev->minor = 0; 6880 } else { 6881 rbd_dev->major = rbd_major; 6882 rbd_dev->minor = rbd_dev_id_to_minor(rbd_dev->dev_id); 6883 } 6884 6885 /* Set up the blkdev mapping. */ 6886 6887 ret = rbd_init_disk(rbd_dev); 6888 if (ret) 6889 goto err_out_blkdev; 6890 6891 set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE); 6892 set_disk_ro(rbd_dev->disk, rbd_dev->opts->read_only); 6893 6894 ret = dev_set_name(&rbd_dev->dev, "%d", rbd_dev->dev_id); 6895 if (ret) 6896 goto err_out_disk; 6897 6898 set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags); 6899 up_write(&rbd_dev->header_rwsem); 6900 return 0; 6901 6902 err_out_disk: 6903 rbd_free_disk(rbd_dev); 6904 err_out_blkdev: 6905 if (!single_major) 6906 unregister_blkdev(rbd_dev->major, rbd_dev->name); 6907 err_out_unlock: 6908 up_write(&rbd_dev->header_rwsem); 6909 return ret; 6910 } 6911 6912 static int rbd_dev_header_name(struct rbd_device *rbd_dev) 6913 { 6914 struct rbd_spec *spec = rbd_dev->spec; 6915 int ret; 6916 6917 /* Record the header object name for this rbd image. */ 6918 6919 rbd_assert(rbd_image_format_valid(rbd_dev->image_format)); 6920 if (rbd_dev->image_format == 1) 6921 ret = ceph_oid_aprintf(&rbd_dev->header_oid, GFP_KERNEL, "%s%s", 6922 spec->image_name, RBD_SUFFIX); 6923 else 6924 ret = ceph_oid_aprintf(&rbd_dev->header_oid, GFP_KERNEL, "%s%s", 6925 RBD_HEADER_PREFIX, spec->image_id); 6926 6927 return ret; 6928 } 6929 6930 static void rbd_dev_image_release(struct rbd_device *rbd_dev) 6931 { 6932 rbd_dev_unprobe(rbd_dev); 6933 if (rbd_dev->opts) 6934 rbd_unregister_watch(rbd_dev); 6935 rbd_dev->image_format = 0; 6936 kfree(rbd_dev->spec->image_id); 6937 rbd_dev->spec->image_id = NULL; 6938 } 6939 6940 /* 6941 * Probe for the existence of the header object for the given rbd 6942 * device. If this image is the one being mapped (i.e., not a 6943 * parent), initiate a watch on its header object before using that 6944 * object to get detailed information about the rbd image. 6945 */ 6946 static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth) 6947 { 6948 int ret; 6949 6950 /* 6951 * Get the id from the image id object. Unless there's an 6952 * error, rbd_dev->spec->image_id will be filled in with 6953 * a dynamically-allocated string, and rbd_dev->image_format 6954 * will be set to either 1 or 2. 6955 */ 6956 ret = rbd_dev_image_id(rbd_dev); 6957 if (ret) 6958 return ret; 6959 6960 ret = rbd_dev_header_name(rbd_dev); 6961 if (ret) 6962 goto err_out_format; 6963 6964 if (!depth) { 6965 ret = rbd_register_watch(rbd_dev); 6966 if (ret) { 6967 if (ret == -ENOENT) 6968 pr_info("image %s/%s%s%s does not exist\n", 6969 rbd_dev->spec->pool_name, 6970 rbd_dev->spec->pool_ns ?: "", 6971 rbd_dev->spec->pool_ns ? "/" : "", 6972 rbd_dev->spec->image_name); 6973 goto err_out_format; 6974 } 6975 } 6976 6977 ret = rbd_dev_header_info(rbd_dev); 6978 if (ret) 6979 goto err_out_watch; 6980 6981 /* 6982 * If this image is the one being mapped, we have pool name and 6983 * id, image name and id, and snap name - need to fill snap id. 6984 * Otherwise this is a parent image, identified by pool, image 6985 * and snap ids - need to fill in names for those ids. 6986 */ 6987 if (!depth) 6988 ret = rbd_spec_fill_snap_id(rbd_dev); 6989 else 6990 ret = rbd_spec_fill_names(rbd_dev); 6991 if (ret) { 6992 if (ret == -ENOENT) 6993 pr_info("snap %s/%s%s%s@%s does not exist\n", 6994 rbd_dev->spec->pool_name, 6995 rbd_dev->spec->pool_ns ?: "", 6996 rbd_dev->spec->pool_ns ? "/" : "", 6997 rbd_dev->spec->image_name, 6998 rbd_dev->spec->snap_name); 6999 goto err_out_probe; 7000 } 7001 7002 ret = rbd_dev_mapping_set(rbd_dev); 7003 if (ret) 7004 goto err_out_probe; 7005 7006 if (rbd_dev->spec->snap_id != CEPH_NOSNAP && 7007 (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) { 7008 ret = rbd_object_map_load(rbd_dev); 7009 if (ret) 7010 goto err_out_probe; 7011 } 7012 7013 if (rbd_dev->header.features & RBD_FEATURE_LAYERING) { 7014 ret = rbd_dev_v2_parent_info(rbd_dev); 7015 if (ret) 7016 goto err_out_probe; 7017 } 7018 7019 ret = rbd_dev_probe_parent(rbd_dev, depth); 7020 if (ret) 7021 goto err_out_probe; 7022 7023 dout("discovered format %u image, header name is %s\n", 7024 rbd_dev->image_format, rbd_dev->header_oid.name); 7025 return 0; 7026 7027 err_out_probe: 7028 rbd_dev_unprobe(rbd_dev); 7029 err_out_watch: 7030 if (!depth) 7031 rbd_unregister_watch(rbd_dev); 7032 err_out_format: 7033 rbd_dev->image_format = 0; 7034 kfree(rbd_dev->spec->image_id); 7035 rbd_dev->spec->image_id = NULL; 7036 return ret; 7037 } 7038 7039 static ssize_t do_rbd_add(struct bus_type *bus, 7040 const char *buf, 7041 size_t count) 7042 { 7043 struct rbd_device *rbd_dev = NULL; 7044 struct ceph_options *ceph_opts = NULL; 7045 struct rbd_options *rbd_opts = NULL; 7046 struct rbd_spec *spec = NULL; 7047 struct rbd_client *rbdc; 7048 int rc; 7049 7050 if (!try_module_get(THIS_MODULE)) 7051 return -ENODEV; 7052 7053 /* parse add command */ 7054 rc = rbd_add_parse_args(buf, &ceph_opts, &rbd_opts, &spec); 7055 if (rc < 0) 7056 goto out; 7057 7058 rbdc = rbd_get_client(ceph_opts); 7059 if (IS_ERR(rbdc)) { 7060 rc = PTR_ERR(rbdc); 7061 goto err_out_args; 7062 } 7063 7064 /* pick the pool */ 7065 rc = ceph_pg_poolid_by_name(rbdc->client->osdc.osdmap, spec->pool_name); 7066 if (rc < 0) { 7067 if (rc == -ENOENT) 7068 pr_info("pool %s does not exist\n", spec->pool_name); 7069 goto err_out_client; 7070 } 7071 spec->pool_id = (u64)rc; 7072 7073 rbd_dev = rbd_dev_create(rbdc, spec, rbd_opts); 7074 if (!rbd_dev) { 7075 rc = -ENOMEM; 7076 goto err_out_client; 7077 } 7078 rbdc = NULL; /* rbd_dev now owns this */ 7079 spec = NULL; /* rbd_dev now owns this */ 7080 rbd_opts = NULL; /* rbd_dev now owns this */ 7081 7082 rbd_dev->config_info = kstrdup(buf, GFP_KERNEL); 7083 if (!rbd_dev->config_info) { 7084 rc = -ENOMEM; 7085 goto err_out_rbd_dev; 7086 } 7087 7088 down_write(&rbd_dev->header_rwsem); 7089 rc = rbd_dev_image_probe(rbd_dev, 0); 7090 if (rc < 0) { 7091 up_write(&rbd_dev->header_rwsem); 7092 goto err_out_rbd_dev; 7093 } 7094 7095 /* If we are mapping a snapshot it must be marked read-only */ 7096 if (rbd_dev->spec->snap_id != CEPH_NOSNAP) 7097 rbd_dev->opts->read_only = true; 7098 7099 if (rbd_dev->opts->alloc_size > rbd_dev->layout.object_size) { 7100 rbd_warn(rbd_dev, "alloc_size adjusted to %u", 7101 rbd_dev->layout.object_size); 7102 rbd_dev->opts->alloc_size = rbd_dev->layout.object_size; 7103 } 7104 7105 rc = rbd_dev_device_setup(rbd_dev); 7106 if (rc) 7107 goto err_out_image_probe; 7108 7109 rc = rbd_add_acquire_lock(rbd_dev); 7110 if (rc) 7111 goto err_out_image_lock; 7112 7113 /* Everything's ready. Announce the disk to the world. */ 7114 7115 rc = device_add(&rbd_dev->dev); 7116 if (rc) 7117 goto err_out_image_lock; 7118 7119 add_disk(rbd_dev->disk); 7120 /* see rbd_init_disk() */ 7121 blk_put_queue(rbd_dev->disk->queue); 7122 7123 spin_lock(&rbd_dev_list_lock); 7124 list_add_tail(&rbd_dev->node, &rbd_dev_list); 7125 spin_unlock(&rbd_dev_list_lock); 7126 7127 pr_info("%s: capacity %llu features 0x%llx\n", rbd_dev->disk->disk_name, 7128 (unsigned long long)get_capacity(rbd_dev->disk) << SECTOR_SHIFT, 7129 rbd_dev->header.features); 7130 rc = count; 7131 out: 7132 module_put(THIS_MODULE); 7133 return rc; 7134 7135 err_out_image_lock: 7136 rbd_dev_image_unlock(rbd_dev); 7137 rbd_dev_device_release(rbd_dev); 7138 err_out_image_probe: 7139 rbd_dev_image_release(rbd_dev); 7140 err_out_rbd_dev: 7141 rbd_dev_destroy(rbd_dev); 7142 err_out_client: 7143 rbd_put_client(rbdc); 7144 err_out_args: 7145 rbd_spec_put(spec); 7146 kfree(rbd_opts); 7147 goto out; 7148 } 7149 7150 static ssize_t add_store(struct bus_type *bus, const char *buf, size_t count) 7151 { 7152 if (single_major) 7153 return -EINVAL; 7154 7155 return do_rbd_add(bus, buf, count); 7156 } 7157 7158 static ssize_t add_single_major_store(struct bus_type *bus, const char *buf, 7159 size_t count) 7160 { 7161 return do_rbd_add(bus, buf, count); 7162 } 7163 7164 static void rbd_dev_remove_parent(struct rbd_device *rbd_dev) 7165 { 7166 while (rbd_dev->parent) { 7167 struct rbd_device *first = rbd_dev; 7168 struct rbd_device *second = first->parent; 7169 struct rbd_device *third; 7170 7171 /* 7172 * Follow to the parent with no grandparent and 7173 * remove it. 7174 */ 7175 while (second && (third = second->parent)) { 7176 first = second; 7177 second = third; 7178 } 7179 rbd_assert(second); 7180 rbd_dev_image_release(second); 7181 rbd_dev_destroy(second); 7182 first->parent = NULL; 7183 first->parent_overlap = 0; 7184 7185 rbd_assert(first->parent_spec); 7186 rbd_spec_put(first->parent_spec); 7187 first->parent_spec = NULL; 7188 } 7189 } 7190 7191 static ssize_t do_rbd_remove(struct bus_type *bus, 7192 const char *buf, 7193 size_t count) 7194 { 7195 struct rbd_device *rbd_dev = NULL; 7196 struct list_head *tmp; 7197 int dev_id; 7198 char opt_buf[6]; 7199 bool force = false; 7200 int ret; 7201 7202 dev_id = -1; 7203 opt_buf[0] = '\0'; 7204 sscanf(buf, "%d %5s", &dev_id, opt_buf); 7205 if (dev_id < 0) { 7206 pr_err("dev_id out of range\n"); 7207 return -EINVAL; 7208 } 7209 if (opt_buf[0] != '\0') { 7210 if (!strcmp(opt_buf, "force")) { 7211 force = true; 7212 } else { 7213 pr_err("bad remove option at '%s'\n", opt_buf); 7214 return -EINVAL; 7215 } 7216 } 7217 7218 ret = -ENOENT; 7219 spin_lock(&rbd_dev_list_lock); 7220 list_for_each(tmp, &rbd_dev_list) { 7221 rbd_dev = list_entry(tmp, struct rbd_device, node); 7222 if (rbd_dev->dev_id == dev_id) { 7223 ret = 0; 7224 break; 7225 } 7226 } 7227 if (!ret) { 7228 spin_lock_irq(&rbd_dev->lock); 7229 if (rbd_dev->open_count && !force) 7230 ret = -EBUSY; 7231 else if (test_and_set_bit(RBD_DEV_FLAG_REMOVING, 7232 &rbd_dev->flags)) 7233 ret = -EINPROGRESS; 7234 spin_unlock_irq(&rbd_dev->lock); 7235 } 7236 spin_unlock(&rbd_dev_list_lock); 7237 if (ret) 7238 return ret; 7239 7240 if (force) { 7241 /* 7242 * Prevent new IO from being queued and wait for existing 7243 * IO to complete/fail. 7244 */ 7245 blk_mq_freeze_queue(rbd_dev->disk->queue); 7246 blk_set_queue_dying(rbd_dev->disk->queue); 7247 } 7248 7249 del_gendisk(rbd_dev->disk); 7250 spin_lock(&rbd_dev_list_lock); 7251 list_del_init(&rbd_dev->node); 7252 spin_unlock(&rbd_dev_list_lock); 7253 device_del(&rbd_dev->dev); 7254 7255 rbd_dev_image_unlock(rbd_dev); 7256 rbd_dev_device_release(rbd_dev); 7257 rbd_dev_image_release(rbd_dev); 7258 rbd_dev_destroy(rbd_dev); 7259 return count; 7260 } 7261 7262 static ssize_t remove_store(struct bus_type *bus, const char *buf, size_t count) 7263 { 7264 if (single_major) 7265 return -EINVAL; 7266 7267 return do_rbd_remove(bus, buf, count); 7268 } 7269 7270 static ssize_t remove_single_major_store(struct bus_type *bus, const char *buf, 7271 size_t count) 7272 { 7273 return do_rbd_remove(bus, buf, count); 7274 } 7275 7276 /* 7277 * create control files in sysfs 7278 * /sys/bus/rbd/... 7279 */ 7280 static int __init rbd_sysfs_init(void) 7281 { 7282 int ret; 7283 7284 ret = device_register(&rbd_root_dev); 7285 if (ret < 0) 7286 return ret; 7287 7288 ret = bus_register(&rbd_bus_type); 7289 if (ret < 0) 7290 device_unregister(&rbd_root_dev); 7291 7292 return ret; 7293 } 7294 7295 static void __exit rbd_sysfs_cleanup(void) 7296 { 7297 bus_unregister(&rbd_bus_type); 7298 device_unregister(&rbd_root_dev); 7299 } 7300 7301 static int __init rbd_slab_init(void) 7302 { 7303 rbd_assert(!rbd_img_request_cache); 7304 rbd_img_request_cache = KMEM_CACHE(rbd_img_request, 0); 7305 if (!rbd_img_request_cache) 7306 return -ENOMEM; 7307 7308 rbd_assert(!rbd_obj_request_cache); 7309 rbd_obj_request_cache = KMEM_CACHE(rbd_obj_request, 0); 7310 if (!rbd_obj_request_cache) 7311 goto out_err; 7312 7313 return 0; 7314 7315 out_err: 7316 kmem_cache_destroy(rbd_img_request_cache); 7317 rbd_img_request_cache = NULL; 7318 return -ENOMEM; 7319 } 7320 7321 static void rbd_slab_exit(void) 7322 { 7323 rbd_assert(rbd_obj_request_cache); 7324 kmem_cache_destroy(rbd_obj_request_cache); 7325 rbd_obj_request_cache = NULL; 7326 7327 rbd_assert(rbd_img_request_cache); 7328 kmem_cache_destroy(rbd_img_request_cache); 7329 rbd_img_request_cache = NULL; 7330 } 7331 7332 static int __init rbd_init(void) 7333 { 7334 int rc; 7335 7336 if (!libceph_compatible(NULL)) { 7337 rbd_warn(NULL, "libceph incompatibility (quitting)"); 7338 return -EINVAL; 7339 } 7340 7341 rc = rbd_slab_init(); 7342 if (rc) 7343 return rc; 7344 7345 /* 7346 * The number of active work items is limited by the number of 7347 * rbd devices * queue depth, so leave @max_active at default. 7348 */ 7349 rbd_wq = alloc_workqueue(RBD_DRV_NAME, WQ_MEM_RECLAIM, 0); 7350 if (!rbd_wq) { 7351 rc = -ENOMEM; 7352 goto err_out_slab; 7353 } 7354 7355 if (single_major) { 7356 rbd_major = register_blkdev(0, RBD_DRV_NAME); 7357 if (rbd_major < 0) { 7358 rc = rbd_major; 7359 goto err_out_wq; 7360 } 7361 } 7362 7363 rc = rbd_sysfs_init(); 7364 if (rc) 7365 goto err_out_blkdev; 7366 7367 if (single_major) 7368 pr_info("loaded (major %d)\n", rbd_major); 7369 else 7370 pr_info("loaded\n"); 7371 7372 return 0; 7373 7374 err_out_blkdev: 7375 if (single_major) 7376 unregister_blkdev(rbd_major, RBD_DRV_NAME); 7377 err_out_wq: 7378 destroy_workqueue(rbd_wq); 7379 err_out_slab: 7380 rbd_slab_exit(); 7381 return rc; 7382 } 7383 7384 static void __exit rbd_exit(void) 7385 { 7386 ida_destroy(&rbd_dev_id_ida); 7387 rbd_sysfs_cleanup(); 7388 if (single_major) 7389 unregister_blkdev(rbd_major, RBD_DRV_NAME); 7390 destroy_workqueue(rbd_wq); 7391 rbd_slab_exit(); 7392 } 7393 7394 module_init(rbd_init); 7395 module_exit(rbd_exit); 7396 7397 MODULE_AUTHOR("Alex Elder <elder@inktank.com>"); 7398 MODULE_AUTHOR("Sage Weil <sage@newdream.net>"); 7399 MODULE_AUTHOR("Yehuda Sadeh <yehuda@hq.newdream.net>"); 7400 /* following authorship retained from original osdblk.c */ 7401 MODULE_AUTHOR("Jeff Garzik <jeff@garzik.org>"); 7402 7403 MODULE_DESCRIPTION("RADOS Block Device (RBD) driver"); 7404 MODULE_LICENSE("GPL"); 7405