null_blk: move shared definitions to header file
[linux-block.git] / drivers / block / null_blk.c
CommitLineData
3bf2bd20
SL
1/*
2 * Add configfs and memory store: Kyungchan Koh <kkc6196@fb.com> and
3 * Shaohua Li <shli@fb.com>
4 */
f2298c04 5#include <linux/module.h>
fc1bc354 6
f2298c04
JA
7#include <linux/moduleparam.h>
8#include <linux/sched.h>
9#include <linux/fs.h>
f2298c04 10#include <linux/init.h>
6dad38d3 11#include "null_blk.h"
f2298c04 12
5bcd0e0c
SL
13#define PAGE_SECTORS_SHIFT (PAGE_SHIFT - SECTOR_SHIFT)
14#define PAGE_SECTORS (1 << PAGE_SECTORS_SHIFT)
5bcd0e0c
SL
15#define SECTOR_MASK (PAGE_SECTORS - 1)
16
17#define FREE_BATCH 16
18
eff2c4f1
SL
19#define TICKS_PER_SEC 50ULL
20#define TIMER_INTERVAL (NSEC_PER_SEC / TICKS_PER_SEC)
21
33f782c4 22#ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
93b57046 23static DECLARE_FAULT_ATTR(null_timeout_attr);
24941b90 24static DECLARE_FAULT_ATTR(null_requeue_attr);
33f782c4 25#endif
93b57046 26
eff2c4f1
SL
27static inline u64 mb_per_tick(int mbps)
28{
29 return (1 << 20) / TICKS_PER_SEC * ((u64) mbps);
30}
f2298c04 31
3bf2bd20
SL
32/*
33 * Status flags for nullb_device.
34 *
35 * CONFIGURED: Device has been configured and turned on. Cannot reconfigure.
36 * UP: Device is currently on and visible in userspace.
eff2c4f1 37 * THROTTLED: Device is being throttled.
deb78b41 38 * CACHE: Device is using a write-back cache.
3bf2bd20
SL
39 */
40enum nullb_device_flags {
41 NULLB_DEV_FL_CONFIGURED = 0,
42 NULLB_DEV_FL_UP = 1,
eff2c4f1 43 NULLB_DEV_FL_THROTTLED = 2,
deb78b41 44 NULLB_DEV_FL_CACHE = 3,
3bf2bd20
SL
45};
46
66231ad3 47#define MAP_SZ ((PAGE_SIZE >> SECTOR_SHIFT) + 2)
5bcd0e0c
SL
48/*
49 * nullb_page is a page in memory for nullb devices.
50 *
51 * @page: The page holding the data.
52 * @bitmap: The bitmap represents which sector in the page has data.
53 * Each bit represents one block size. For example, sector 8
54 * will use the 7th bit
deb78b41
SL
55 * The highest 2 bits of bitmap are for special purpose. LOCK means the cache
56 * page is being flushing to storage. FREE means the cache page is freed and
57 * should be skipped from flushing to storage. Please see
58 * null_make_cache_space
5bcd0e0c
SL
59 */
60struct nullb_page {
61 struct page *page;
66231ad3 62 DECLARE_BITMAP(bitmap, MAP_SZ);
5bcd0e0c 63};
66231ad3
ML
64#define NULLB_PAGE_LOCK (MAP_SZ - 1)
65#define NULLB_PAGE_FREE (MAP_SZ - 2)
5bcd0e0c 66
f2298c04
JA
67static LIST_HEAD(nullb_list);
68static struct mutex lock;
69static int null_major;
94bc02e3 70static DEFINE_IDA(nullb_indexes);
82f402fe 71static struct blk_mq_tag_set tag_set;
f2298c04 72
f2298c04
JA
73enum {
74 NULL_IRQ_NONE = 0,
75 NULL_IRQ_SOFTIRQ = 1,
76 NULL_IRQ_TIMER = 2,
ce2c350b 77};
f2298c04 78
ce2c350b 79enum {
f2298c04
JA
80 NULL_Q_BIO = 0,
81 NULL_Q_RQ = 1,
82 NULL_Q_MQ = 2,
83};
84
b3cffc38 85static int g_no_sched;
5657a819 86module_param_named(no_sched, g_no_sched, int, 0444);
b3cffc38 87MODULE_PARM_DESC(no_sched, "No io scheduler");
88
2984c868 89static int g_submit_queues = 1;
5657a819 90module_param_named(submit_queues, g_submit_queues, int, 0444);
f2298c04
JA
91MODULE_PARM_DESC(submit_queues, "Number of submission queues");
92
2984c868 93static int g_home_node = NUMA_NO_NODE;
5657a819 94module_param_named(home_node, g_home_node, int, 0444);
f2298c04
JA
95MODULE_PARM_DESC(home_node, "Home node for the device");
96
33f782c4 97#ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
93b57046 98static char g_timeout_str[80];
5657a819 99module_param_string(timeout, g_timeout_str, sizeof(g_timeout_str), 0444);
24941b90
JA
100
101static char g_requeue_str[80];
5657a819 102module_param_string(requeue, g_requeue_str, sizeof(g_requeue_str), 0444);
33f782c4 103#endif
93b57046 104
2984c868 105static int g_queue_mode = NULL_Q_MQ;
709c8667
MB
106
107static int null_param_store_val(const char *str, int *val, int min, int max)
108{
109 int ret, new_val;
110
111 ret = kstrtoint(str, 10, &new_val);
112 if (ret)
113 return -EINVAL;
114
115 if (new_val < min || new_val > max)
116 return -EINVAL;
117
118 *val = new_val;
119 return 0;
120}
121
122static int null_set_queue_mode(const char *str, const struct kernel_param *kp)
123{
2984c868 124 return null_param_store_val(str, &g_queue_mode, NULL_Q_BIO, NULL_Q_MQ);
709c8667
MB
125}
126
9c27847d 127static const struct kernel_param_ops null_queue_mode_param_ops = {
709c8667
MB
128 .set = null_set_queue_mode,
129 .get = param_get_int,
130};
131
5657a819 132device_param_cb(queue_mode, &null_queue_mode_param_ops, &g_queue_mode, 0444);
54ae81cd 133MODULE_PARM_DESC(queue_mode, "Block interface to use (0=bio,1=rq,2=multiqueue)");
f2298c04 134
2984c868 135static int g_gb = 250;
5657a819 136module_param_named(gb, g_gb, int, 0444);
f2298c04
JA
137MODULE_PARM_DESC(gb, "Size in GB");
138
2984c868 139static int g_bs = 512;
5657a819 140module_param_named(bs, g_bs, int, 0444);
f2298c04
JA
141MODULE_PARM_DESC(bs, "Block size (in bytes)");
142
82f402fe 143static int nr_devices = 1;
5657a819 144module_param(nr_devices, int, 0444);
f2298c04
JA
145MODULE_PARM_DESC(nr_devices, "Number of devices to register");
146
2984c868 147static bool g_blocking;
5657a819 148module_param_named(blocking, g_blocking, bool, 0444);
db5bcf87
JA
149MODULE_PARM_DESC(blocking, "Register as a blocking blk-mq driver device");
150
82f402fe 151static bool shared_tags;
5657a819 152module_param(shared_tags, bool, 0444);
82f402fe
JA
153MODULE_PARM_DESC(shared_tags, "Share tag set between devices for blk-mq");
154
2984c868 155static int g_irqmode = NULL_IRQ_SOFTIRQ;
709c8667
MB
156
157static int null_set_irqmode(const char *str, const struct kernel_param *kp)
158{
2984c868 159 return null_param_store_val(str, &g_irqmode, NULL_IRQ_NONE,
709c8667
MB
160 NULL_IRQ_TIMER);
161}
162
9c27847d 163static const struct kernel_param_ops null_irqmode_param_ops = {
709c8667
MB
164 .set = null_set_irqmode,
165 .get = param_get_int,
166};
167
5657a819 168device_param_cb(irqmode, &null_irqmode_param_ops, &g_irqmode, 0444);
f2298c04
JA
169MODULE_PARM_DESC(irqmode, "IRQ completion handler. 0-none, 1-softirq, 2-timer");
170
2984c868 171static unsigned long g_completion_nsec = 10000;
5657a819 172module_param_named(completion_nsec, g_completion_nsec, ulong, 0444);
f2298c04
JA
173MODULE_PARM_DESC(completion_nsec, "Time in ns to complete a request in hardware. Default: 10,000ns");
174
2984c868 175static int g_hw_queue_depth = 64;
5657a819 176module_param_named(hw_queue_depth, g_hw_queue_depth, int, 0444);
f2298c04
JA
177MODULE_PARM_DESC(hw_queue_depth, "Queue depth for each hardware queue. Default: 64");
178
2984c868 179static bool g_use_per_node_hctx;
5657a819 180module_param_named(use_per_node_hctx, g_use_per_node_hctx, bool, 0444);
20005244 181MODULE_PARM_DESC(use_per_node_hctx, "Use per-node allocation for hardware context queues. Default: false");
f2298c04 182
3bf2bd20
SL
183static struct nullb_device *null_alloc_dev(void);
184static void null_free_dev(struct nullb_device *dev);
cedcafad
SL
185static void null_del_dev(struct nullb *nullb);
186static int null_add_dev(struct nullb_device *dev);
deb78b41 187static void null_free_device_storage(struct nullb_device *dev, bool is_cache);
3bf2bd20
SL
188
189static inline struct nullb_device *to_nullb_device(struct config_item *item)
190{
191 return item ? container_of(item, struct nullb_device, item) : NULL;
192}
193
194static inline ssize_t nullb_device_uint_attr_show(unsigned int val, char *page)
195{
196 return snprintf(page, PAGE_SIZE, "%u\n", val);
197}
198
199static inline ssize_t nullb_device_ulong_attr_show(unsigned long val,
200 char *page)
201{
202 return snprintf(page, PAGE_SIZE, "%lu\n", val);
203}
204
205static inline ssize_t nullb_device_bool_attr_show(bool val, char *page)
206{
207 return snprintf(page, PAGE_SIZE, "%u\n", val);
208}
209
210static ssize_t nullb_device_uint_attr_store(unsigned int *val,
211 const char *page, size_t count)
212{
213 unsigned int tmp;
214 int result;
215
216 result = kstrtouint(page, 0, &tmp);
217 if (result)
218 return result;
219
220 *val = tmp;
221 return count;
222}
223
224static ssize_t nullb_device_ulong_attr_store(unsigned long *val,
225 const char *page, size_t count)
226{
227 int result;
228 unsigned long tmp;
229
230 result = kstrtoul(page, 0, &tmp);
231 if (result)
232 return result;
233
234 *val = tmp;
235 return count;
236}
237
238static ssize_t nullb_device_bool_attr_store(bool *val, const char *page,
239 size_t count)
240{
241 bool tmp;
242 int result;
243
244 result = kstrtobool(page, &tmp);
245 if (result)
246 return result;
247
248 *val = tmp;
249 return count;
250}
251
252/* The following macro should only be used with TYPE = {uint, ulong, bool}. */
253#define NULLB_DEVICE_ATTR(NAME, TYPE) \
254static ssize_t \
255nullb_device_##NAME##_show(struct config_item *item, char *page) \
256{ \
257 return nullb_device_##TYPE##_attr_show( \
258 to_nullb_device(item)->NAME, page); \
259} \
260static ssize_t \
261nullb_device_##NAME##_store(struct config_item *item, const char *page, \
262 size_t count) \
263{ \
264 if (test_bit(NULLB_DEV_FL_CONFIGURED, &to_nullb_device(item)->flags)) \
265 return -EBUSY; \
266 return nullb_device_##TYPE##_attr_store( \
267 &to_nullb_device(item)->NAME, page, count); \
268} \
269CONFIGFS_ATTR(nullb_device_, NAME);
270
271NULLB_DEVICE_ATTR(size, ulong);
272NULLB_DEVICE_ATTR(completion_nsec, ulong);
273NULLB_DEVICE_ATTR(submit_queues, uint);
274NULLB_DEVICE_ATTR(home_node, uint);
275NULLB_DEVICE_ATTR(queue_mode, uint);
276NULLB_DEVICE_ATTR(blocksize, uint);
277NULLB_DEVICE_ATTR(irqmode, uint);
278NULLB_DEVICE_ATTR(hw_queue_depth, uint);
cedcafad 279NULLB_DEVICE_ATTR(index, uint);
3bf2bd20
SL
280NULLB_DEVICE_ATTR(blocking, bool);
281NULLB_DEVICE_ATTR(use_per_node_hctx, bool);
5bcd0e0c 282NULLB_DEVICE_ATTR(memory_backed, bool);
306eb6b4 283NULLB_DEVICE_ATTR(discard, bool);
eff2c4f1 284NULLB_DEVICE_ATTR(mbps, uint);
deb78b41 285NULLB_DEVICE_ATTR(cache_size, ulong);
3bf2bd20 286
cedcafad
SL
287static ssize_t nullb_device_power_show(struct config_item *item, char *page)
288{
289 return nullb_device_bool_attr_show(to_nullb_device(item)->power, page);
290}
291
292static ssize_t nullb_device_power_store(struct config_item *item,
293 const char *page, size_t count)
294{
295 struct nullb_device *dev = to_nullb_device(item);
296 bool newp = false;
297 ssize_t ret;
298
299 ret = nullb_device_bool_attr_store(&newp, page, count);
300 if (ret < 0)
301 return ret;
302
303 if (!dev->power && newp) {
304 if (test_and_set_bit(NULLB_DEV_FL_UP, &dev->flags))
305 return count;
306 if (null_add_dev(dev)) {
307 clear_bit(NULLB_DEV_FL_UP, &dev->flags);
308 return -ENOMEM;
309 }
310
311 set_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags);
312 dev->power = newp;
b3c30512 313 } else if (dev->power && !newp) {
cedcafad
SL
314 mutex_lock(&lock);
315 dev->power = newp;
316 null_del_dev(dev->nullb);
317 mutex_unlock(&lock);
318 clear_bit(NULLB_DEV_FL_UP, &dev->flags);
00a8cdb8 319 clear_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags);
cedcafad
SL
320 }
321
322 return count;
323}
324
325CONFIGFS_ATTR(nullb_device_, power);
326
2f54a613
SL
327static ssize_t nullb_device_badblocks_show(struct config_item *item, char *page)
328{
329 struct nullb_device *t_dev = to_nullb_device(item);
330
331 return badblocks_show(&t_dev->badblocks, page, 0);
332}
333
334static ssize_t nullb_device_badblocks_store(struct config_item *item,
335 const char *page, size_t count)
336{
337 struct nullb_device *t_dev = to_nullb_device(item);
338 char *orig, *buf, *tmp;
339 u64 start, end;
340 int ret;
341
342 orig = kstrndup(page, count, GFP_KERNEL);
343 if (!orig)
344 return -ENOMEM;
345
346 buf = strstrip(orig);
347
348 ret = -EINVAL;
349 if (buf[0] != '+' && buf[0] != '-')
350 goto out;
351 tmp = strchr(&buf[1], '-');
352 if (!tmp)
353 goto out;
354 *tmp = '\0';
355 ret = kstrtoull(buf + 1, 0, &start);
356 if (ret)
357 goto out;
358 ret = kstrtoull(tmp + 1, 0, &end);
359 if (ret)
360 goto out;
361 ret = -EINVAL;
362 if (start > end)
363 goto out;
364 /* enable badblocks */
365 cmpxchg(&t_dev->badblocks.shift, -1, 0);
366 if (buf[0] == '+')
367 ret = badblocks_set(&t_dev->badblocks, start,
368 end - start + 1, 1);
369 else
370 ret = badblocks_clear(&t_dev->badblocks, start,
371 end - start + 1);
372 if (ret == 0)
373 ret = count;
374out:
375 kfree(orig);
376 return ret;
377}
378CONFIGFS_ATTR(nullb_device_, badblocks);
379
3bf2bd20
SL
380static struct configfs_attribute *nullb_device_attrs[] = {
381 &nullb_device_attr_size,
382 &nullb_device_attr_completion_nsec,
383 &nullb_device_attr_submit_queues,
384 &nullb_device_attr_home_node,
385 &nullb_device_attr_queue_mode,
386 &nullb_device_attr_blocksize,
387 &nullb_device_attr_irqmode,
388 &nullb_device_attr_hw_queue_depth,
cedcafad 389 &nullb_device_attr_index,
3bf2bd20
SL
390 &nullb_device_attr_blocking,
391 &nullb_device_attr_use_per_node_hctx,
cedcafad 392 &nullb_device_attr_power,
5bcd0e0c 393 &nullb_device_attr_memory_backed,
306eb6b4 394 &nullb_device_attr_discard,
eff2c4f1 395 &nullb_device_attr_mbps,
deb78b41 396 &nullb_device_attr_cache_size,
2f54a613 397 &nullb_device_attr_badblocks,
3bf2bd20
SL
398 NULL,
399};
400
401static void nullb_device_release(struct config_item *item)
402{
5bcd0e0c
SL
403 struct nullb_device *dev = to_nullb_device(item);
404
deb78b41 405 null_free_device_storage(dev, false);
5bcd0e0c 406 null_free_dev(dev);
3bf2bd20
SL
407}
408
409static struct configfs_item_operations nullb_device_ops = {
410 .release = nullb_device_release,
411};
412
e1919dff 413static const struct config_item_type nullb_device_type = {
3bf2bd20
SL
414 .ct_item_ops = &nullb_device_ops,
415 .ct_attrs = nullb_device_attrs,
416 .ct_owner = THIS_MODULE,
417};
418
419static struct
420config_item *nullb_group_make_item(struct config_group *group, const char *name)
421{
422 struct nullb_device *dev;
423
424 dev = null_alloc_dev();
425 if (!dev)
426 return ERR_PTR(-ENOMEM);
427
428 config_item_init_type_name(&dev->item, name, &nullb_device_type);
429
430 return &dev->item;
431}
432
433static void
434nullb_group_drop_item(struct config_group *group, struct config_item *item)
435{
cedcafad
SL
436 struct nullb_device *dev = to_nullb_device(item);
437
438 if (test_and_clear_bit(NULLB_DEV_FL_UP, &dev->flags)) {
439 mutex_lock(&lock);
440 dev->power = false;
441 null_del_dev(dev->nullb);
442 mutex_unlock(&lock);
443 }
444
3bf2bd20
SL
445 config_item_put(item);
446}
447
448static ssize_t memb_group_features_show(struct config_item *item, char *page)
449{
2f54a613 450 return snprintf(page, PAGE_SIZE, "memory_backed,discard,bandwidth,cache,badblocks\n");
3bf2bd20
SL
451}
452
453CONFIGFS_ATTR_RO(memb_group_, features);
454
455static struct configfs_attribute *nullb_group_attrs[] = {
456 &memb_group_attr_features,
457 NULL,
458};
459
460static struct configfs_group_operations nullb_group_ops = {
461 .make_item = nullb_group_make_item,
462 .drop_item = nullb_group_drop_item,
463};
464
e1919dff 465static const struct config_item_type nullb_group_type = {
3bf2bd20
SL
466 .ct_group_ops = &nullb_group_ops,
467 .ct_attrs = nullb_group_attrs,
468 .ct_owner = THIS_MODULE,
469};
470
471static struct configfs_subsystem nullb_subsys = {
472 .su_group = {
473 .cg_item = {
474 .ci_namebuf = "nullb",
475 .ci_type = &nullb_group_type,
476 },
477 },
478};
479
deb78b41
SL
480static inline int null_cache_active(struct nullb *nullb)
481{
482 return test_bit(NULLB_DEV_FL_CACHE, &nullb->dev->flags);
483}
484
2984c868
SL
485static struct nullb_device *null_alloc_dev(void)
486{
487 struct nullb_device *dev;
488
489 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
490 if (!dev)
491 return NULL;
5bcd0e0c 492 INIT_RADIX_TREE(&dev->data, GFP_ATOMIC);
deb78b41 493 INIT_RADIX_TREE(&dev->cache, GFP_ATOMIC);
2f54a613
SL
494 if (badblocks_init(&dev->badblocks, 0)) {
495 kfree(dev);
496 return NULL;
497 }
498
2984c868
SL
499 dev->size = g_gb * 1024;
500 dev->completion_nsec = g_completion_nsec;
501 dev->submit_queues = g_submit_queues;
502 dev->home_node = g_home_node;
503 dev->queue_mode = g_queue_mode;
504 dev->blocksize = g_bs;
505 dev->irqmode = g_irqmode;
506 dev->hw_queue_depth = g_hw_queue_depth;
2984c868
SL
507 dev->blocking = g_blocking;
508 dev->use_per_node_hctx = g_use_per_node_hctx;
509 return dev;
510}
511
512static void null_free_dev(struct nullb_device *dev)
513{
1addb798
DD
514 if (!dev)
515 return;
516
517 badblocks_exit(&dev->badblocks);
2984c868
SL
518 kfree(dev);
519}
520
f2298c04
JA
521static void put_tag(struct nullb_queue *nq, unsigned int tag)
522{
523 clear_bit_unlock(tag, nq->tag_map);
524
525 if (waitqueue_active(&nq->wait))
526 wake_up(&nq->wait);
527}
528
529static unsigned int get_tag(struct nullb_queue *nq)
530{
531 unsigned int tag;
532
533 do {
534 tag = find_first_zero_bit(nq->tag_map, nq->queue_depth);
535 if (tag >= nq->queue_depth)
536 return -1U;
537 } while (test_and_set_bit_lock(tag, nq->tag_map));
538
539 return tag;
540}
541
542static void free_cmd(struct nullb_cmd *cmd)
543{
544 put_tag(cmd->nq, cmd->tag);
545}
546
3c395a96
PV
547static enum hrtimer_restart null_cmd_timer_expired(struct hrtimer *timer);
548
f2298c04
JA
549static struct nullb_cmd *__alloc_cmd(struct nullb_queue *nq)
550{
551 struct nullb_cmd *cmd;
552 unsigned int tag;
553
554 tag = get_tag(nq);
555 if (tag != -1U) {
556 cmd = &nq->cmds[tag];
557 cmd->tag = tag;
558 cmd->nq = nq;
2984c868 559 if (nq->dev->irqmode == NULL_IRQ_TIMER) {
3c395a96
PV
560 hrtimer_init(&cmd->timer, CLOCK_MONOTONIC,
561 HRTIMER_MODE_REL);
562 cmd->timer.function = null_cmd_timer_expired;
563 }
f2298c04
JA
564 return cmd;
565 }
566
567 return NULL;
568}
569
570static struct nullb_cmd *alloc_cmd(struct nullb_queue *nq, int can_wait)
571{
572 struct nullb_cmd *cmd;
573 DEFINE_WAIT(wait);
574
575 cmd = __alloc_cmd(nq);
576 if (cmd || !can_wait)
577 return cmd;
578
579 do {
580 prepare_to_wait(&nq->wait, &wait, TASK_UNINTERRUPTIBLE);
581 cmd = __alloc_cmd(nq);
582 if (cmd)
583 break;
584
585 io_schedule();
586 } while (1);
587
588 finish_wait(&nq->wait, &wait);
589 return cmd;
590}
591
592static void end_cmd(struct nullb_cmd *cmd)
593{
cf8ecc5a 594 struct request_queue *q = NULL;
2984c868 595 int queue_mode = cmd->nq->dev->queue_mode;
cf8ecc5a 596
e8271201
MK
597 if (cmd->rq)
598 q = cmd->rq->q;
599
ce2c350b
CH
600 switch (queue_mode) {
601 case NULL_Q_MQ:
5bcd0e0c 602 blk_mq_end_request(cmd->rq, cmd->error);
ce2c350b
CH
603 return;
604 case NULL_Q_RQ:
605 INIT_LIST_HEAD(&cmd->rq->queuelist);
5bcd0e0c 606 blk_end_request_all(cmd->rq, cmd->error);
ce2c350b
CH
607 break;
608 case NULL_Q_BIO:
5bcd0e0c 609 cmd->bio->bi_status = cmd->error;
4246a0b6 610 bio_endio(cmd->bio);
48cc661e 611 break;
ce2c350b 612 }
f2298c04 613
48cc661e
JA
614 free_cmd(cmd);
615
cf8ecc5a 616 /* Restart queue if needed, as we are freeing a tag */
48cc661e 617 if (queue_mode == NULL_Q_RQ && blk_queue_stopped(q)) {
cf8ecc5a
AA
618 unsigned long flags;
619
620 spin_lock_irqsave(q->queue_lock, flags);
48cc661e 621 blk_start_queue_async(q);
cf8ecc5a 622 spin_unlock_irqrestore(q->queue_lock, flags);
f2298c04 623 }
cf8ecc5a
AA
624}
625
626static enum hrtimer_restart null_cmd_timer_expired(struct hrtimer *timer)
627{
628 end_cmd(container_of(timer, struct nullb_cmd, timer));
f2298c04
JA
629
630 return HRTIMER_NORESTART;
631}
632
633static void null_cmd_end_timer(struct nullb_cmd *cmd)
634{
2984c868 635 ktime_t kt = cmd->nq->dev->completion_nsec;
f2298c04 636
3c395a96 637 hrtimer_start(&cmd->timer, kt, HRTIMER_MODE_REL);
f2298c04
JA
638}
639
640static void null_softirq_done_fn(struct request *rq)
641{
2984c868
SL
642 struct nullb *nullb = rq->q->queuedata;
643
644 if (nullb->dev->queue_mode == NULL_Q_MQ)
d891fa70
JA
645 end_cmd(blk_mq_rq_to_pdu(rq));
646 else
647 end_cmd(rq->special);
f2298c04
JA
648}
649
5bcd0e0c
SL
650static struct nullb_page *null_alloc_page(gfp_t gfp_flags)
651{
652 struct nullb_page *t_page;
653
654 t_page = kmalloc(sizeof(struct nullb_page), gfp_flags);
655 if (!t_page)
656 goto out;
657
658 t_page->page = alloc_pages(gfp_flags, 0);
659 if (!t_page->page)
660 goto out_freepage;
661
66231ad3 662 memset(t_page->bitmap, 0, sizeof(t_page->bitmap));
5bcd0e0c
SL
663 return t_page;
664out_freepage:
665 kfree(t_page);
666out:
667 return NULL;
668}
669
670static void null_free_page(struct nullb_page *t_page)
671{
66231ad3
ML
672 __set_bit(NULLB_PAGE_FREE, t_page->bitmap);
673 if (test_bit(NULLB_PAGE_LOCK, t_page->bitmap))
deb78b41 674 return;
5bcd0e0c
SL
675 __free_page(t_page->page);
676 kfree(t_page);
677}
678
66231ad3
ML
679static bool null_page_empty(struct nullb_page *page)
680{
681 int size = MAP_SZ - 2;
682
683 return find_first_bit(page->bitmap, size) == size;
684}
685
deb78b41
SL
686static void null_free_sector(struct nullb *nullb, sector_t sector,
687 bool is_cache)
5bcd0e0c
SL
688{
689 unsigned int sector_bit;
690 u64 idx;
691 struct nullb_page *t_page, *ret;
692 struct radix_tree_root *root;
693
deb78b41 694 root = is_cache ? &nullb->dev->cache : &nullb->dev->data;
5bcd0e0c
SL
695 idx = sector >> PAGE_SECTORS_SHIFT;
696 sector_bit = (sector & SECTOR_MASK);
697
698 t_page = radix_tree_lookup(root, idx);
699 if (t_page) {
66231ad3 700 __clear_bit(sector_bit, t_page->bitmap);
5bcd0e0c 701
66231ad3 702 if (null_page_empty(t_page)) {
5bcd0e0c
SL
703 ret = radix_tree_delete_item(root, idx, t_page);
704 WARN_ON(ret != t_page);
705 null_free_page(ret);
deb78b41
SL
706 if (is_cache)
707 nullb->dev->curr_cache -= PAGE_SIZE;
5bcd0e0c
SL
708 }
709 }
710}
711
712static struct nullb_page *null_radix_tree_insert(struct nullb *nullb, u64 idx,
deb78b41 713 struct nullb_page *t_page, bool is_cache)
5bcd0e0c
SL
714{
715 struct radix_tree_root *root;
716
deb78b41 717 root = is_cache ? &nullb->dev->cache : &nullb->dev->data;
5bcd0e0c
SL
718
719 if (radix_tree_insert(root, idx, t_page)) {
720 null_free_page(t_page);
721 t_page = radix_tree_lookup(root, idx);
722 WARN_ON(!t_page || t_page->page->index != idx);
deb78b41
SL
723 } else if (is_cache)
724 nullb->dev->curr_cache += PAGE_SIZE;
5bcd0e0c
SL
725
726 return t_page;
727}
728
deb78b41 729static void null_free_device_storage(struct nullb_device *dev, bool is_cache)
5bcd0e0c
SL
730{
731 unsigned long pos = 0;
732 int nr_pages;
733 struct nullb_page *ret, *t_pages[FREE_BATCH];
734 struct radix_tree_root *root;
735
deb78b41 736 root = is_cache ? &dev->cache : &dev->data;
5bcd0e0c
SL
737
738 do {
739 int i;
740
741 nr_pages = radix_tree_gang_lookup(root,
742 (void **)t_pages, pos, FREE_BATCH);
743
744 for (i = 0; i < nr_pages; i++) {
745 pos = t_pages[i]->page->index;
746 ret = radix_tree_delete_item(root, pos, t_pages[i]);
747 WARN_ON(ret != t_pages[i]);
748 null_free_page(ret);
749 }
750
751 pos++;
752 } while (nr_pages == FREE_BATCH);
deb78b41
SL
753
754 if (is_cache)
755 dev->curr_cache = 0;
5bcd0e0c
SL
756}
757
deb78b41
SL
758static struct nullb_page *__null_lookup_page(struct nullb *nullb,
759 sector_t sector, bool for_write, bool is_cache)
5bcd0e0c
SL
760{
761 unsigned int sector_bit;
762 u64 idx;
763 struct nullb_page *t_page;
deb78b41 764 struct radix_tree_root *root;
5bcd0e0c
SL
765
766 idx = sector >> PAGE_SECTORS_SHIFT;
767 sector_bit = (sector & SECTOR_MASK);
768
deb78b41
SL
769 root = is_cache ? &nullb->dev->cache : &nullb->dev->data;
770 t_page = radix_tree_lookup(root, idx);
5bcd0e0c
SL
771 WARN_ON(t_page && t_page->page->index != idx);
772
66231ad3 773 if (t_page && (for_write || test_bit(sector_bit, t_page->bitmap)))
5bcd0e0c
SL
774 return t_page;
775
776 return NULL;
777}
778
deb78b41
SL
779static struct nullb_page *null_lookup_page(struct nullb *nullb,
780 sector_t sector, bool for_write, bool ignore_cache)
781{
782 struct nullb_page *page = NULL;
783
784 if (!ignore_cache)
785 page = __null_lookup_page(nullb, sector, for_write, true);
786 if (page)
787 return page;
788 return __null_lookup_page(nullb, sector, for_write, false);
789}
790
5bcd0e0c 791static struct nullb_page *null_insert_page(struct nullb *nullb,
deb78b41 792 sector_t sector, bool ignore_cache)
5bcd0e0c
SL
793{
794 u64 idx;
795 struct nullb_page *t_page;
796
deb78b41 797 t_page = null_lookup_page(nullb, sector, true, ignore_cache);
5bcd0e0c
SL
798 if (t_page)
799 return t_page;
800
801 spin_unlock_irq(&nullb->lock);
802
803 t_page = null_alloc_page(GFP_NOIO);
804 if (!t_page)
805 goto out_lock;
806
807 if (radix_tree_preload(GFP_NOIO))
808 goto out_freepage;
809
810 spin_lock_irq(&nullb->lock);
811 idx = sector >> PAGE_SECTORS_SHIFT;
812 t_page->page->index = idx;
deb78b41 813 t_page = null_radix_tree_insert(nullb, idx, t_page, !ignore_cache);
5bcd0e0c
SL
814 radix_tree_preload_end();
815
816 return t_page;
817out_freepage:
818 null_free_page(t_page);
819out_lock:
820 spin_lock_irq(&nullb->lock);
deb78b41
SL
821 return null_lookup_page(nullb, sector, true, ignore_cache);
822}
823
824static int null_flush_cache_page(struct nullb *nullb, struct nullb_page *c_page)
825{
826 int i;
827 unsigned int offset;
828 u64 idx;
829 struct nullb_page *t_page, *ret;
830 void *dst, *src;
831
832 idx = c_page->page->index;
833
834 t_page = null_insert_page(nullb, idx << PAGE_SECTORS_SHIFT, true);
835
66231ad3
ML
836 __clear_bit(NULLB_PAGE_LOCK, c_page->bitmap);
837 if (test_bit(NULLB_PAGE_FREE, c_page->bitmap)) {
deb78b41 838 null_free_page(c_page);
66231ad3 839 if (t_page && null_page_empty(t_page)) {
deb78b41
SL
840 ret = radix_tree_delete_item(&nullb->dev->data,
841 idx, t_page);
842 null_free_page(t_page);
843 }
844 return 0;
845 }
846
847 if (!t_page)
848 return -ENOMEM;
849
850 src = kmap_atomic(c_page->page);
851 dst = kmap_atomic(t_page->page);
852
853 for (i = 0; i < PAGE_SECTORS;
854 i += (nullb->dev->blocksize >> SECTOR_SHIFT)) {
66231ad3 855 if (test_bit(i, c_page->bitmap)) {
deb78b41
SL
856 offset = (i << SECTOR_SHIFT);
857 memcpy(dst + offset, src + offset,
858 nullb->dev->blocksize);
66231ad3 859 __set_bit(i, t_page->bitmap);
deb78b41
SL
860 }
861 }
862
863 kunmap_atomic(dst);
864 kunmap_atomic(src);
865
866 ret = radix_tree_delete_item(&nullb->dev->cache, idx, c_page);
867 null_free_page(ret);
868 nullb->dev->curr_cache -= PAGE_SIZE;
869
870 return 0;
871}
872
873static int null_make_cache_space(struct nullb *nullb, unsigned long n)
f2298c04 874{
deb78b41
SL
875 int i, err, nr_pages;
876 struct nullb_page *c_pages[FREE_BATCH];
877 unsigned long flushed = 0, one_round;
878
879again:
880 if ((nullb->dev->cache_size * 1024 * 1024) >
881 nullb->dev->curr_cache + n || nullb->dev->curr_cache == 0)
882 return 0;
883
884 nr_pages = radix_tree_gang_lookup(&nullb->dev->cache,
885 (void **)c_pages, nullb->cache_flush_pos, FREE_BATCH);
886 /*
887 * nullb_flush_cache_page could unlock before using the c_pages. To
888 * avoid race, we don't allow page free
889 */
890 for (i = 0; i < nr_pages; i++) {
891 nullb->cache_flush_pos = c_pages[i]->page->index;
892 /*
893 * We found the page which is being flushed to disk by other
894 * threads
895 */
66231ad3 896 if (test_bit(NULLB_PAGE_LOCK, c_pages[i]->bitmap))
deb78b41
SL
897 c_pages[i] = NULL;
898 else
66231ad3 899 __set_bit(NULLB_PAGE_LOCK, c_pages[i]->bitmap);
deb78b41
SL
900 }
901
902 one_round = 0;
903 for (i = 0; i < nr_pages; i++) {
904 if (c_pages[i] == NULL)
905 continue;
906 err = null_flush_cache_page(nullb, c_pages[i]);
907 if (err)
908 return err;
909 one_round++;
910 }
911 flushed += one_round << PAGE_SHIFT;
912
913 if (n > flushed) {
914 if (nr_pages == 0)
915 nullb->cache_flush_pos = 0;
916 if (one_round == 0) {
917 /* give other threads a chance */
918 spin_unlock_irq(&nullb->lock);
919 spin_lock_irq(&nullb->lock);
920 }
921 goto again;
922 }
923 return 0;
5bcd0e0c
SL
924}
925
926static int copy_to_nullb(struct nullb *nullb, struct page *source,
deb78b41 927 unsigned int off, sector_t sector, size_t n, bool is_fua)
5bcd0e0c
SL
928{
929 size_t temp, count = 0;
930 unsigned int offset;
931 struct nullb_page *t_page;
932 void *dst, *src;
933
934 while (count < n) {
935 temp = min_t(size_t, nullb->dev->blocksize, n - count);
936
deb78b41
SL
937 if (null_cache_active(nullb) && !is_fua)
938 null_make_cache_space(nullb, PAGE_SIZE);
939
5bcd0e0c 940 offset = (sector & SECTOR_MASK) << SECTOR_SHIFT;
deb78b41
SL
941 t_page = null_insert_page(nullb, sector,
942 !null_cache_active(nullb) || is_fua);
5bcd0e0c
SL
943 if (!t_page)
944 return -ENOSPC;
945
946 src = kmap_atomic(source);
947 dst = kmap_atomic(t_page->page);
948 memcpy(dst + offset, src + off + count, temp);
949 kunmap_atomic(dst);
950 kunmap_atomic(src);
951
66231ad3 952 __set_bit(sector & SECTOR_MASK, t_page->bitmap);
5bcd0e0c 953
deb78b41
SL
954 if (is_fua)
955 null_free_sector(nullb, sector, true);
956
5bcd0e0c
SL
957 count += temp;
958 sector += temp >> SECTOR_SHIFT;
959 }
960 return 0;
961}
962
963static int copy_from_nullb(struct nullb *nullb, struct page *dest,
964 unsigned int off, sector_t sector, size_t n)
965{
966 size_t temp, count = 0;
967 unsigned int offset;
968 struct nullb_page *t_page;
969 void *dst, *src;
970
971 while (count < n) {
972 temp = min_t(size_t, nullb->dev->blocksize, n - count);
973
974 offset = (sector & SECTOR_MASK) << SECTOR_SHIFT;
deb78b41
SL
975 t_page = null_lookup_page(nullb, sector, false,
976 !null_cache_active(nullb));
5bcd0e0c
SL
977
978 dst = kmap_atomic(dest);
979 if (!t_page) {
980 memset(dst + off + count, 0, temp);
981 goto next;
982 }
983 src = kmap_atomic(t_page->page);
984 memcpy(dst + off + count, src + offset, temp);
985 kunmap_atomic(src);
986next:
987 kunmap_atomic(dst);
988
989 count += temp;
990 sector += temp >> SECTOR_SHIFT;
991 }
992 return 0;
993}
994
306eb6b4
SL
995static void null_handle_discard(struct nullb *nullb, sector_t sector, size_t n)
996{
997 size_t temp;
998
999 spin_lock_irq(&nullb->lock);
1000 while (n > 0) {
1001 temp = min_t(size_t, n, nullb->dev->blocksize);
deb78b41
SL
1002 null_free_sector(nullb, sector, false);
1003 if (null_cache_active(nullb))
1004 null_free_sector(nullb, sector, true);
306eb6b4
SL
1005 sector += temp >> SECTOR_SHIFT;
1006 n -= temp;
1007 }
1008 spin_unlock_irq(&nullb->lock);
1009}
1010
deb78b41
SL
1011static int null_handle_flush(struct nullb *nullb)
1012{
1013 int err;
1014
1015 if (!null_cache_active(nullb))
1016 return 0;
1017
1018 spin_lock_irq(&nullb->lock);
1019 while (true) {
1020 err = null_make_cache_space(nullb,
1021 nullb->dev->cache_size * 1024 * 1024);
1022 if (err || nullb->dev->curr_cache == 0)
1023 break;
1024 }
1025
1026 WARN_ON(!radix_tree_empty(&nullb->dev->cache));
1027 spin_unlock_irq(&nullb->lock);
1028 return err;
1029}
1030
5bcd0e0c 1031static int null_transfer(struct nullb *nullb, struct page *page,
deb78b41
SL
1032 unsigned int len, unsigned int off, bool is_write, sector_t sector,
1033 bool is_fua)
f2298c04 1034{
5bcd0e0c
SL
1035 int err = 0;
1036
1037 if (!is_write) {
1038 err = copy_from_nullb(nullb, page, off, sector, len);
1039 flush_dcache_page(page);
1040 } else {
1041 flush_dcache_page(page);
deb78b41 1042 err = copy_to_nullb(nullb, page, off, sector, len, is_fua);
5bcd0e0c
SL
1043 }
1044
1045 return err;
1046}
1047
1048static int null_handle_rq(struct nullb_cmd *cmd)
1049{
1050 struct request *rq = cmd->rq;
1051 struct nullb *nullb = cmd->nq->dev->nullb;
1052 int err;
1053 unsigned int len;
1054 sector_t sector;
1055 struct req_iterator iter;
1056 struct bio_vec bvec;
1057
1058 sector = blk_rq_pos(rq);
1059
306eb6b4
SL
1060 if (req_op(rq) == REQ_OP_DISCARD) {
1061 null_handle_discard(nullb, sector, blk_rq_bytes(rq));
1062 return 0;
1063 }
1064
5bcd0e0c
SL
1065 spin_lock_irq(&nullb->lock);
1066 rq_for_each_segment(bvec, rq, iter) {
1067 len = bvec.bv_len;
1068 err = null_transfer(nullb, bvec.bv_page, len, bvec.bv_offset,
deb78b41
SL
1069 op_is_write(req_op(rq)), sector,
1070 req_op(rq) & REQ_FUA);
5bcd0e0c
SL
1071 if (err) {
1072 spin_unlock_irq(&nullb->lock);
1073 return err;
1074 }
1075 sector += len >> SECTOR_SHIFT;
1076 }
1077 spin_unlock_irq(&nullb->lock);
1078
1079 return 0;
1080}
1081
1082static int null_handle_bio(struct nullb_cmd *cmd)
1083{
1084 struct bio *bio = cmd->bio;
1085 struct nullb *nullb = cmd->nq->dev->nullb;
1086 int err;
1087 unsigned int len;
1088 sector_t sector;
1089 struct bio_vec bvec;
1090 struct bvec_iter iter;
1091
1092 sector = bio->bi_iter.bi_sector;
1093
306eb6b4
SL
1094 if (bio_op(bio) == REQ_OP_DISCARD) {
1095 null_handle_discard(nullb, sector,
1096 bio_sectors(bio) << SECTOR_SHIFT);
1097 return 0;
1098 }
1099
5bcd0e0c
SL
1100 spin_lock_irq(&nullb->lock);
1101 bio_for_each_segment(bvec, bio, iter) {
1102 len = bvec.bv_len;
1103 err = null_transfer(nullb, bvec.bv_page, len, bvec.bv_offset,
deb78b41
SL
1104 op_is_write(bio_op(bio)), sector,
1105 bio_op(bio) & REQ_FUA);
5bcd0e0c
SL
1106 if (err) {
1107 spin_unlock_irq(&nullb->lock);
1108 return err;
1109 }
1110 sector += len >> SECTOR_SHIFT;
1111 }
1112 spin_unlock_irq(&nullb->lock);
1113 return 0;
1114}
1115
eff2c4f1
SL
1116static void null_stop_queue(struct nullb *nullb)
1117{
1118 struct request_queue *q = nullb->q;
1119
1120 if (nullb->dev->queue_mode == NULL_Q_MQ)
1121 blk_mq_stop_hw_queues(q);
1122 else {
1123 spin_lock_irq(q->queue_lock);
1124 blk_stop_queue(q);
1125 spin_unlock_irq(q->queue_lock);
1126 }
1127}
1128
1129static void null_restart_queue_async(struct nullb *nullb)
1130{
1131 struct request_queue *q = nullb->q;
1132 unsigned long flags;
1133
1134 if (nullb->dev->queue_mode == NULL_Q_MQ)
1135 blk_mq_start_stopped_hw_queues(q, true);
1136 else {
1137 spin_lock_irqsave(q->queue_lock, flags);
1138 blk_start_queue_async(q);
1139 spin_unlock_irqrestore(q->queue_lock, flags);
1140 }
1141}
1142
5bcd0e0c
SL
1143static blk_status_t null_handle_cmd(struct nullb_cmd *cmd)
1144{
1145 struct nullb_device *dev = cmd->nq->dev;
eff2c4f1 1146 struct nullb *nullb = dev->nullb;
5bcd0e0c
SL
1147 int err = 0;
1148
eff2c4f1
SL
1149 if (test_bit(NULLB_DEV_FL_THROTTLED, &dev->flags)) {
1150 struct request *rq = cmd->rq;
1151
1152 if (!hrtimer_active(&nullb->bw_timer))
1153 hrtimer_restart(&nullb->bw_timer);
1154
1155 if (atomic_long_sub_return(blk_rq_bytes(rq),
1156 &nullb->cur_bytes) < 0) {
1157 null_stop_queue(nullb);
1158 /* race with timer */
1159 if (atomic_long_read(&nullb->cur_bytes) > 0)
1160 null_restart_queue_async(nullb);
1161 if (dev->queue_mode == NULL_Q_RQ) {
1162 struct request_queue *q = nullb->q;
1163
1164 spin_lock_irq(q->queue_lock);
1165 rq->rq_flags |= RQF_DONTPREP;
1166 blk_requeue_request(q, rq);
1167 spin_unlock_irq(q->queue_lock);
1168 return BLK_STS_OK;
1169 } else
1170 /* requeue request */
86ff7c2a 1171 return BLK_STS_DEV_RESOURCE;
eff2c4f1
SL
1172 }
1173 }
1174
2f54a613
SL
1175 if (nullb->dev->badblocks.shift != -1) {
1176 int bad_sectors;
1177 sector_t sector, size, first_bad;
1178 bool is_flush = true;
1179
1180 if (dev->queue_mode == NULL_Q_BIO &&
1181 bio_op(cmd->bio) != REQ_OP_FLUSH) {
1182 is_flush = false;
1183 sector = cmd->bio->bi_iter.bi_sector;
1184 size = bio_sectors(cmd->bio);
1185 }
1186 if (dev->queue_mode != NULL_Q_BIO &&
1187 req_op(cmd->rq) != REQ_OP_FLUSH) {
1188 is_flush = false;
1189 sector = blk_rq_pos(cmd->rq);
1190 size = blk_rq_sectors(cmd->rq);
1191 }
1192 if (!is_flush && badblocks_check(&nullb->dev->badblocks, sector,
1193 size, &first_bad, &bad_sectors)) {
1194 cmd->error = BLK_STS_IOERR;
1195 goto out;
1196 }
1197 }
1198
5bcd0e0c 1199 if (dev->memory_backed) {
deb78b41
SL
1200 if (dev->queue_mode == NULL_Q_BIO) {
1201 if (bio_op(cmd->bio) == REQ_OP_FLUSH)
1202 err = null_handle_flush(nullb);
1203 else
1204 err = null_handle_bio(cmd);
1205 } else {
1206 if (req_op(cmd->rq) == REQ_OP_FLUSH)
1207 err = null_handle_flush(nullb);
1208 else
1209 err = null_handle_rq(cmd);
1210 }
5bcd0e0c
SL
1211 }
1212 cmd->error = errno_to_blk_status(err);
2f54a613 1213out:
f2298c04 1214 /* Complete IO by inline, softirq or timer */
5bcd0e0c 1215 switch (dev->irqmode) {
f2298c04 1216 case NULL_IRQ_SOFTIRQ:
5bcd0e0c 1217 switch (dev->queue_mode) {
ce2c350b 1218 case NULL_Q_MQ:
08e0029a 1219 blk_mq_complete_request(cmd->rq);
ce2c350b
CH
1220 break;
1221 case NULL_Q_RQ:
1222 blk_complete_request(cmd->rq);
1223 break;
1224 case NULL_Q_BIO:
1225 /*
1226 * XXX: no proper submitting cpu information available.
1227 */
1228 end_cmd(cmd);
1229 break;
1230 }
1231 break;
1232 case NULL_IRQ_NONE:
f2298c04 1233 end_cmd(cmd);
f2298c04
JA
1234 break;
1235 case NULL_IRQ_TIMER:
1236 null_cmd_end_timer(cmd);
1237 break;
1238 }
5bcd0e0c 1239 return BLK_STS_OK;
f2298c04
JA
1240}
1241
eff2c4f1
SL
1242static enum hrtimer_restart nullb_bwtimer_fn(struct hrtimer *timer)
1243{
1244 struct nullb *nullb = container_of(timer, struct nullb, bw_timer);
1245 ktime_t timer_interval = ktime_set(0, TIMER_INTERVAL);
1246 unsigned int mbps = nullb->dev->mbps;
1247
1248 if (atomic_long_read(&nullb->cur_bytes) == mb_per_tick(mbps))
1249 return HRTIMER_NORESTART;
1250
1251 atomic_long_set(&nullb->cur_bytes, mb_per_tick(mbps));
1252 null_restart_queue_async(nullb);
1253
1254 hrtimer_forward_now(&nullb->bw_timer, timer_interval);
1255
1256 return HRTIMER_RESTART;
1257}
1258
1259static void nullb_setup_bwtimer(struct nullb *nullb)
1260{
1261 ktime_t timer_interval = ktime_set(0, TIMER_INTERVAL);
1262
1263 hrtimer_init(&nullb->bw_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1264 nullb->bw_timer.function = nullb_bwtimer_fn;
1265 atomic_long_set(&nullb->cur_bytes, mb_per_tick(nullb->dev->mbps));
1266 hrtimer_start(&nullb->bw_timer, timer_interval, HRTIMER_MODE_REL);
f2298c04
JA
1267}
1268
1269static struct nullb_queue *nullb_to_queue(struct nullb *nullb)
1270{
1271 int index = 0;
1272
1273 if (nullb->nr_queues != 1)
1274 index = raw_smp_processor_id() / ((nr_cpu_ids + nullb->nr_queues - 1) / nullb->nr_queues);
1275
1276 return &nullb->queues[index];
1277}
1278
dece1635 1279static blk_qc_t null_queue_bio(struct request_queue *q, struct bio *bio)
f2298c04
JA
1280{
1281 struct nullb *nullb = q->queuedata;
1282 struct nullb_queue *nq = nullb_to_queue(nullb);
1283 struct nullb_cmd *cmd;
1284
1285 cmd = alloc_cmd(nq, 1);
1286 cmd->bio = bio;
1287
1288 null_handle_cmd(cmd);
dece1635 1289 return BLK_QC_T_NONE;
f2298c04
JA
1290}
1291
5448aca4
JA
1292static enum blk_eh_timer_return null_rq_timed_out_fn(struct request *rq)
1293{
1294 pr_info("null: rq %p timed out\n", rq);
0cc61e64 1295 __blk_complete_request(rq);
0df0bb08 1296 return BLK_EH_DONE;
5448aca4
JA
1297}
1298
f2298c04
JA
1299static int null_rq_prep_fn(struct request_queue *q, struct request *req)
1300{
1301 struct nullb *nullb = q->queuedata;
1302 struct nullb_queue *nq = nullb_to_queue(nullb);
1303 struct nullb_cmd *cmd;
1304
1305 cmd = alloc_cmd(nq, 0);
1306 if (cmd) {
1307 cmd->rq = req;
1308 req->special = cmd;
1309 return BLKPREP_OK;
1310 }
8b70f45e 1311 blk_stop_queue(q);
f2298c04
JA
1312
1313 return BLKPREP_DEFER;
1314}
1315
93b57046
JA
1316static bool should_timeout_request(struct request *rq)
1317{
33f782c4 1318#ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
93b57046
JA
1319 if (g_timeout_str[0])
1320 return should_fail(&null_timeout_attr, 1);
33f782c4 1321#endif
24941b90
JA
1322 return false;
1323}
93b57046 1324
24941b90
JA
1325static bool should_requeue_request(struct request *rq)
1326{
1327#ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
1328 if (g_requeue_str[0])
1329 return should_fail(&null_requeue_attr, 1);
1330#endif
93b57046
JA
1331 return false;
1332}
1333
f2298c04
JA
1334static void null_request_fn(struct request_queue *q)
1335{
1336 struct request *rq;
1337
1338 while ((rq = blk_fetch_request(q)) != NULL) {
1339 struct nullb_cmd *cmd = rq->special;
1340
24941b90
JA
1341 /* just ignore the request */
1342 if (should_timeout_request(rq))
1343 continue;
1344 if (should_requeue_request(rq)) {
1345 blk_requeue_request(q, rq);
1346 continue;
93b57046 1347 }
24941b90
JA
1348
1349 spin_unlock_irq(q->queue_lock);
1350 null_handle_cmd(cmd);
1351 spin_lock_irq(q->queue_lock);
f2298c04
JA
1352 }
1353}
1354
5448aca4
JA
1355static enum blk_eh_timer_return null_timeout_rq(struct request *rq, bool res)
1356{
1357 pr_info("null: rq %p timed out\n", rq);
0df0bb08
CH
1358 blk_mq_complete_request(rq);
1359 return BLK_EH_DONE;
5448aca4
JA
1360}
1361
fc17b653 1362static blk_status_t null_queue_rq(struct blk_mq_hw_ctx *hctx,
74c45052 1363 const struct blk_mq_queue_data *bd)
f2298c04 1364{
74c45052 1365 struct nullb_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
2984c868 1366 struct nullb_queue *nq = hctx->driver_data;
f2298c04 1367
db5bcf87
JA
1368 might_sleep_if(hctx->flags & BLK_MQ_F_BLOCKING);
1369
2984c868 1370 if (nq->dev->irqmode == NULL_IRQ_TIMER) {
3c395a96
PV
1371 hrtimer_init(&cmd->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1372 cmd->timer.function = null_cmd_timer_expired;
1373 }
74c45052 1374 cmd->rq = bd->rq;
2984c868 1375 cmd->nq = nq;
f2298c04 1376
74c45052 1377 blk_mq_start_request(bd->rq);
e2490073 1378
24941b90
JA
1379 if (should_requeue_request(bd->rq)) {
1380 /*
1381 * Alternate between hitting the core BUSY path, and the
1382 * driver driven requeue path
1383 */
1384 nq->requeue_selection++;
1385 if (nq->requeue_selection & 1)
1386 return BLK_STS_RESOURCE;
1387 else {
1388 blk_mq_requeue_request(bd->rq, true);
1389 return BLK_STS_OK;
1390 }
1391 }
1392 if (should_timeout_request(bd->rq))
1393 return BLK_STS_OK;
93b57046 1394
24941b90 1395 return null_handle_cmd(cmd);
f2298c04
JA
1396}
1397
f363b089 1398static const struct blk_mq_ops null_mq_ops = {
f2298c04 1399 .queue_rq = null_queue_rq,
ce2c350b 1400 .complete = null_softirq_done_fn,
5448aca4 1401 .timeout = null_timeout_rq,
f2298c04
JA
1402};
1403
de65d2d2
MB
1404static void cleanup_queue(struct nullb_queue *nq)
1405{
1406 kfree(nq->tag_map);
1407 kfree(nq->cmds);
1408}
1409
1410static void cleanup_queues(struct nullb *nullb)
1411{
1412 int i;
1413
1414 for (i = 0; i < nullb->nr_queues; i++)
1415 cleanup_queue(&nullb->queues[i]);
1416
1417 kfree(nullb->queues);
1418}
1419
9ae2d0aa
MB
1420static void null_del_dev(struct nullb *nullb)
1421{
2984c868
SL
1422 struct nullb_device *dev = nullb->dev;
1423
94bc02e3
SL
1424 ida_simple_remove(&nullb_indexes, nullb->index);
1425
9ae2d0aa
MB
1426 list_del_init(&nullb->list);
1427
74ede5af 1428 del_gendisk(nullb->disk);
eff2c4f1
SL
1429
1430 if (test_bit(NULLB_DEV_FL_THROTTLED, &nullb->dev->flags)) {
1431 hrtimer_cancel(&nullb->bw_timer);
1432 atomic_long_set(&nullb->cur_bytes, LONG_MAX);
1433 null_restart_queue_async(nullb);
1434 }
1435
9ae2d0aa 1436 blk_cleanup_queue(nullb->q);
2984c868
SL
1437 if (dev->queue_mode == NULL_Q_MQ &&
1438 nullb->tag_set == &nullb->__tag_set)
82f402fe 1439 blk_mq_free_tag_set(nullb->tag_set);
74ede5af 1440 put_disk(nullb->disk);
9ae2d0aa 1441 cleanup_queues(nullb);
deb78b41
SL
1442 if (null_cache_active(nullb))
1443 null_free_device_storage(nullb->dev, true);
9ae2d0aa 1444 kfree(nullb);
2984c868 1445 dev->nullb = NULL;
9ae2d0aa
MB
1446}
1447
306eb6b4
SL
1448static void null_config_discard(struct nullb *nullb)
1449{
1450 if (nullb->dev->discard == false)
1451 return;
1452 nullb->q->limits.discard_granularity = nullb->dev->blocksize;
1453 nullb->q->limits.discard_alignment = nullb->dev->blocksize;
1454 blk_queue_max_discard_sectors(nullb->q, UINT_MAX >> 9);
8b904b5b 1455 blk_queue_flag_set(QUEUE_FLAG_DISCARD, nullb->q);
9ae2d0aa
MB
1456}
1457
f2298c04
JA
1458static int null_open(struct block_device *bdev, fmode_t mode)
1459{
1460 return 0;
1461}
1462
1463static void null_release(struct gendisk *disk, fmode_t mode)
1464{
1465}
1466
1467static const struct block_device_operations null_fops = {
1468 .owner = THIS_MODULE,
1469 .open = null_open,
1470 .release = null_release,
1471};
1472
82f402fe
JA
1473static void null_init_queue(struct nullb *nullb, struct nullb_queue *nq)
1474{
1475 BUG_ON(!nullb);
1476 BUG_ON(!nq);
1477
1478 init_waitqueue_head(&nq->wait);
1479 nq->queue_depth = nullb->queue_depth;
2984c868 1480 nq->dev = nullb->dev;
82f402fe
JA
1481}
1482
1483static void null_init_queues(struct nullb *nullb)
1484{
1485 struct request_queue *q = nullb->q;
1486 struct blk_mq_hw_ctx *hctx;
1487 struct nullb_queue *nq;
1488 int i;
1489
1490 queue_for_each_hw_ctx(q, hctx, i) {
1491 if (!hctx->nr_ctx || !hctx->tags)
1492 continue;
1493 nq = &nullb->queues[i];
1494 hctx->driver_data = nq;
1495 null_init_queue(nullb, nq);
1496 nullb->nr_queues++;
1497 }
1498}
1499
f2298c04
JA
1500static int setup_commands(struct nullb_queue *nq)
1501{
1502 struct nullb_cmd *cmd;
1503 int i, tag_size;
1504
6396bb22 1505 nq->cmds = kcalloc(nq->queue_depth, sizeof(*cmd), GFP_KERNEL);
f2298c04 1506 if (!nq->cmds)
2d263a78 1507 return -ENOMEM;
f2298c04
JA
1508
1509 tag_size = ALIGN(nq->queue_depth, BITS_PER_LONG) / BITS_PER_LONG;
6396bb22 1510 nq->tag_map = kcalloc(tag_size, sizeof(unsigned long), GFP_KERNEL);
f2298c04
JA
1511 if (!nq->tag_map) {
1512 kfree(nq->cmds);
2d263a78 1513 return -ENOMEM;
f2298c04
JA
1514 }
1515
1516 for (i = 0; i < nq->queue_depth; i++) {
1517 cmd = &nq->cmds[i];
1518 INIT_LIST_HEAD(&cmd->list);
1519 cmd->ll_list.next = NULL;
1520 cmd->tag = -1U;
1521 }
1522
1523 return 0;
1524}
1525
f2298c04
JA
1526static int setup_queues(struct nullb *nullb)
1527{
6396bb22
KC
1528 nullb->queues = kcalloc(nullb->dev->submit_queues,
1529 sizeof(struct nullb_queue),
1530 GFP_KERNEL);
f2298c04 1531 if (!nullb->queues)
2d263a78 1532 return -ENOMEM;
f2298c04
JA
1533
1534 nullb->nr_queues = 0;
2984c868 1535 nullb->queue_depth = nullb->dev->hw_queue_depth;
f2298c04 1536
2d263a78
MB
1537 return 0;
1538}
1539
1540static int init_driver_queues(struct nullb *nullb)
1541{
1542 struct nullb_queue *nq;
1543 int i, ret = 0;
f2298c04 1544
2984c868 1545 for (i = 0; i < nullb->dev->submit_queues; i++) {
f2298c04 1546 nq = &nullb->queues[i];
2d263a78
MB
1547
1548 null_init_queue(nullb, nq);
1549
1550 ret = setup_commands(nq);
1551 if (ret)
31f9690e 1552 return ret;
f2298c04
JA
1553 nullb->nr_queues++;
1554 }
2d263a78 1555 return 0;
f2298c04
JA
1556}
1557
9ae2d0aa 1558static int null_gendisk_register(struct nullb *nullb)
f2298c04
JA
1559{
1560 struct gendisk *disk;
f2298c04 1561 sector_t size;
9ae2d0aa 1562
2984c868 1563 disk = nullb->disk = alloc_disk_node(1, nullb->dev->home_node);
9ae2d0aa
MB
1564 if (!disk)
1565 return -ENOMEM;
2984c868 1566 size = (sector_t)nullb->dev->size * 1024 * 1024ULL;
9ae2d0aa
MB
1567 set_capacity(disk, size >> 9);
1568
1569 disk->flags |= GENHD_FL_EXT_DEVT | GENHD_FL_SUPPRESS_PARTITION_INFO;
1570 disk->major = null_major;
1571 disk->first_minor = nullb->index;
1572 disk->fops = &null_fops;
1573 disk->private_data = nullb;
1574 disk->queue = nullb->q;
1575 strncpy(disk->disk_name, nullb->disk_name, DISK_NAME_LEN);
1576
1577 add_disk(disk);
1578 return 0;
1579}
1580
2984c868 1581static int null_init_tag_set(struct nullb *nullb, struct blk_mq_tag_set *set)
82f402fe
JA
1582{
1583 set->ops = &null_mq_ops;
2984c868
SL
1584 set->nr_hw_queues = nullb ? nullb->dev->submit_queues :
1585 g_submit_queues;
1586 set->queue_depth = nullb ? nullb->dev->hw_queue_depth :
1587 g_hw_queue_depth;
1588 set->numa_node = nullb ? nullb->dev->home_node : g_home_node;
82f402fe
JA
1589 set->cmd_size = sizeof(struct nullb_cmd);
1590 set->flags = BLK_MQ_F_SHOULD_MERGE;
b3cffc38 1591 if (g_no_sched)
1592 set->flags |= BLK_MQ_F_NO_SCHED;
82f402fe
JA
1593 set->driver_data = NULL;
1594
0d06a42f 1595 if ((nullb && nullb->dev->blocking) || g_blocking)
82f402fe
JA
1596 set->flags |= BLK_MQ_F_BLOCKING;
1597
1598 return blk_mq_alloc_tag_set(set);
1599}
1600
cedcafad
SL
1601static void null_validate_conf(struct nullb_device *dev)
1602{
1603 dev->blocksize = round_down(dev->blocksize, 512);
1604 dev->blocksize = clamp_t(unsigned int, dev->blocksize, 512, 4096);
cedcafad
SL
1605
1606 if (dev->queue_mode == NULL_Q_MQ && dev->use_per_node_hctx) {
1607 if (dev->submit_queues != nr_online_nodes)
1608 dev->submit_queues = nr_online_nodes;
1609 } else if (dev->submit_queues > nr_cpu_ids)
1610 dev->submit_queues = nr_cpu_ids;
1611 else if (dev->submit_queues == 0)
1612 dev->submit_queues = 1;
1613
1614 dev->queue_mode = min_t(unsigned int, dev->queue_mode, NULL_Q_MQ);
1615 dev->irqmode = min_t(unsigned int, dev->irqmode, NULL_IRQ_TIMER);
5bcd0e0c
SL
1616
1617 /* Do memory allocation, so set blocking */
1618 if (dev->memory_backed)
1619 dev->blocking = true;
deb78b41
SL
1620 else /* cache is meaningless */
1621 dev->cache_size = 0;
1622 dev->cache_size = min_t(unsigned long, ULONG_MAX / 1024 / 1024,
1623 dev->cache_size);
eff2c4f1
SL
1624 dev->mbps = min_t(unsigned int, 1024 * 40, dev->mbps);
1625 /* can not stop a queue */
1626 if (dev->queue_mode == NULL_Q_BIO)
1627 dev->mbps = 0;
cedcafad
SL
1628}
1629
33f782c4 1630#ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
24941b90
JA
1631static bool __null_setup_fault(struct fault_attr *attr, char *str)
1632{
1633 if (!str[0])
93b57046
JA
1634 return true;
1635
24941b90 1636 if (!setup_fault_attr(attr, str))
93b57046
JA
1637 return false;
1638
24941b90
JA
1639 attr->verbose = 0;
1640 return true;
1641}
1642#endif
1643
1644static bool null_setup_fault(void)
1645{
1646#ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
1647 if (!__null_setup_fault(&null_timeout_attr, g_timeout_str))
1648 return false;
1649 if (!__null_setup_fault(&null_requeue_attr, g_requeue_str))
1650 return false;
33f782c4 1651#endif
93b57046
JA
1652 return true;
1653}
1654
2984c868 1655static int null_add_dev(struct nullb_device *dev)
9ae2d0aa
MB
1656{
1657 struct nullb *nullb;
dc501dc0 1658 int rv;
f2298c04 1659
cedcafad
SL
1660 null_validate_conf(dev);
1661
2984c868 1662 nullb = kzalloc_node(sizeof(*nullb), GFP_KERNEL, dev->home_node);
dc501dc0
RE
1663 if (!nullb) {
1664 rv = -ENOMEM;
24d2f903 1665 goto out;
dc501dc0 1666 }
2984c868
SL
1667 nullb->dev = dev;
1668 dev->nullb = nullb;
f2298c04
JA
1669
1670 spin_lock_init(&nullb->lock);
1671
dc501dc0
RE
1672 rv = setup_queues(nullb);
1673 if (rv)
24d2f903 1674 goto out_free_nullb;
f2298c04 1675
2984c868 1676 if (dev->queue_mode == NULL_Q_MQ) {
82f402fe
JA
1677 if (shared_tags) {
1678 nullb->tag_set = &tag_set;
1679 rv = 0;
1680 } else {
1681 nullb->tag_set = &nullb->__tag_set;
2984c868 1682 rv = null_init_tag_set(nullb, nullb->tag_set);
82f402fe
JA
1683 }
1684
dc501dc0 1685 if (rv)
24d2f903
CH
1686 goto out_cleanup_queues;
1687
93b57046
JA
1688 if (!null_setup_fault())
1689 goto out_cleanup_queues;
1690
5448aca4 1691 nullb->tag_set->timeout = 5 * HZ;
82f402fe 1692 nullb->q = blk_mq_init_queue(nullb->tag_set);
35b489d3 1693 if (IS_ERR(nullb->q)) {
dc501dc0 1694 rv = -ENOMEM;
24d2f903 1695 goto out_cleanup_tags;
dc501dc0 1696 }
82f402fe 1697 null_init_queues(nullb);
2984c868 1698 } else if (dev->queue_mode == NULL_Q_BIO) {
5ee0524b
BVA
1699 nullb->q = blk_alloc_queue_node(GFP_KERNEL, dev->home_node,
1700 NULL);
dc501dc0
RE
1701 if (!nullb->q) {
1702 rv = -ENOMEM;
24d2f903 1703 goto out_cleanup_queues;
dc501dc0 1704 }
f2298c04 1705 blk_queue_make_request(nullb->q, null_queue_bio);
31f9690e
JK
1706 rv = init_driver_queues(nullb);
1707 if (rv)
1708 goto out_cleanup_blk_queue;
f2298c04 1709 } else {
2984c868
SL
1710 nullb->q = blk_init_queue_node(null_request_fn, &nullb->lock,
1711 dev->home_node);
dc501dc0
RE
1712 if (!nullb->q) {
1713 rv = -ENOMEM;
24d2f903 1714 goto out_cleanup_queues;
dc501dc0 1715 }
93b57046
JA
1716
1717 if (!null_setup_fault())
1718 goto out_cleanup_blk_queue;
1719
f2298c04 1720 blk_queue_prep_rq(nullb->q, null_rq_prep_fn);
24d2f903 1721 blk_queue_softirq_done(nullb->q, null_softirq_done_fn);
5448aca4
JA
1722 blk_queue_rq_timed_out(nullb->q, null_rq_timed_out_fn);
1723 nullb->q->rq_timeout = 5 * HZ;
31f9690e
JK
1724 rv = init_driver_queues(nullb);
1725 if (rv)
1726 goto out_cleanup_blk_queue;
f2298c04
JA
1727 }
1728
eff2c4f1
SL
1729 if (dev->mbps) {
1730 set_bit(NULLB_DEV_FL_THROTTLED, &dev->flags);
1731 nullb_setup_bwtimer(nullb);
1732 }
1733
deb78b41
SL
1734 if (dev->cache_size > 0) {
1735 set_bit(NULLB_DEV_FL_CACHE, &nullb->dev->flags);
1736 blk_queue_write_cache(nullb->q, true, true);
1737 blk_queue_flush_queueable(nullb->q, true);
1738 }
1739
f2298c04 1740 nullb->q->queuedata = nullb;
8b904b5b
BVA
1741 blk_queue_flag_set(QUEUE_FLAG_NONROT, nullb->q);
1742 blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, nullb->q);
f2298c04 1743
f2298c04 1744 mutex_lock(&lock);
94bc02e3 1745 nullb->index = ida_simple_get(&nullb_indexes, 0, 0, GFP_KERNEL);
cedcafad 1746 dev->index = nullb->index;
f2298c04
JA
1747 mutex_unlock(&lock);
1748
2984c868
SL
1749 blk_queue_logical_block_size(nullb->q, dev->blocksize);
1750 blk_queue_physical_block_size(nullb->q, dev->blocksize);
f2298c04 1751
306eb6b4 1752 null_config_discard(nullb);
f2298c04 1753
b2b7e001
MB
1754 sprintf(nullb->disk_name, "nullb%d", nullb->index);
1755
74ede5af 1756 rv = null_gendisk_register(nullb);
9ae2d0aa
MB
1757 if (rv)
1758 goto out_cleanup_blk_queue;
a514379b
MB
1759
1760 mutex_lock(&lock);
1761 list_add_tail(&nullb->list, &nullb_list);
1762 mutex_unlock(&lock);
3681c85d 1763
f2298c04 1764 return 0;
24d2f903
CH
1765out_cleanup_blk_queue:
1766 blk_cleanup_queue(nullb->q);
1767out_cleanup_tags:
2984c868 1768 if (dev->queue_mode == NULL_Q_MQ && nullb->tag_set == &nullb->__tag_set)
82f402fe 1769 blk_mq_free_tag_set(nullb->tag_set);
24d2f903
CH
1770out_cleanup_queues:
1771 cleanup_queues(nullb);
1772out_free_nullb:
1773 kfree(nullb);
1774out:
dc501dc0 1775 return rv;
f2298c04
JA
1776}
1777
1778static int __init null_init(void)
1779{
af096e22 1780 int ret = 0;
f2298c04 1781 unsigned int i;
af096e22 1782 struct nullb *nullb;
2984c868 1783 struct nullb_device *dev;
f2298c04 1784
2984c868 1785 if (g_bs > PAGE_SIZE) {
9967d8ac
R
1786 pr_warn("null_blk: invalid block size\n");
1787 pr_warn("null_blk: defaults block size to %lu\n", PAGE_SIZE);
2984c868 1788 g_bs = PAGE_SIZE;
9967d8ac 1789 }
f2298c04 1790
2984c868
SL
1791 if (g_queue_mode == NULL_Q_MQ && g_use_per_node_hctx) {
1792 if (g_submit_queues != nr_online_nodes) {
558ab300 1793 pr_warn("null_blk: submit_queues param is set to %u.\n",
d15ee6b1 1794 nr_online_nodes);
2984c868 1795 g_submit_queues = nr_online_nodes;
fc1bc354 1796 }
2984c868
SL
1797 } else if (g_submit_queues > nr_cpu_ids)
1798 g_submit_queues = nr_cpu_ids;
1799 else if (g_submit_queues <= 0)
1800 g_submit_queues = 1;
f2298c04 1801
2984c868
SL
1802 if (g_queue_mode == NULL_Q_MQ && shared_tags) {
1803 ret = null_init_tag_set(NULL, &tag_set);
db2d153d
MG
1804 if (ret)
1805 return ret;
1806 }
1807
3bf2bd20
SL
1808 config_group_init(&nullb_subsys.su_group);
1809 mutex_init(&nullb_subsys.su_mutex);
1810
1811 ret = configfs_register_subsystem(&nullb_subsys);
1812 if (ret)
1813 goto err_tagset;
1814
f2298c04
JA
1815 mutex_init(&lock);
1816
f2298c04 1817 null_major = register_blkdev(0, "nullb");
db2d153d
MG
1818 if (null_major < 0) {
1819 ret = null_major;
3bf2bd20 1820 goto err_conf;
db2d153d 1821 }
f2298c04
JA
1822
1823 for (i = 0; i < nr_devices; i++) {
2984c868 1824 dev = null_alloc_dev();
30c516d7
WY
1825 if (!dev) {
1826 ret = -ENOMEM;
2984c868 1827 goto err_dev;
30c516d7 1828 }
2984c868
SL
1829 ret = null_add_dev(dev);
1830 if (ret) {
1831 null_free_dev(dev);
af096e22 1832 goto err_dev;
2984c868 1833 }
f2298c04
JA
1834 }
1835
1836 pr_info("null: module loaded\n");
1837 return 0;
af096e22
MH
1838
1839err_dev:
1840 while (!list_empty(&nullb_list)) {
1841 nullb = list_entry(nullb_list.next, struct nullb, list);
2984c868 1842 dev = nullb->dev;
af096e22 1843 null_del_dev(nullb);
2984c868 1844 null_free_dev(dev);
af096e22 1845 }
af096e22 1846 unregister_blkdev(null_major, "nullb");
3bf2bd20
SL
1847err_conf:
1848 configfs_unregister_subsystem(&nullb_subsys);
db2d153d 1849err_tagset:
2984c868 1850 if (g_queue_mode == NULL_Q_MQ && shared_tags)
db2d153d 1851 blk_mq_free_tag_set(&tag_set);
af096e22 1852 return ret;
f2298c04
JA
1853}
1854
1855static void __exit null_exit(void)
1856{
1857 struct nullb *nullb;
1858
3bf2bd20
SL
1859 configfs_unregister_subsystem(&nullb_subsys);
1860
f2298c04
JA
1861 unregister_blkdev(null_major, "nullb");
1862
1863 mutex_lock(&lock);
1864 while (!list_empty(&nullb_list)) {
2984c868
SL
1865 struct nullb_device *dev;
1866
f2298c04 1867 nullb = list_entry(nullb_list.next, struct nullb, list);
2984c868 1868 dev = nullb->dev;
f2298c04 1869 null_del_dev(nullb);
2984c868 1870 null_free_dev(dev);
f2298c04
JA
1871 }
1872 mutex_unlock(&lock);
6bb9535b 1873
2984c868 1874 if (g_queue_mode == NULL_Q_MQ && shared_tags)
82f402fe 1875 blk_mq_free_tag_set(&tag_set);
f2298c04
JA
1876}
1877
1878module_init(null_init);
1879module_exit(null_exit);
1880
231b3db1 1881MODULE_AUTHOR("Jens Axboe <axboe@kernel.dk>");
f2298c04 1882MODULE_LICENSE("GPL");