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