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