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