nbd: don't shutdown sock with irq's disabled
[cascardo/linux.git] / drivers / block / nbd.c
1 /*
2  * Network block device - make block devices work over TCP
3  *
4  * Note that you can not swap over this thing, yet. Seems to work but
5  * deadlocks sometimes - you can not swap over TCP in general.
6  * 
7  * Copyright 1997-2000, 2008 Pavel Machek <pavel@ucw.cz>
8  * Parts copyright 2001 Steven Whitehouse <steve@chygwyn.com>
9  *
10  * This file is released under GPLv2 or later.
11  *
12  * (part of code stolen from loop.c)
13  */
14
15 #include <linux/major.h>
16
17 #include <linux/blkdev.h>
18 #include <linux/module.h>
19 #include <linux/init.h>
20 #include <linux/sched.h>
21 #include <linux/fs.h>
22 #include <linux/bio.h>
23 #include <linux/stat.h>
24 #include <linux/errno.h>
25 #include <linux/file.h>
26 #include <linux/ioctl.h>
27 #include <linux/mutex.h>
28 #include <linux/compiler.h>
29 #include <linux/err.h>
30 #include <linux/kernel.h>
31 #include <linux/slab.h>
32 #include <net/sock.h>
33 #include <linux/net.h>
34 #include <linux/kthread.h>
35 #include <linux/types.h>
36 #include <linux/debugfs.h>
37 #include <linux/blk-mq.h>
38
39 #include <asm/uaccess.h>
40 #include <asm/types.h>
41
42 #include <linux/nbd.h>
43
44 struct nbd_device {
45         u32 flags;
46         struct socket * sock;   /* If == NULL, device is not ready, yet */
47         int magic;
48
49         atomic_t outstanding_cmds;
50         struct blk_mq_tag_set tag_set;
51
52         struct mutex tx_lock;
53         struct gendisk *disk;
54         int blksize;
55         loff_t bytesize;
56         int xmit_timeout;
57         bool timedout;
58         bool disconnect; /* a disconnect has been requested by user */
59
60         struct timer_list timeout_timer;
61         /* protects initialization and shutdown of the socket */
62         spinlock_t sock_lock;
63         struct task_struct *task_recv;
64         struct task_struct *task_send;
65
66 #if IS_ENABLED(CONFIG_DEBUG_FS)
67         struct dentry *dbg_dir;
68 #endif
69 };
70
71 struct nbd_cmd {
72         struct nbd_device *nbd;
73         struct list_head list;
74 };
75
76 #if IS_ENABLED(CONFIG_DEBUG_FS)
77 static struct dentry *nbd_dbg_dir;
78 #endif
79
80 #define nbd_name(nbd) ((nbd)->disk->disk_name)
81
82 #define NBD_MAGIC 0x68797548
83
84 static unsigned int nbds_max = 16;
85 static struct nbd_device *nbd_dev;
86 static int max_part;
87
88 static inline struct device *nbd_to_dev(struct nbd_device *nbd)
89 {
90         return disk_to_dev(nbd->disk);
91 }
92
93 static bool nbd_is_connected(struct nbd_device *nbd)
94 {
95         return !!nbd->task_recv;
96 }
97
98 static const char *nbdcmd_to_ascii(int cmd)
99 {
100         switch (cmd) {
101         case  NBD_CMD_READ: return "read";
102         case NBD_CMD_WRITE: return "write";
103         case  NBD_CMD_DISC: return "disconnect";
104         case NBD_CMD_FLUSH: return "flush";
105         case  NBD_CMD_TRIM: return "trim/discard";
106         }
107         return "invalid";
108 }
109
110 static int nbd_size_clear(struct nbd_device *nbd, struct block_device *bdev)
111 {
112         bdev->bd_inode->i_size = 0;
113         set_capacity(nbd->disk, 0);
114         kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE);
115
116         return 0;
117 }
118
119 static void nbd_size_update(struct nbd_device *nbd, struct block_device *bdev)
120 {
121         if (!nbd_is_connected(nbd))
122                 return;
123
124         bdev->bd_inode->i_size = nbd->bytesize;
125         set_capacity(nbd->disk, nbd->bytesize >> 9);
126         kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE);
127 }
128
129 static int nbd_size_set(struct nbd_device *nbd, struct block_device *bdev,
130                         int blocksize, int nr_blocks)
131 {
132         int ret;
133
134         ret = set_blocksize(bdev, blocksize);
135         if (ret)
136                 return ret;
137
138         nbd->blksize = blocksize;
139         nbd->bytesize = (loff_t)blocksize * (loff_t)nr_blocks;
140
141         nbd_size_update(nbd, bdev);
142
143         return 0;
144 }
145
146 static void nbd_end_request(struct nbd_cmd *cmd)
147 {
148         struct nbd_device *nbd = cmd->nbd;
149         struct request *req = blk_mq_rq_from_pdu(cmd);
150         int error = req->errors ? -EIO : 0;
151
152         dev_dbg(nbd_to_dev(nbd), "request %p: %s\n", cmd,
153                 error ? "failed" : "done");
154
155         atomic_dec(&nbd->outstanding_cmds);
156         blk_mq_complete_request(req, error);
157 }
158
159 /*
160  * Forcibly shutdown the socket causing all listeners to error
161  */
162 static void sock_shutdown(struct nbd_device *nbd)
163 {
164         struct socket *sock;
165
166         spin_lock_irq(&nbd->sock_lock);
167
168         if (!nbd->sock) {
169                 spin_unlock_irq(&nbd->sock_lock);
170                 return;
171         }
172
173         sock = nbd->sock;
174         dev_warn(disk_to_dev(nbd->disk), "shutting down socket\n");
175         nbd->sock = NULL;
176         spin_unlock_irq(&nbd->sock_lock);
177
178         kernel_sock_shutdown(sock, SHUT_RDWR);
179         sockfd_put(sock);
180
181         del_timer(&nbd->timeout_timer);
182 }
183
184 static void nbd_xmit_timeout(unsigned long arg)
185 {
186         struct nbd_device *nbd = (struct nbd_device *)arg;
187         struct socket *sock = NULL;
188         unsigned long flags;
189
190         if (!atomic_read(&nbd->outstanding_cmds))
191                 return;
192
193         spin_lock_irqsave(&nbd->sock_lock, flags);
194
195         nbd->timedout = true;
196
197         if (nbd->sock) {
198                 sock = nbd->sock;
199                 get_file(sock->file);
200         }
201
202         spin_unlock_irqrestore(&nbd->sock_lock, flags);
203         if (sock) {
204                 kernel_sock_shutdown(sock, SHUT_RDWR);
205                 sockfd_put(sock);
206         }
207
208         dev_err(nbd_to_dev(nbd), "Connection timed out, shutting down connection\n");
209 }
210
211 /*
212  *  Send or receive packet.
213  */
214 static int sock_xmit(struct nbd_device *nbd, int send, void *buf, int size,
215                 int msg_flags)
216 {
217         struct socket *sock = nbd->sock;
218         int result;
219         struct msghdr msg;
220         struct kvec iov;
221         unsigned long pflags = current->flags;
222
223         if (unlikely(!sock)) {
224                 dev_err(disk_to_dev(nbd->disk),
225                         "Attempted %s on closed socket in sock_xmit\n",
226                         (send ? "send" : "recv"));
227                 return -EINVAL;
228         }
229
230         current->flags |= PF_MEMALLOC;
231         do {
232                 sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC;
233                 iov.iov_base = buf;
234                 iov.iov_len = size;
235                 msg.msg_name = NULL;
236                 msg.msg_namelen = 0;
237                 msg.msg_control = NULL;
238                 msg.msg_controllen = 0;
239                 msg.msg_flags = msg_flags | MSG_NOSIGNAL;
240
241                 if (send)
242                         result = kernel_sendmsg(sock, &msg, &iov, 1, size);
243                 else
244                         result = kernel_recvmsg(sock, &msg, &iov, 1, size,
245                                                 msg.msg_flags);
246
247                 if (result <= 0) {
248                         if (result == 0)
249                                 result = -EPIPE; /* short read */
250                         break;
251                 }
252                 size -= result;
253                 buf += result;
254         } while (size > 0);
255
256         tsk_restore_flags(current, pflags, PF_MEMALLOC);
257
258         if (!send && nbd->xmit_timeout)
259                 mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout);
260
261         return result;
262 }
263
264 static inline int sock_send_bvec(struct nbd_device *nbd, struct bio_vec *bvec,
265                 int flags)
266 {
267         int result;
268         void *kaddr = kmap(bvec->bv_page);
269         result = sock_xmit(nbd, 1, kaddr + bvec->bv_offset,
270                            bvec->bv_len, flags);
271         kunmap(bvec->bv_page);
272         return result;
273 }
274
275 /* always call with the tx_lock held */
276 static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd)
277 {
278         struct request *req = blk_mq_rq_from_pdu(cmd);
279         int result, flags;
280         struct nbd_request request;
281         unsigned long size = blk_rq_bytes(req);
282         u32 type;
283
284         if (req->cmd_type == REQ_TYPE_DRV_PRIV)
285                 type = NBD_CMD_DISC;
286         else if (req_op(req) == REQ_OP_DISCARD)
287                 type = NBD_CMD_TRIM;
288         else if (req_op(req) == REQ_OP_FLUSH)
289                 type = NBD_CMD_FLUSH;
290         else if (rq_data_dir(req) == WRITE)
291                 type = NBD_CMD_WRITE;
292         else
293                 type = NBD_CMD_READ;
294
295         memset(&request, 0, sizeof(request));
296         request.magic = htonl(NBD_REQUEST_MAGIC);
297         request.type = htonl(type);
298         if (type != NBD_CMD_FLUSH && type != NBD_CMD_DISC) {
299                 request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9);
300                 request.len = htonl(size);
301         }
302         memcpy(request.handle, &req->tag, sizeof(req->tag));
303
304         dev_dbg(nbd_to_dev(nbd), "request %p: sending control (%s@%llu,%uB)\n",
305                 cmd, nbdcmd_to_ascii(type),
306                 (unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req));
307         result = sock_xmit(nbd, 1, &request, sizeof(request),
308                         (type == NBD_CMD_WRITE) ? MSG_MORE : 0);
309         if (result <= 0) {
310                 dev_err(disk_to_dev(nbd->disk),
311                         "Send control failed (result %d)\n", result);
312                 return -EIO;
313         }
314
315         if (type == NBD_CMD_WRITE) {
316                 struct req_iterator iter;
317                 struct bio_vec bvec;
318                 /*
319                  * we are really probing at internals to determine
320                  * whether to set MSG_MORE or not...
321                  */
322                 rq_for_each_segment(bvec, req, iter) {
323                         flags = 0;
324                         if (!rq_iter_last(bvec, iter))
325                                 flags = MSG_MORE;
326                         dev_dbg(nbd_to_dev(nbd), "request %p: sending %d bytes data\n",
327                                 cmd, bvec.bv_len);
328                         result = sock_send_bvec(nbd, &bvec, flags);
329                         if (result <= 0) {
330                                 dev_err(disk_to_dev(nbd->disk),
331                                         "Send data failed (result %d)\n",
332                                         result);
333                                 return -EIO;
334                         }
335                 }
336         }
337         return 0;
338 }
339
340 static inline int sock_recv_bvec(struct nbd_device *nbd, struct bio_vec *bvec)
341 {
342         int result;
343         void *kaddr = kmap(bvec->bv_page);
344         result = sock_xmit(nbd, 0, kaddr + bvec->bv_offset, bvec->bv_len,
345                         MSG_WAITALL);
346         kunmap(bvec->bv_page);
347         return result;
348 }
349
350 /* NULL returned = something went wrong, inform userspace */
351 static struct nbd_cmd *nbd_read_stat(struct nbd_device *nbd)
352 {
353         int result;
354         struct nbd_reply reply;
355         struct nbd_cmd *cmd;
356         struct request *req = NULL;
357         u16 hwq;
358         int tag;
359
360         reply.magic = 0;
361         result = sock_xmit(nbd, 0, &reply, sizeof(reply), MSG_WAITALL);
362         if (result <= 0) {
363                 dev_err(disk_to_dev(nbd->disk),
364                         "Receive control failed (result %d)\n", result);
365                 return ERR_PTR(result);
366         }
367
368         if (ntohl(reply.magic) != NBD_REPLY_MAGIC) {
369                 dev_err(disk_to_dev(nbd->disk), "Wrong magic (0x%lx)\n",
370                                 (unsigned long)ntohl(reply.magic));
371                 return ERR_PTR(-EPROTO);
372         }
373
374         memcpy(&tag, reply.handle, sizeof(int));
375
376         hwq = blk_mq_unique_tag_to_hwq(tag);
377         if (hwq < nbd->tag_set.nr_hw_queues)
378                 req = blk_mq_tag_to_rq(nbd->tag_set.tags[hwq],
379                                        blk_mq_unique_tag_to_tag(tag));
380         if (!req || !blk_mq_request_started(req)) {
381                 dev_err(disk_to_dev(nbd->disk), "Unexpected reply (%d) %p\n",
382                         tag, req);
383                 return ERR_PTR(-ENOENT);
384         }
385         cmd = blk_mq_rq_to_pdu(req);
386
387         if (ntohl(reply.error)) {
388                 dev_err(disk_to_dev(nbd->disk), "Other side returned error (%d)\n",
389                         ntohl(reply.error));
390                 req->errors++;
391                 return cmd;
392         }
393
394         dev_dbg(nbd_to_dev(nbd), "request %p: got reply\n", cmd);
395         if (rq_data_dir(req) != WRITE) {
396                 struct req_iterator iter;
397                 struct bio_vec bvec;
398
399                 rq_for_each_segment(bvec, req, iter) {
400                         result = sock_recv_bvec(nbd, &bvec);
401                         if (result <= 0) {
402                                 dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n",
403                                         result);
404                                 req->errors++;
405                                 return cmd;
406                         }
407                         dev_dbg(nbd_to_dev(nbd), "request %p: got %d bytes data\n",
408                                 cmd, bvec.bv_len);
409                 }
410         }
411         return cmd;
412 }
413
414 static ssize_t pid_show(struct device *dev,
415                         struct device_attribute *attr, char *buf)
416 {
417         struct gendisk *disk = dev_to_disk(dev);
418         struct nbd_device *nbd = (struct nbd_device *)disk->private_data;
419
420         return sprintf(buf, "%d\n", task_pid_nr(nbd->task_recv));
421 }
422
423 static struct device_attribute pid_attr = {
424         .attr = { .name = "pid", .mode = S_IRUGO},
425         .show = pid_show,
426 };
427
428 static int nbd_thread_recv(struct nbd_device *nbd, struct block_device *bdev)
429 {
430         struct nbd_cmd *cmd;
431         int ret;
432
433         BUG_ON(nbd->magic != NBD_MAGIC);
434
435         sk_set_memalloc(nbd->sock->sk);
436
437         ret = device_create_file(disk_to_dev(nbd->disk), &pid_attr);
438         if (ret) {
439                 dev_err(disk_to_dev(nbd->disk), "device_create_file failed!\n");
440                 return ret;
441         }
442
443         nbd_size_update(nbd, bdev);
444
445         while (1) {
446                 cmd = nbd_read_stat(nbd);
447                 if (IS_ERR(cmd)) {
448                         ret = PTR_ERR(cmd);
449                         break;
450                 }
451
452                 nbd_end_request(cmd);
453         }
454
455         nbd_size_clear(nbd, bdev);
456
457         device_remove_file(disk_to_dev(nbd->disk), &pid_attr);
458         return ret;
459 }
460
461 static void nbd_clear_req(struct request *req, void *data, bool reserved)
462 {
463         struct nbd_cmd *cmd;
464
465         if (!blk_mq_request_started(req))
466                 return;
467         cmd = blk_mq_rq_to_pdu(req);
468         req->errors++;
469         nbd_end_request(cmd);
470 }
471
472 static void nbd_clear_que(struct nbd_device *nbd)
473 {
474         BUG_ON(nbd->magic != NBD_MAGIC);
475
476         /*
477          * Because we have set nbd->sock to NULL under the tx_lock, all
478          * modifications to the list must have completed by now.
479          */
480         BUG_ON(nbd->sock);
481
482         blk_mq_tagset_busy_iter(&nbd->tag_set, nbd_clear_req, NULL);
483         dev_dbg(disk_to_dev(nbd->disk), "queue cleared\n");
484 }
485
486
487 static void nbd_handle_cmd(struct nbd_cmd *cmd)
488 {
489         struct request *req = blk_mq_rq_from_pdu(cmd);
490         struct nbd_device *nbd = cmd->nbd;
491
492         if (req->cmd_type != REQ_TYPE_FS)
493                 goto error_out;
494
495         if (rq_data_dir(req) == WRITE &&
496             (nbd->flags & NBD_FLAG_READ_ONLY)) {
497                 dev_err(disk_to_dev(nbd->disk),
498                         "Write on read-only\n");
499                 goto error_out;
500         }
501
502         req->errors = 0;
503
504         mutex_lock(&nbd->tx_lock);
505         nbd->task_send = current;
506         if (unlikely(!nbd->sock)) {
507                 mutex_unlock(&nbd->tx_lock);
508                 dev_err(disk_to_dev(nbd->disk),
509                         "Attempted send on closed socket\n");
510                 goto error_out;
511         }
512
513         if (nbd->xmit_timeout && !atomic_read(&nbd->outstanding_cmds))
514                 mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout);
515
516         atomic_inc(&nbd->outstanding_cmds);
517         if (nbd_send_cmd(nbd, cmd) != 0) {
518                 dev_err(disk_to_dev(nbd->disk), "Request send failed\n");
519                 req->errors++;
520                 nbd_end_request(cmd);
521         }
522
523         nbd->task_send = NULL;
524         mutex_unlock(&nbd->tx_lock);
525
526         return;
527
528 error_out:
529         req->errors++;
530         nbd_end_request(cmd);
531 }
532
533 static int nbd_queue_rq(struct blk_mq_hw_ctx *hctx,
534                         const struct blk_mq_queue_data *bd)
535 {
536         struct nbd_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
537
538         blk_mq_start_request(bd->rq);
539         nbd_handle_cmd(cmd);
540         return BLK_MQ_RQ_QUEUE_OK;
541 }
542
543 static int nbd_set_socket(struct nbd_device *nbd, struct socket *sock)
544 {
545         int ret = 0;
546
547         spin_lock_irq(&nbd->sock_lock);
548
549         if (nbd->sock) {
550                 ret = -EBUSY;
551                 goto out;
552         }
553
554         nbd->sock = sock;
555
556 out:
557         spin_unlock_irq(&nbd->sock_lock);
558
559         return ret;
560 }
561
562 /* Reset all properties of an NBD device */
563 static void nbd_reset(struct nbd_device *nbd)
564 {
565         nbd->disconnect = false;
566         nbd->timedout = false;
567         nbd->blksize = 1024;
568         nbd->bytesize = 0;
569         set_capacity(nbd->disk, 0);
570         nbd->flags = 0;
571         nbd->xmit_timeout = 0;
572         queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue);
573         del_timer_sync(&nbd->timeout_timer);
574 }
575
576 static void nbd_bdev_reset(struct block_device *bdev)
577 {
578         set_device_ro(bdev, false);
579         bdev->bd_inode->i_size = 0;
580         if (max_part > 0) {
581                 blkdev_reread_part(bdev);
582                 bdev->bd_invalidated = 1;
583         }
584 }
585
586 static void nbd_parse_flags(struct nbd_device *nbd, struct block_device *bdev)
587 {
588         if (nbd->flags & NBD_FLAG_READ_ONLY)
589                 set_device_ro(bdev, true);
590         if (nbd->flags & NBD_FLAG_SEND_TRIM)
591                 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue);
592         if (nbd->flags & NBD_FLAG_SEND_FLUSH)
593                 blk_queue_write_cache(nbd->disk->queue, true, false);
594         else
595                 blk_queue_write_cache(nbd->disk->queue, false, false);
596 }
597
598 static int nbd_dev_dbg_init(struct nbd_device *nbd);
599 static void nbd_dev_dbg_close(struct nbd_device *nbd);
600
601 /* Must be called with tx_lock held */
602
603 static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
604                        unsigned int cmd, unsigned long arg)
605 {
606         switch (cmd) {
607         case NBD_DISCONNECT: {
608                 struct request *sreq;
609
610                 dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n");
611                 if (!nbd->sock)
612                         return -EINVAL;
613
614                 sreq = blk_mq_alloc_request(bdev_get_queue(bdev), WRITE, 0);
615                 if (!sreq)
616                         return -ENOMEM;
617
618                 mutex_unlock(&nbd->tx_lock);
619                 fsync_bdev(bdev);
620                 mutex_lock(&nbd->tx_lock);
621                 sreq->cmd_type = REQ_TYPE_DRV_PRIV;
622
623                 /* Check again after getting mutex back.  */
624                 if (!nbd->sock) {
625                         blk_mq_free_request(sreq);
626                         return -EINVAL;
627                 }
628
629                 nbd->disconnect = true;
630
631                 nbd_send_cmd(nbd, blk_mq_rq_to_pdu(sreq));
632                 blk_mq_free_request(sreq);
633                 return 0;
634         }
635  
636         case NBD_CLEAR_SOCK:
637                 sock_shutdown(nbd);
638                 nbd_clear_que(nbd);
639                 kill_bdev(bdev);
640                 return 0;
641
642         case NBD_SET_SOCK: {
643                 int err;
644                 struct socket *sock = sockfd_lookup(arg, &err);
645
646                 if (!sock)
647                         return err;
648
649                 err = nbd_set_socket(nbd, sock);
650                 if (!err && max_part)
651                         bdev->bd_invalidated = 1;
652
653                 return err;
654         }
655
656         case NBD_SET_BLKSIZE: {
657                 loff_t bsize = div_s64(nbd->bytesize, arg);
658
659                 return nbd_size_set(nbd, bdev, arg, bsize);
660         }
661
662         case NBD_SET_SIZE:
663                 return nbd_size_set(nbd, bdev, nbd->blksize,
664                                     arg / nbd->blksize);
665
666         case NBD_SET_SIZE_BLOCKS:
667                 return nbd_size_set(nbd, bdev, nbd->blksize, arg);
668
669         case NBD_SET_TIMEOUT:
670                 nbd->xmit_timeout = arg * HZ;
671                 if (arg)
672                         mod_timer(&nbd->timeout_timer,
673                                   jiffies + nbd->xmit_timeout);
674                 else
675                         del_timer_sync(&nbd->timeout_timer);
676
677                 return 0;
678
679         case NBD_SET_FLAGS:
680                 nbd->flags = arg;
681                 return 0;
682
683         case NBD_DO_IT: {
684                 int error;
685
686                 if (nbd->task_recv)
687                         return -EBUSY;
688                 if (!nbd->sock)
689                         return -EINVAL;
690
691                 /* We have to claim the device under the lock */
692                 nbd->task_recv = current;
693                 mutex_unlock(&nbd->tx_lock);
694
695                 nbd_parse_flags(nbd, bdev);
696
697                 nbd_dev_dbg_init(nbd);
698                 error = nbd_thread_recv(nbd, bdev);
699                 nbd_dev_dbg_close(nbd);
700
701                 mutex_lock(&nbd->tx_lock);
702                 nbd->task_recv = NULL;
703
704                 sock_shutdown(nbd);
705                 nbd_clear_que(nbd);
706                 kill_bdev(bdev);
707                 nbd_bdev_reset(bdev);
708
709                 if (nbd->disconnect) /* user requested, ignore socket errors */
710                         error = 0;
711                 if (nbd->timedout)
712                         error = -ETIMEDOUT;
713
714                 nbd_reset(nbd);
715
716                 return error;
717         }
718
719         case NBD_CLEAR_QUE:
720                 /*
721                  * This is for compatibility only.  The queue is always cleared
722                  * by NBD_DO_IT or NBD_CLEAR_SOCK.
723                  */
724                 return 0;
725
726         case NBD_PRINT_DEBUG:
727                 /*
728                  * For compatibility only, we no longer keep a list of
729                  * outstanding requests.
730                  */
731                 return 0;
732         }
733         return -ENOTTY;
734 }
735
736 static int nbd_ioctl(struct block_device *bdev, fmode_t mode,
737                      unsigned int cmd, unsigned long arg)
738 {
739         struct nbd_device *nbd = bdev->bd_disk->private_data;
740         int error;
741
742         if (!capable(CAP_SYS_ADMIN))
743                 return -EPERM;
744
745         BUG_ON(nbd->magic != NBD_MAGIC);
746
747         mutex_lock(&nbd->tx_lock);
748         error = __nbd_ioctl(bdev, nbd, cmd, arg);
749         mutex_unlock(&nbd->tx_lock);
750
751         return error;
752 }
753
754 static const struct block_device_operations nbd_fops =
755 {
756         .owner =        THIS_MODULE,
757         .ioctl =        nbd_ioctl,
758         .compat_ioctl = nbd_ioctl,
759 };
760
761 #if IS_ENABLED(CONFIG_DEBUG_FS)
762
763 static int nbd_dbg_tasks_show(struct seq_file *s, void *unused)
764 {
765         struct nbd_device *nbd = s->private;
766
767         if (nbd->task_recv)
768                 seq_printf(s, "recv: %d\n", task_pid_nr(nbd->task_recv));
769         if (nbd->task_send)
770                 seq_printf(s, "send: %d\n", task_pid_nr(nbd->task_send));
771
772         return 0;
773 }
774
775 static int nbd_dbg_tasks_open(struct inode *inode, struct file *file)
776 {
777         return single_open(file, nbd_dbg_tasks_show, inode->i_private);
778 }
779
780 static const struct file_operations nbd_dbg_tasks_ops = {
781         .open = nbd_dbg_tasks_open,
782         .read = seq_read,
783         .llseek = seq_lseek,
784         .release = single_release,
785 };
786
787 static int nbd_dbg_flags_show(struct seq_file *s, void *unused)
788 {
789         struct nbd_device *nbd = s->private;
790         u32 flags = nbd->flags;
791
792         seq_printf(s, "Hex: 0x%08x\n\n", flags);
793
794         seq_puts(s, "Known flags:\n");
795
796         if (flags & NBD_FLAG_HAS_FLAGS)
797                 seq_puts(s, "NBD_FLAG_HAS_FLAGS\n");
798         if (flags & NBD_FLAG_READ_ONLY)
799                 seq_puts(s, "NBD_FLAG_READ_ONLY\n");
800         if (flags & NBD_FLAG_SEND_FLUSH)
801                 seq_puts(s, "NBD_FLAG_SEND_FLUSH\n");
802         if (flags & NBD_FLAG_SEND_TRIM)
803                 seq_puts(s, "NBD_FLAG_SEND_TRIM\n");
804
805         return 0;
806 }
807
808 static int nbd_dbg_flags_open(struct inode *inode, struct file *file)
809 {
810         return single_open(file, nbd_dbg_flags_show, inode->i_private);
811 }
812
813 static const struct file_operations nbd_dbg_flags_ops = {
814         .open = nbd_dbg_flags_open,
815         .read = seq_read,
816         .llseek = seq_lseek,
817         .release = single_release,
818 };
819
820 static int nbd_dev_dbg_init(struct nbd_device *nbd)
821 {
822         struct dentry *dir;
823
824         if (!nbd_dbg_dir)
825                 return -EIO;
826
827         dir = debugfs_create_dir(nbd_name(nbd), nbd_dbg_dir);
828         if (!dir) {
829                 dev_err(nbd_to_dev(nbd), "Failed to create debugfs dir for '%s'\n",
830                         nbd_name(nbd));
831                 return -EIO;
832         }
833         nbd->dbg_dir = dir;
834
835         debugfs_create_file("tasks", 0444, dir, nbd, &nbd_dbg_tasks_ops);
836         debugfs_create_u64("size_bytes", 0444, dir, &nbd->bytesize);
837         debugfs_create_u32("timeout", 0444, dir, &nbd->xmit_timeout);
838         debugfs_create_u32("blocksize", 0444, dir, &nbd->blksize);
839         debugfs_create_file("flags", 0444, dir, nbd, &nbd_dbg_flags_ops);
840
841         return 0;
842 }
843
844 static void nbd_dev_dbg_close(struct nbd_device *nbd)
845 {
846         debugfs_remove_recursive(nbd->dbg_dir);
847 }
848
849 static int nbd_dbg_init(void)
850 {
851         struct dentry *dbg_dir;
852
853         dbg_dir = debugfs_create_dir("nbd", NULL);
854         if (!dbg_dir)
855                 return -EIO;
856
857         nbd_dbg_dir = dbg_dir;
858
859         return 0;
860 }
861
862 static void nbd_dbg_close(void)
863 {
864         debugfs_remove_recursive(nbd_dbg_dir);
865 }
866
867 #else  /* IS_ENABLED(CONFIG_DEBUG_FS) */
868
869 static int nbd_dev_dbg_init(struct nbd_device *nbd)
870 {
871         return 0;
872 }
873
874 static void nbd_dev_dbg_close(struct nbd_device *nbd)
875 {
876 }
877
878 static int nbd_dbg_init(void)
879 {
880         return 0;
881 }
882
883 static void nbd_dbg_close(void)
884 {
885 }
886
887 #endif
888
889 static int nbd_init_request(void *data, struct request *rq,
890                             unsigned int hctx_idx, unsigned int request_idx,
891                             unsigned int numa_node)
892 {
893         struct nbd_cmd *cmd = blk_mq_rq_to_pdu(rq);
894
895         cmd->nbd = data;
896         INIT_LIST_HEAD(&cmd->list);
897         return 0;
898 }
899
900 static struct blk_mq_ops nbd_mq_ops = {
901         .queue_rq       = nbd_queue_rq,
902         .map_queue      = blk_mq_map_queue,
903         .init_request   = nbd_init_request,
904 };
905
906 /*
907  * And here should be modules and kernel interface 
908  *  (Just smiley confuses emacs :-)
909  */
910
911 static int __init nbd_init(void)
912 {
913         int err = -ENOMEM;
914         int i;
915         int part_shift;
916
917         BUILD_BUG_ON(sizeof(struct nbd_request) != 28);
918
919         if (max_part < 0) {
920                 printk(KERN_ERR "nbd: max_part must be >= 0\n");
921                 return -EINVAL;
922         }
923
924         part_shift = 0;
925         if (max_part > 0) {
926                 part_shift = fls(max_part);
927
928                 /*
929                  * Adjust max_part according to part_shift as it is exported
930                  * to user space so that user can know the max number of
931                  * partition kernel should be able to manage.
932                  *
933                  * Note that -1 is required because partition 0 is reserved
934                  * for the whole disk.
935                  */
936                 max_part = (1UL << part_shift) - 1;
937         }
938
939         if ((1UL << part_shift) > DISK_MAX_PARTS)
940                 return -EINVAL;
941
942         if (nbds_max > 1UL << (MINORBITS - part_shift))
943                 return -EINVAL;
944
945         nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL);
946         if (!nbd_dev)
947                 return -ENOMEM;
948
949         for (i = 0; i < nbds_max; i++) {
950                 struct gendisk *disk = alloc_disk(1 << part_shift);
951                 if (!disk)
952                         goto out;
953                 nbd_dev[i].disk = disk;
954
955                 nbd_dev[i].tag_set.ops = &nbd_mq_ops;
956                 nbd_dev[i].tag_set.nr_hw_queues = 1;
957                 nbd_dev[i].tag_set.queue_depth = 128;
958                 nbd_dev[i].tag_set.numa_node = NUMA_NO_NODE;
959                 nbd_dev[i].tag_set.cmd_size = sizeof(struct nbd_cmd);
960                 nbd_dev[i].tag_set.flags = BLK_MQ_F_SHOULD_MERGE |
961                         BLK_MQ_F_SG_MERGE;
962                 nbd_dev[i].tag_set.driver_data = &nbd_dev[i];
963
964                 err = blk_mq_alloc_tag_set(&nbd_dev[i].tag_set);
965                 if (err) {
966                         put_disk(disk);
967                         goto out;
968                 }
969
970                 /*
971                  * The new linux 2.5 block layer implementation requires
972                  * every gendisk to have its very own request_queue struct.
973                  * These structs are big so we dynamically allocate them.
974                  */
975                 disk->queue = blk_mq_init_queue(&nbd_dev[i].tag_set);
976                 if (!disk->queue) {
977                         blk_mq_free_tag_set(&nbd_dev[i].tag_set);
978                         put_disk(disk);
979                         goto out;
980                 }
981
982                 /*
983                  * Tell the block layer that we are not a rotational device
984                  */
985                 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, disk->queue);
986                 queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, disk->queue);
987                 disk->queue->limits.discard_granularity = 512;
988                 blk_queue_max_discard_sectors(disk->queue, UINT_MAX);
989                 disk->queue->limits.discard_zeroes_data = 0;
990                 blk_queue_max_hw_sectors(disk->queue, 65536);
991                 disk->queue->limits.max_sectors = 256;
992         }
993
994         if (register_blkdev(NBD_MAJOR, "nbd")) {
995                 err = -EIO;
996                 goto out;
997         }
998
999         printk(KERN_INFO "nbd: registered device at major %d\n", NBD_MAJOR);
1000
1001         nbd_dbg_init();
1002
1003         for (i = 0; i < nbds_max; i++) {
1004                 struct gendisk *disk = nbd_dev[i].disk;
1005                 nbd_dev[i].magic = NBD_MAGIC;
1006                 spin_lock_init(&nbd_dev[i].sock_lock);
1007                 mutex_init(&nbd_dev[i].tx_lock);
1008                 init_timer(&nbd_dev[i].timeout_timer);
1009                 nbd_dev[i].timeout_timer.function = nbd_xmit_timeout;
1010                 nbd_dev[i].timeout_timer.data = (unsigned long)&nbd_dev[i];
1011                 atomic_set(&nbd_dev[i].outstanding_cmds, 0);
1012                 disk->major = NBD_MAJOR;
1013                 disk->first_minor = i << part_shift;
1014                 disk->fops = &nbd_fops;
1015                 disk->private_data = &nbd_dev[i];
1016                 sprintf(disk->disk_name, "nbd%d", i);
1017                 nbd_reset(&nbd_dev[i]);
1018                 add_disk(disk);
1019         }
1020
1021         return 0;
1022 out:
1023         while (i--) {
1024                 blk_mq_free_tag_set(&nbd_dev[i].tag_set);
1025                 blk_cleanup_queue(nbd_dev[i].disk->queue);
1026                 put_disk(nbd_dev[i].disk);
1027         }
1028         kfree(nbd_dev);
1029         return err;
1030 }
1031
1032 static void __exit nbd_cleanup(void)
1033 {
1034         int i;
1035
1036         nbd_dbg_close();
1037
1038         for (i = 0; i < nbds_max; i++) {
1039                 struct gendisk *disk = nbd_dev[i].disk;
1040                 nbd_dev[i].magic = 0;
1041                 if (disk) {
1042                         del_gendisk(disk);
1043                         blk_cleanup_queue(disk->queue);
1044                         blk_mq_free_tag_set(&nbd_dev[i].tag_set);
1045                         put_disk(disk);
1046                 }
1047         }
1048         unregister_blkdev(NBD_MAJOR, "nbd");
1049         kfree(nbd_dev);
1050         printk(KERN_INFO "nbd: unregistered device at major %d\n", NBD_MAJOR);
1051 }
1052
1053 module_init(nbd_init);
1054 module_exit(nbd_cleanup);
1055
1056 MODULE_DESCRIPTION("Network Block Device");
1057 MODULE_LICENSE("GPL");
1058
1059 module_param(nbds_max, int, 0444);
1060 MODULE_PARM_DESC(nbds_max, "number of network block devices to initialize (default: 16)");
1061 module_param(max_part, int, 0444);
1062 MODULE_PARM_DESC(max_part, "number of partitions per device (default: 0)");