LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PULL] NBD patches for 4.1
@ 2015-04-02  8:11 Markus Pargmann
  2015-04-02  8:11 ` [PATCH 1/9] Documentation: nbd: Reformat to allow more documentation Markus Pargmann
                   ` (9 more replies)
  0 siblings, 10 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

Hi Jens,

This pull request contains some NBD cleanups.

The documentation was updated to be extensible for future features and the
module parameters were added.

NBD had an internal header located at include/linux/nbd.h which was only used
by nbd.c. So I moved the header content from include/ to the top of nbd.c.

The debugging prints of nbd which contained a basic filter functionality were
replaced by dev_dbg(). This removes the ability to filter by categories. But it
is now possible to use dynamic debugging.

The other patches are some small simplifications.

Best Regards,

Markus


The following changes since commit 9eccca0843205f87c00404b663188b88eb248051:

  Linux 4.0-rc3 (2015-03-08 16:09:09 -0700)

are available in the git repository at:

  git://git.pengutronix.de/git/mpa/linux-nbd.git tags/nbd-for-4.1

for you to fetch changes up to b824817aed32f1851ee0a7318dfcc76cabcb3069:

  nbd: Return error pointer directly (2015-04-01 13:07:28 +0200)

----------------------------------------------------------------
nbd cleanups for 4.1 based on v4.0-rc3

----------------------------------------------------------------
Markus Pargmann (9):
      Documentation: nbd: Reformat to allow more documentation
      Documentation: nbd: Add list of module parameters
      nbd: Remove kernel internal header
      nbd: Replace kthread_create with kthread_run
      nbd: Fix device bytesize type
      nbd: Restructure debugging prints
      nbd: Remove fixme that was already fixed
      nbd: Return error code directly
      nbd: Return error pointer directly

 Documentation/blockdev/nbd.txt |  48 +++++++++-----
 drivers/block/nbd.c            | 140 ++++++++++++++++-------------------------
 include/linux/nbd.h            |  46 --------------
 3 files changed, 86 insertions(+), 148 deletions(-)
 delete mode 100644 include/linux/nbd.h

-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/9] Documentation: nbd: Reformat to allow more documentation
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  8:11 ` [PATCH 2/9] Documentation: nbd: Add list of module parameters Markus Pargmann
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

Reformat the existing documentation to have more structure. This allows
for more documentation seperated from the existing paragraphs.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
---
 Documentation/blockdev/nbd.txt | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/Documentation/blockdev/nbd.txt b/Documentation/blockdev/nbd.txt
index 271e607304da..337946bd460e 100644
--- a/Documentation/blockdev/nbd.txt
+++ b/Documentation/blockdev/nbd.txt
@@ -1,17 +1,21 @@
-                      Network Block Device (TCP version)
-                                       
-   What is it: With this compiled in the kernel (or as a module), Linux
-   can use a remote server as one of its block devices. So every time
-   the client computer wants to read, e.g., /dev/nb0, it sends a
-   request over TCP to the server, which will reply with the data read.
-   This can be used for stations with low disk space (or even diskless)
-   to borrow disk space from another computer.
-   Unlike NFS, it is possible to put any filesystem on it, etc.
+Network Block Device (TCP version)
+==================================
 
-   For more information, or to download the nbd-client and nbd-server
-   tools, go to http://nbd.sf.net/.
+1) Overview
+-----------
 
-   The nbd kernel module need only be installed on the client
-   system, as the nbd-server is completely in userspace. In fact,
-   the nbd-server has been successfully ported to other operating
-   systems, including Windows.
+What is it: With this compiled in the kernel (or as a module), Linux
+can use a remote server as one of its block devices. So every time
+the client computer wants to read, e.g., /dev/nb0, it sends a
+request over TCP to the server, which will reply with the data read.
+This can be used for stations with low disk space (or even diskless)
+to borrow disk space from another computer.
+Unlike NFS, it is possible to put any filesystem on it, etc.
+
+For more information, or to download the nbd-client and nbd-server
+tools, go to http://nbd.sf.net/.
+
+The nbd kernel module need only be installed on the client
+system, as the nbd-server is completely in userspace. In fact,
+the nbd-server has been successfully ported to other operating
+systems, including Windows.
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 2/9] Documentation: nbd: Add list of module parameters
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
  2015-04-02  8:11 ` [PATCH 1/9] Documentation: nbd: Reformat to allow more documentation Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  8:11 ` [PATCH 3/9] nbd: Remove kernel internal header Markus Pargmann
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

Add a list of available module parameters as attachment to the
documentation.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
---
 Documentation/blockdev/nbd.txt | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/Documentation/blockdev/nbd.txt b/Documentation/blockdev/nbd.txt
index 337946bd460e..db242ea2bce8 100644
--- a/Documentation/blockdev/nbd.txt
+++ b/Documentation/blockdev/nbd.txt
@@ -19,3 +19,13 @@ The nbd kernel module need only be installed on the client
 system, as the nbd-server is completely in userspace. In fact,
 the nbd-server has been successfully ported to other operating
 systems, including Windows.
+
+A) NBD parameters
+-----------------
+
+max_part
+	Number of partitions per device (default: 0).
+
+nbds_max
+	Number of block devices that should be initialized (default: 16).
+
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 3/9] nbd: Remove kernel internal header
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
  2015-04-02  8:11 ` [PATCH 1/9] Documentation: nbd: Reformat to allow more documentation Markus Pargmann
  2015-04-02  8:11 ` [PATCH 2/9] Documentation: nbd: Add list of module parameters Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  8:11 ` [PATCH 4/9] nbd: Replace kthread_create with kthread_run Markus Pargmann
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

The header is not included anywhere. Remove it and include the private
nbd_device struct in nbd.c.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
---
 drivers/block/nbd.c | 22 ++++++++++++++++++++++
 include/linux/nbd.h | 46 ----------------------------------------------
 2 files changed, 22 insertions(+), 46 deletions(-)
 delete mode 100644 include/linux/nbd.h

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 4bc2a5cb9935..58c2b20ad17b 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -38,6 +38,28 @@
 
 #include <linux/nbd.h>
 
+struct nbd_device {
+	int flags;
+	int harderror;		/* Code of hard error			*/
+	struct socket * sock;	/* If == NULL, device is not ready, yet	*/
+	int magic;
+
+	spinlock_t queue_lock;
+	struct list_head queue_head;	/* Requests waiting result */
+	struct request *active_req;
+	wait_queue_head_t active_wq;
+	struct list_head waiting_queue;	/* Requests to be sent */
+	wait_queue_head_t waiting_wq;
+
+	struct mutex tx_lock;
+	struct gendisk *disk;
+	int blksize;
+	u64 bytesize;
+	pid_t pid; /* pid of nbd-client, if attached */
+	int xmit_timeout;
+	int disconnect; /* a disconnect has been requested by user */
+};
+
 #define NBD_MAGIC 0x68797548
 
 #ifdef NDEBUG
diff --git a/include/linux/nbd.h b/include/linux/nbd.h
deleted file mode 100644
index f62f78aef4ac..000000000000
--- a/include/linux/nbd.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
- * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
- *            Made nbd_end_request() use the io_request_lock
- * 2001 Copyright (C) Steven Whitehouse
- *            New nbd_end_request() for compatibility with new linux block
- *            layer code.
- * 2003/06/24 Louis D. Langholtz <ldl@aros.net>
- *            Removed unneeded blksize_bits field from nbd_device struct.
- *            Cleanup PARANOIA usage & code.
- * 2004/02/19 Paul Clements
- *            Removed PARANOIA, plus various cleanup and comments
- */
-#ifndef LINUX_NBD_H
-#define LINUX_NBD_H
-
-
-#include <linux/wait.h>
-#include <linux/mutex.h>
-#include <uapi/linux/nbd.h>
-
-struct request;
-
-struct nbd_device {
-	int flags;
-	int harderror;		/* Code of hard error			*/
-	struct socket * sock;	/* If == NULL, device is not ready, yet	*/
-	int magic;
-
-	spinlock_t queue_lock;
-	struct list_head queue_head;	/* Requests waiting result */
-	struct request *active_req;
-	wait_queue_head_t active_wq;
-	struct list_head waiting_queue;	/* Requests to be sent */
-	wait_queue_head_t waiting_wq;
-
-	struct mutex tx_lock;
-	struct gendisk *disk;
-	int blksize;
-	u64 bytesize;
-	pid_t pid; /* pid of nbd-client, if attached */
-	int xmit_timeout;
-	int disconnect; /* a disconnect has been requested by user */
-};
-
-#endif
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 4/9] nbd: Replace kthread_create with kthread_run
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
                   ` (2 preceding siblings ...)
  2015-04-02  8:11 ` [PATCH 3/9] nbd: Remove kernel internal header Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  8:11 ` [PATCH 5/9] nbd: Fix device bytesize type Markus Pargmann
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

kthread_run includes the wake_up_process() call, so instead of
kthread_create() followed by wake_up_process() we can use this macro.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/block/nbd.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 58c2b20ad17b..c07160c25a94 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -728,13 +728,13 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
 		else
 			blk_queue_flush(nbd->disk->queue, 0);
 
-		thread = kthread_create(nbd_thread, nbd, "%s",
-					nbd->disk->disk_name);
+		thread = kthread_run(nbd_thread, nbd, "%s",
+				     nbd->disk->disk_name);
 		if (IS_ERR(thread)) {
 			mutex_lock(&nbd->tx_lock);
 			return PTR_ERR(thread);
 		}
-		wake_up_process(thread);
+
 		error = nbd_do_it(nbd);
 		kthread_stop(thread);
 
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 5/9] nbd: Fix device bytesize type
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
                   ` (3 preceding siblings ...)
  2015-04-02  8:11 ` [PATCH 4/9] nbd: Replace kthread_create with kthread_run Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  8:11 ` [PATCH 6/9] nbd: Restructure debugging prints Markus Pargmann
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

The block subsystem uses loff_t to store the device size. Change the
type for nbd_device bytesize to loff_t.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/block/nbd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index c07160c25a94..13c8371cbf4c 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -32,6 +32,7 @@
 #include <net/sock.h>
 #include <linux/net.h>
 #include <linux/kthread.h>
+#include <linux/types.h>
 
 #include <asm/uaccess.h>
 #include <asm/types.h>
@@ -54,7 +55,7 @@ struct nbd_device {
 	struct mutex tx_lock;
 	struct gendisk *disk;
 	int blksize;
-	u64 bytesize;
+	loff_t bytesize;
 	pid_t pid; /* pid of nbd-client, if attached */
 	int xmit_timeout;
 	int disconnect; /* a disconnect has been requested by user */
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 6/9] nbd: Restructure debugging prints
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
                   ` (4 preceding siblings ...)
  2015-04-02  8:11 ` [PATCH 5/9] nbd: Fix device bytesize type Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  8:11 ` [PATCH 7/9] nbd: Remove fixme that was already fixed Markus Pargmann
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

dprintk has some name collisions with other frameworks and drivers. It
is also not necessary to have these custom debug print filters. Dynamic
debug offers the same amount of filtered debugging.

This patch replaces all dprintks with dev_dbg(). It also removes the
ioctl dprintk which prints the ingoing ioctls which should be
replaceable by strace or similar stuff.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Acked-by: Pavel Machek <pavel@ucw.cz>
---

Notes:
    Changes in v2:
     - The device name was written twice in each print. This is fixed by removing
       the explicit print of the disk name.
     - dev_dbg() in do_nbd_request() was moved to have a valid nbd pointer

 drivers/block/nbd.c | 88 ++++++++++++++---------------------------------------
 1 file changed, 22 insertions(+), 66 deletions(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 13c8371cbf4c..217b570dd7a5 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -63,21 +63,6 @@ struct nbd_device {
 
 #define NBD_MAGIC 0x68797548
 
-#ifdef NDEBUG
-#define dprintk(flags, fmt...)
-#else /* NDEBUG */
-#define dprintk(flags, fmt...) do { \
-	if (debugflags & (flags)) printk(KERN_DEBUG fmt); \
-} while (0)
-#define DBG_IOCTL       0x0004
-#define DBG_INIT        0x0010
-#define DBG_EXIT        0x0020
-#define DBG_BLKDEV      0x0100
-#define DBG_RX          0x0200
-#define DBG_TX          0x0400
-static unsigned int debugflags;
-#endif /* NDEBUG */
-
 static unsigned int nbds_max = 16;
 static struct nbd_device *nbd_dev;
 static int max_part;
@@ -94,25 +79,9 @@ static int max_part;
  */
 static DEFINE_SPINLOCK(nbd_lock);
 
-#ifndef NDEBUG
-static const char *ioctl_cmd_to_ascii(int cmd)
+static inline struct device *nbd_to_dev(struct nbd_device *nbd)
 {
-	switch (cmd) {
-	case NBD_SET_SOCK: return "set-sock";
-	case NBD_SET_BLKSIZE: return "set-blksize";
-	case NBD_SET_SIZE: return "set-size";
-	case NBD_SET_TIMEOUT: return "set-timeout";
-	case NBD_SET_FLAGS: return "set-flags";
-	case NBD_DO_IT: return "do-it";
-	case NBD_CLEAR_SOCK: return "clear-sock";
-	case NBD_CLEAR_QUE: return "clear-que";
-	case NBD_PRINT_DEBUG: return "print-debug";
-	case NBD_SET_SIZE_BLOCKS: return "set-size-blocks";
-	case NBD_DISCONNECT: return "disconnect";
-	case BLKROSET: return "set-read-only";
-	case BLKFLSBUF: return "flush-buffer-cache";
-	}
-	return "unknown";
+	return disk_to_dev(nbd->disk);
 }
 
 static const char *nbdcmd_to_ascii(int cmd)
@@ -126,16 +95,15 @@ static const char *nbdcmd_to_ascii(int cmd)
 	}
 	return "invalid";
 }
-#endif /* NDEBUG */
 
-static void nbd_end_request(struct request *req)
+static void nbd_end_request(struct nbd_device *nbd, struct request *req)
 {
 	int error = req->errors ? -EIO : 0;
 	struct request_queue *q = req->q;
 	unsigned long flags;
 
-	dprintk(DBG_BLKDEV, "%s: request %p: %s\n", req->rq_disk->disk_name,
-			req, error ? "failed" : "done");
+	dev_dbg(nbd_to_dev(nbd), "request %p: %s\n", req,
+		error ? "failed" : "done");
 
 	spin_lock_irqsave(q->queue_lock, flags);
 	__blk_end_request_all(req, error);
@@ -276,11 +244,9 @@ static int nbd_send_req(struct nbd_device *nbd, struct request *req)
 	}
 	memcpy(request.handle, &req, sizeof(req));
 
-	dprintk(DBG_TX, "%s: request %p: sending control (%s@%llu,%uB)\n",
-			nbd->disk->disk_name, req,
-			nbdcmd_to_ascii(nbd_cmd(req)),
-			(unsigned long long)blk_rq_pos(req) << 9,
-			blk_rq_bytes(req));
+	dev_dbg(nbd_to_dev(nbd), "request %p: sending control (%s@%llu,%uB)\n",
+		req, nbdcmd_to_ascii(nbd_cmd(req)),
+		(unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req));
 	result = sock_xmit(nbd, 1, &request, sizeof(request),
 			(nbd_cmd(req) == NBD_CMD_WRITE) ? MSG_MORE : 0);
 	if (result <= 0) {
@@ -300,8 +266,8 @@ static int nbd_send_req(struct nbd_device *nbd, struct request *req)
 			flags = 0;
 			if (!rq_iter_last(bvec, iter))
 				flags = MSG_MORE;
-			dprintk(DBG_TX, "%s: request %p: sending %d bytes data\n",
-					nbd->disk->disk_name, req, bvec.bv_len);
+			dev_dbg(nbd_to_dev(nbd), "request %p: sending %d bytes data\n",
+				req, bvec.bv_len);
 			result = sock_send_bvec(nbd, &bvec, flags);
 			if (result <= 0) {
 				dev_err(disk_to_dev(nbd->disk),
@@ -394,8 +360,7 @@ static struct request *nbd_read_stat(struct nbd_device *nbd)
 		return req;
 	}
 
-	dprintk(DBG_RX, "%s: request %p: got reply\n",
-			nbd->disk->disk_name, req);
+	dev_dbg(nbd_to_dev(nbd), "request %p: got reply\n", req);
 	if (nbd_cmd(req) == NBD_CMD_READ) {
 		struct req_iterator iter;
 		struct bio_vec bvec;
@@ -408,8 +373,8 @@ static struct request *nbd_read_stat(struct nbd_device *nbd)
 				req->errors++;
 				return req;
 			}
-			dprintk(DBG_RX, "%s: request %p: got %d bytes data\n",
-				nbd->disk->disk_name, req, bvec.bv_len);
+			dev_dbg(nbd_to_dev(nbd), "request %p: got %d bytes data\n",
+				req, bvec.bv_len);
 		}
 	}
 	return req;
@@ -449,7 +414,7 @@ static int nbd_do_it(struct nbd_device *nbd)
 	}
 
 	while ((req = nbd_read_stat(nbd)) != NULL)
-		nbd_end_request(req);
+		nbd_end_request(nbd, req);
 
 	device_remove_file(disk_to_dev(nbd->disk), &pid_attr);
 	nbd->pid = 0;
@@ -478,7 +443,7 @@ static void nbd_clear_que(struct nbd_device *nbd)
 				 queuelist);
 		list_del_init(&req->queuelist);
 		req->errors++;
-		nbd_end_request(req);
+		nbd_end_request(nbd, req);
 	}
 
 	while (!list_empty(&nbd->waiting_queue)) {
@@ -486,7 +451,7 @@ static void nbd_clear_que(struct nbd_device *nbd)
 				 queuelist);
 		list_del_init(&req->queuelist);
 		req->errors++;
-		nbd_end_request(req);
+		nbd_end_request(nbd, req);
 	}
 }
 
@@ -530,7 +495,7 @@ static void nbd_handle_req(struct nbd_device *nbd, struct request *req)
 	if (nbd_send_req(nbd, req) != 0) {
 		dev_err(disk_to_dev(nbd->disk), "Request send failed\n");
 		req->errors++;
-		nbd_end_request(req);
+		nbd_end_request(nbd, req);
 	} else {
 		spin_lock(&nbd->queue_lock);
 		list_add_tail(&req->queuelist, &nbd->queue_head);
@@ -545,7 +510,7 @@ static void nbd_handle_req(struct nbd_device *nbd, struct request *req)
 
 error_out:
 	req->errors++;
-	nbd_end_request(req);
+	nbd_end_request(nbd, req);
 }
 
 static int nbd_thread(void *data)
@@ -593,18 +558,18 @@ static void do_nbd_request(struct request_queue *q)
 
 		spin_unlock_irq(q->queue_lock);
 
-		dprintk(DBG_BLKDEV, "%s: request %p: dequeued (flags=%x)\n",
-				req->rq_disk->disk_name, req, req->cmd_type);
-
 		nbd = req->rq_disk->private_data;
 
 		BUG_ON(nbd->magic != NBD_MAGIC);
 
+		dev_dbg(nbd_to_dev(nbd), "request %p: dequeued (flags=%x)\n",
+			req, req->cmd_type);
+
 		if (unlikely(!nbd->sock)) {
 			dev_err(disk_to_dev(nbd->disk),
 				"Attempted send on closed socket\n");
 			req->errors++;
-			nbd_end_request(req);
+			nbd_end_request(nbd, req);
 			spin_lock_irq(q->queue_lock);
 			continue;
 		}
@@ -791,10 +756,6 @@ static int nbd_ioctl(struct block_device *bdev, fmode_t mode,
 
 	BUG_ON(nbd->magic != NBD_MAGIC);
 
-	/* Anyone capable of this syscall can do *real bad* things */
-	dprintk(DBG_IOCTL, "%s: nbd_ioctl cmd=%s(0x%x) arg=%lu\n",
-		nbd->disk->disk_name, ioctl_cmd_to_ascii(cmd), cmd, arg);
-
 	mutex_lock(&nbd->tx_lock);
 	error = __nbd_ioctl(bdev, nbd, cmd, arg);
 	mutex_unlock(&nbd->tx_lock);
@@ -884,7 +845,6 @@ static int __init nbd_init(void)
 	}
 
 	printk(KERN_INFO "nbd: registered device at major %d\n", NBD_MAJOR);
-	dprintk(DBG_INIT, "nbd: debugflags=0x%x\n", debugflags);
 
 	for (i = 0; i < nbds_max; i++) {
 		struct gendisk *disk = nbd_dev[i].disk;
@@ -943,7 +903,3 @@ module_param(nbds_max, int, 0444);
 MODULE_PARM_DESC(nbds_max, "number of network block devices to initialize (default: 16)");
 module_param(max_part, int, 0444);
 MODULE_PARM_DESC(max_part, "number of partitions per device (default: 0)");
-#ifndef NDEBUG
-module_param(debugflags, int, 0644);
-MODULE_PARM_DESC(debugflags, "flags for controlling debug output");
-#endif
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 7/9] nbd: Remove fixme that was already fixed
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
                   ` (5 preceding siblings ...)
  2015-04-02  8:11 ` [PATCH 6/9] nbd: Restructure debugging prints Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  9:05   ` Christoph Hellwig
  2015-04-02  8:11 ` [PATCH 8/9] nbd: Return error code directly Markus Pargmann
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

The mentioned problem is not present anymore.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
---
 drivers/block/nbd.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 217b570dd7a5..6e7a7b06efcb 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -110,14 +110,11 @@ static void nbd_end_request(struct nbd_device *nbd, struct request *req)
 	spin_unlock_irqrestore(q->queue_lock, flags);
 }
 
+/*
+ * Forcibly shutdown the socket causing all listeners to error
+ */
 static void sock_shutdown(struct nbd_device *nbd, int lock)
 {
-	/* Forcibly shutdown the socket causing all listeners
-	 * to error
-	 *
-	 * FIXME: This code is duplicated from sys_shutdown, but
-	 * there should be a more generic interface rather than
-	 * calling socket ops directly here */
 	if (lock)
 		mutex_lock(&nbd->tx_lock);
 	if (nbd->sock) {
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 8/9] nbd: Return error code directly
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
                   ` (6 preceding siblings ...)
  2015-04-02  8:11 ` [PATCH 7/9] nbd: Remove fixme that was already fixed Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02  8:11 ` [PATCH 9/9] nbd: Return error pointer directly Markus Pargmann
  2015-04-02 18:40 ` [PULL] NBD patches for 4.1 Jens Axboe
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

By returning the error code directly, we can avoid the jump label
error_out.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/block/nbd.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 6e7a7b06efcb..e41fb4ccf39a 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -249,7 +249,7 @@ static int nbd_send_req(struct nbd_device *nbd, struct request *req)
 	if (result <= 0) {
 		dev_err(disk_to_dev(nbd->disk),
 			"Send control failed (result %d)\n", result);
-		goto error_out;
+		return -EIO;
 	}
 
 	if (nbd_cmd(req) == NBD_CMD_WRITE) {
@@ -270,14 +270,11 @@ static int nbd_send_req(struct nbd_device *nbd, struct request *req)
 				dev_err(disk_to_dev(nbd->disk),
 					"Send data failed (result %d)\n",
 					result);
-				goto error_out;
+				return -EIO;
 			}
 		}
 	}
 	return 0;
-
-error_out:
-	return -EIO;
 }
 
 static struct request *nbd_find_request(struct nbd_device *nbd,
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 9/9] nbd: Return error pointer directly
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
                   ` (7 preceding siblings ...)
  2015-04-02  8:11 ` [PATCH 8/9] nbd: Return error code directly Markus Pargmann
@ 2015-04-02  8:11 ` Markus Pargmann
  2015-04-02 18:40 ` [PULL] NBD patches for 4.1 Jens Axboe
  9 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  8:11 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-kernel, nbd-general, kernel, Markus Pargmann

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Acked-by: Pavel Machek <pavel@ucw.cz>
---

Notes:
    Changes in v2:
     - Remove unnecessary brackets

 drivers/block/nbd.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index e41fb4ccf39a..bd8f4caf53bd 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -285,7 +285,7 @@ static struct request *nbd_find_request(struct nbd_device *nbd,
 
 	err = wait_event_interruptible(nbd->active_wq, nbd->active_req != xreq);
 	if (unlikely(err))
-		goto out;
+		return ERR_PTR(err);
 
 	spin_lock(&nbd->queue_lock);
 	list_for_each_entry_safe(req, tmp, &nbd->queue_head, queuelist) {
@@ -297,10 +297,7 @@ static struct request *nbd_find_request(struct nbd_device *nbd,
 	}
 	spin_unlock(&nbd->queue_lock);
 
-	err = -ENOENT;
-
-out:
-	return ERR_PTR(err);
+	return ERR_PTR(-ENOENT);
 }
 
 static inline int sock_recv_bvec(struct nbd_device *nbd, struct bio_vec *bvec)
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 7/9] nbd: Remove fixme that was already fixed
  2015-04-02  8:11 ` [PATCH 7/9] nbd: Remove fixme that was already fixed Markus Pargmann
@ 2015-04-02  9:05   ` Christoph Hellwig
  2015-04-02  9:36     ` Markus Pargmann
  0 siblings, 1 reply; 14+ messages in thread
From: Christoph Hellwig @ 2015-04-02  9:05 UTC (permalink / raw)
  To: Markus Pargmann; +Cc: Jens Axboe, linux-kernel, nbd-general, kernel

On Thu, Apr 02, 2015 at 10:11:39AM +0200, Markus Pargmann wrote:
> +/*
> + * Forcibly shutdown the socket causing all listeners to error
> + */
>  static void sock_shutdown(struct nbd_device *nbd, int lock)
>  {
> -	/* Forcibly shutdown the socket causing all listeners
> -	 * to error
> -	 *
> -	 * FIXME: This code is duplicated from sys_shutdown, but
> -	 * there should be a more generic interface rather than
> -	 * calling socket ops directly here */
>  	if (lock)
>  		mutex_lock(&nbd->tx_lock);
>  	if (nbd->sock) {

Please also kill the conditional locking here in a future patch by
moving it into the caller.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 7/9] nbd: Remove fixme that was already fixed
  2015-04-02  9:05   ` Christoph Hellwig
@ 2015-04-02  9:36     ` Markus Pargmann
  0 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-04-02  9:36 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: Jens Axboe, linux-kernel, nbd-general, kernel

[-- Attachment #1: Type: text/plain, Size: 1125 bytes --]

On Thu, Apr 02, 2015 at 02:05:34AM -0700, Christoph Hellwig wrote:
> On Thu, Apr 02, 2015 at 10:11:39AM +0200, Markus Pargmann wrote:
> > +/*
> > + * Forcibly shutdown the socket causing all listeners to error
> > + */
> >  static void sock_shutdown(struct nbd_device *nbd, int lock)
> >  {
> > -	/* Forcibly shutdown the socket causing all listeners
> > -	 * to error
> > -	 *
> > -	 * FIXME: This code is duplicated from sys_shutdown, but
> > -	 * there should be a more generic interface rather than
> > -	 * calling socket ops directly here */
> >  	if (lock)
> >  		mutex_lock(&nbd->tx_lock);
> >  	if (nbd->sock) {
> 
> Please also kill the conditional locking here in a future patch by
> moving it into the caller.

Yes, thanks. I will make a patch for that.

Best Regards,

Markus

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PULL] NBD patches for 4.1
  2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
                   ` (8 preceding siblings ...)
  2015-04-02  8:11 ` [PATCH 9/9] nbd: Return error pointer directly Markus Pargmann
@ 2015-04-02 18:40 ` Jens Axboe
  9 siblings, 0 replies; 14+ messages in thread
From: Jens Axboe @ 2015-04-02 18:40 UTC (permalink / raw)
  To: Markus Pargmann; +Cc: linux-kernel, nbd-general, kernel

On 04/02/2015 02:11 AM, Markus Pargmann wrote:
> Hi Jens,
>
> This pull request contains some NBD cleanups.
>
> The documentation was updated to be extensible for future features and the
> module parameters were added.
>
> NBD had an internal header located at include/linux/nbd.h which was only used
> by nbd.c. So I moved the header content from include/ to the top of nbd.c.
>
> The debugging prints of nbd which contained a basic filter functionality were
> replaced by dev_dbg(). This removes the ability to filter by categories. But it
> is now possible to use dynamic debugging.
>
> The other patches are some small simplifications.

Applied, thanks.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 3/9] nbd: Remove kernel internal header
  2015-02-12 20:57 [PATCH 0/9] nbd: cleanups Markus Pargmann
@ 2015-02-12 20:57 ` Markus Pargmann
  0 siblings, 0 replies; 14+ messages in thread
From: Markus Pargmann @ 2015-02-12 20:57 UTC (permalink / raw)
  To: nbd-general; +Cc: linux-kernel, Markus Pargmann

The header is not included anywhere. Remove it and include the private
nbd_device struct in nbd.c.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
---
 drivers/block/nbd.c | 22 ++++++++++++++++++++++
 include/linux/nbd.h | 46 ----------------------------------------------
 2 files changed, 22 insertions(+), 46 deletions(-)
 delete mode 100644 include/linux/nbd.h

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 4bc2a5cb9935..58c2b20ad17b 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -38,6 +38,28 @@
 
 #include <linux/nbd.h>
 
+struct nbd_device {
+	int flags;
+	int harderror;		/* Code of hard error			*/
+	struct socket * sock;	/* If == NULL, device is not ready, yet	*/
+	int magic;
+
+	spinlock_t queue_lock;
+	struct list_head queue_head;	/* Requests waiting result */
+	struct request *active_req;
+	wait_queue_head_t active_wq;
+	struct list_head waiting_queue;	/* Requests to be sent */
+	wait_queue_head_t waiting_wq;
+
+	struct mutex tx_lock;
+	struct gendisk *disk;
+	int blksize;
+	u64 bytesize;
+	pid_t pid; /* pid of nbd-client, if attached */
+	int xmit_timeout;
+	int disconnect; /* a disconnect has been requested by user */
+};
+
 #define NBD_MAGIC 0x68797548
 
 #ifdef NDEBUG
diff --git a/include/linux/nbd.h b/include/linux/nbd.h
deleted file mode 100644
index f62f78aef4ac..000000000000
--- a/include/linux/nbd.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
- * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
- *            Made nbd_end_request() use the io_request_lock
- * 2001 Copyright (C) Steven Whitehouse
- *            New nbd_end_request() for compatibility with new linux block
- *            layer code.
- * 2003/06/24 Louis D. Langholtz <ldl@aros.net>
- *            Removed unneeded blksize_bits field from nbd_device struct.
- *            Cleanup PARANOIA usage & code.
- * 2004/02/19 Paul Clements
- *            Removed PARANOIA, plus various cleanup and comments
- */
-#ifndef LINUX_NBD_H
-#define LINUX_NBD_H
-
-
-#include <linux/wait.h>
-#include <linux/mutex.h>
-#include <uapi/linux/nbd.h>
-
-struct request;
-
-struct nbd_device {
-	int flags;
-	int harderror;		/* Code of hard error			*/
-	struct socket * sock;	/* If == NULL, device is not ready, yet	*/
-	int magic;
-
-	spinlock_t queue_lock;
-	struct list_head queue_head;	/* Requests waiting result */
-	struct request *active_req;
-	wait_queue_head_t active_wq;
-	struct list_head waiting_queue;	/* Requests to be sent */
-	wait_queue_head_t waiting_wq;
-
-	struct mutex tx_lock;
-	struct gendisk *disk;
-	int blksize;
-	u64 bytesize;
-	pid_t pid; /* pid of nbd-client, if attached */
-	int xmit_timeout;
-	int disconnect; /* a disconnect has been requested by user */
-};
-
-#endif
-- 
2.1.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2015-04-02 18:40 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-02  8:11 [PULL] NBD patches for 4.1 Markus Pargmann
2015-04-02  8:11 ` [PATCH 1/9] Documentation: nbd: Reformat to allow more documentation Markus Pargmann
2015-04-02  8:11 ` [PATCH 2/9] Documentation: nbd: Add list of module parameters Markus Pargmann
2015-04-02  8:11 ` [PATCH 3/9] nbd: Remove kernel internal header Markus Pargmann
2015-04-02  8:11 ` [PATCH 4/9] nbd: Replace kthread_create with kthread_run Markus Pargmann
2015-04-02  8:11 ` [PATCH 5/9] nbd: Fix device bytesize type Markus Pargmann
2015-04-02  8:11 ` [PATCH 6/9] nbd: Restructure debugging prints Markus Pargmann
2015-04-02  8:11 ` [PATCH 7/9] nbd: Remove fixme that was already fixed Markus Pargmann
2015-04-02  9:05   ` Christoph Hellwig
2015-04-02  9:36     ` Markus Pargmann
2015-04-02  8:11 ` [PATCH 8/9] nbd: Return error code directly Markus Pargmann
2015-04-02  8:11 ` [PATCH 9/9] nbd: Return error pointer directly Markus Pargmann
2015-04-02 18:40 ` [PULL] NBD patches for 4.1 Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2015-02-12 20:57 [PATCH 0/9] nbd: cleanups Markus Pargmann
2015-02-12 20:57 ` [PATCH 3/9] nbd: Remove kernel internal header Markus Pargmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).