summaryrefslogtreecommitdiffstats
path: root/src/kernel/core.c
diff options
context:
space:
mode:
authorFrederic Robra2019-07-16 14:02:43 +0200
committerFrederic Robra2019-07-16 14:02:43 +0200
commitd27895a0928aa9e66c89636f424a0123704e5372 (patch)
tree60f8263501a5aa0831b9633c32e023dd9e099ab8 /src/kernel/core.c
parentdevice now errors if connection get closed (diff)
downloaddnbd3-ng-d27895a0928aa9e66c89636f424a0123704e5372.tar.gz
dnbd3-ng-d27895a0928aa9e66c89636f424a0123704e5372.tar.xz
dnbd3-ng-d27895a0928aa9e66c89636f424a0123704e5372.zip
added macros for debugging
Diffstat (limited to 'src/kernel/core.c')
-rw-r--r--src/kernel/core.c90
1 files changed, 30 insertions, 60 deletions
diff --git a/src/kernel/core.c b/src/kernel/core.c
index 4704b0d..2664090 100644
--- a/src/kernel/core.c
+++ b/src/kernel/core.c
@@ -82,7 +82,7 @@ static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index)
int i;
int sock_alive = 0;
- printk(KERN_DEBUG "dnbd3: handle request at position %lu and size %d, device %i\n", blk_rq_pos(req), blk_rq_bytes(req), dev->minor);
+ debug_dev(dev, "handle request at position %lu and size %d", blk_rq_pos(req), blk_rq_bytes(req));
// if (index >= 1) { // TODO use next server with good rtt for this request
// printk(KERN_INFO "dnbd3: index is %d", index);
@@ -92,7 +92,7 @@ static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index)
// }
for (i = 0; i < NUMBER_CONNECTIONS; i++) {
- if (dev->socks[i].sock && dev->socks[i].server) {
+ if (dnbd3_is_sock_alive(dev->socks[i])) {
if (index == sock_alive) {
sock = &dev->socks[index];
}
@@ -101,7 +101,7 @@ static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index)
}
if (!sock) {
- printk(KERN_INFO "dnbd3: index is %d but no socket was found\n", index);
+ warn_dev(dev, "index is %d but no socket was found", index);
dev_err_ratelimited(disk_to_dev(dev->disk), "attempted send on invalid socket\n");
if (sock_alive > 0) {
blk_mq_update_nr_hw_queues(&dev->tag_set, sock_alive);
@@ -115,13 +115,10 @@ static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index)
cmd->status = BLK_STS_OK;
-again:
-
-
mutex_lock(&sock->lock);
if (unlikely(!sock->sock)) {
mutex_unlock(&sock->lock);
- printk(KERN_DEBUG "dnbd3: not connected\n");
+ warn_sock(sock, "not connected");
return -EIO;
}
@@ -149,8 +146,7 @@ static blk_status_t dnbd3_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_
int ret;
struct dnbd3_device *dev = cmd->dnbd3;
- printk(KERN_DEBUG "dnbd3: queue request device %i\n", dev->minor);
-
+ debug_dev(dev, "queue request");
mutex_lock(&cmd->lock);
clear_bit(DNBD3_CMD_REQUEUED, &cmd->flags);
@@ -167,12 +163,6 @@ static blk_status_t dnbd3_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_
return ret;
}
-static void dnbd3_complete_rq(struct request *req)
-{
- printk(KERN_DEBUG "dnbd3: dnbd3_complete_rq\n");
-
-}
-
static int dnbd3_init_request(struct blk_mq_tag_set *set, struct request *rq, unsigned int hctx_idx, unsigned int numa_node)
{
struct dnbd3_cmd *cmd = blk_mq_rq_to_pdu(rq);
@@ -186,15 +176,15 @@ static enum blk_eh_timer_return dnbd3_xmit_timeout(struct request *req, bool res
struct dnbd3_cmd *cmd = blk_mq_rq_to_pdu(req);
struct dnbd3_device *dev = cmd->dnbd3;
int i;
- printk(KERN_WARNING "dnbd3: received timeout\n");
+ warn_dev(dev, "received timeout");
if (!mutex_trylock(&cmd->lock)) {
return BLK_EH_RESET_TIMER;
}
for (i = 0; i < NUMBER_CONNECTIONS; i++) {
- if (dev->socks[i].sock && dev->socks[i].server) {
- printk(KERN_INFO "dnbd3: reset request\n");
+ if (dnbd3_is_sock_alive(dev->socks[i])) {
+ info_sock(&dev->socks[i], "reset request to new socket");
dnbd3_requeue_cmd(cmd);
return BLK_EH_DONE;
}
@@ -210,7 +200,6 @@ static enum blk_eh_timer_return dnbd3_xmit_timeout(struct request *req, bool res
static struct blk_mq_ops dnbd3_mq_ops = {
.queue_rq = dnbd3_queue_rq,
- .complete = dnbd3_complete_rq,
.init_request = dnbd3_init_request,
.timeout = dnbd3_xmit_timeout,
};
@@ -218,13 +207,6 @@ static struct blk_mq_ops dnbd3_mq_ops = {
-static void dnbd3_blk_fail_all_requests(struct dnbd3_device *dev)
-{
- printk(KERN_DEBUG "dnbd3: fail all requests device %i\n", dev->minor);
-}
-
-
-
static int dnbd3_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)
{
int result = -EIO;
@@ -232,7 +214,8 @@ static int dnbd3_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd
char *imgname = NULL;
dnbd3_ioctl_t *msg = NULL;
- printk(KERN_DEBUG "dnbd3: ioctl device %i, cmd %i, arg %lu\n", dev->minor, cmd, arg);
+
+ debug_dev(dev, "ioctl cmd %i, arg %lu", cmd, arg);
if (arg != 0) {
msg = kmalloc(sizeof(*msg), GFP_KERNEL);
@@ -257,14 +240,14 @@ static int dnbd3_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd
}
imgname[msg->imgnamelen] = '\0';
- printk(KERN_DEBUG "dnbd3: ioctl image name of len %i is %s\n", (int)msg->imgnamelen, imgname);
+ debug_dev(dev, "ioctl image name of len %i is %s", (int)msg->imgnamelen, imgname);
}
}
mutex_lock(&dev->device_lock);
switch (cmd) {
case IOCTL_OPEN:
- printk(KERN_DEBUG "dnbd3: ioctl open\n");
+ debug_dev(dev, "ioctl open");
if (dev->imgname != NULL) {
result = -EBUSY;
} else if (imgname == NULL) {
@@ -273,7 +256,7 @@ static int dnbd3_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd
result = -EINVAL;
} else {
if (sizeof(msg->host) != sizeof(dev->initial_server.host)) {
- printk(KERN_INFO "dnbd3: odd size bug#1 triggered in ioctl\n");
+ warn_dev(dev, "odd size bug#1 triggered in ioctl");
}
memcpy(&dev->initial_server.host, &msg->host, sizeof(msg->host));
dev->initial_server.failures = 0;
@@ -284,25 +267,14 @@ static int dnbd3_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd
// Forget all alt servers on explicit connect, set first alt server to initial server
memset(dev->alt_servers, 0, sizeof(dev->alt_servers[0])*NUMBER_SERVERS);
memcpy(dev->alt_servers, &dev->initial_server, sizeof(dev->alt_servers[0]));
-//#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
-// if (blk_queue->backing_dev_info != NULL) {
-// blk_queue->backing_dev_info->ra_pages = (msg->read_ahead_kb * 1024) / PAGE_SIZE;
-// }
-//#else
-// blk_queue->backing_dev_info.ra_pages = (msg->read_ahead_kb * 1024) / PAGE_SIZE;
-//#endif
-
-
result = dnbd3_net_connect(dev);
imgname = NULL;
}
break;
case IOCTL_CLOSE:
- printk(KERN_DEBUG "dnbd3: ioctl close\n");
- dnbd3_blk_fail_all_requests(dev);
+ debug_dev(dev, "ioctl close");
result = dnbd3_net_disconnect(dev);
- dnbd3_blk_fail_all_requests(dev);
set_capacity(dev->disk, 0);
if (dev->imgname) {
kfree(dev->imgname);
@@ -313,13 +285,13 @@ static int dnbd3_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd
break;
case IOCTL_SWITCH:
- printk(KERN_DEBUG "dnbd3: ioctl switch\n");
+ debug_dev(dev, "ioctl switch");
result = -EINVAL;
break;
case IOCTL_ADD_SRV:
case IOCTL_REM_SRV:
- printk(KERN_DEBUG "dnbd3: ioctl add/rem srv\n");
+ debug_dev(dev, "ioctl add/rem srv");
if (dev->imgname == NULL) {
result = -ENOENT;
} else if (dev->new_servers_num >= NUMBER_SERVERS) {
@@ -335,12 +307,12 @@ static int dnbd3_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd
break;
case BLKFLSBUF:
- printk(KERN_DEBUG "dnbd3: ioctl blkflsbuf\n");
+ debug_dev(dev, "ioctl blkflsbuf");
result = 0;
break;
default:
- printk(KERN_DEBUG "dnbd3: ioctl unhandled cmd %d\n", cmd);
+ warn_dev(dev, "ioctl unhandled cmd %d", cmd);
result = -EIO;
break;
}
@@ -371,7 +343,7 @@ int dnbd3_add_device(struct dnbd3_device *dev, int minor)
struct request_queue *q;
int err = -ENOMEM;
int i;
- printk(KERN_DEBUG "dnbd3: adding device %i\n", minor);
+ debug("adding device %d", minor);
mutex_init(&dev->device_lock);
mutex_lock(&dev->device_lock);
@@ -383,13 +355,13 @@ int dnbd3_add_device(struct dnbd3_device *dev, int minor)
disk = alloc_disk(1);
if (!disk) {
- printk(KERN_WARNING "dnbd3: alloc_disc failed device %i\n", minor);
+ error_dev(dev, "allocating disc failed");
goto out_free_dnbd3;
}
err = idr_alloc(&dnbd3_index_idr, dev, minor, minor + 1, GFP_KERNEL);
if (err == -ENOSPC) {
- printk(KERN_WARNING "dnbd3: idr_alloc failed device %i\n", minor);
+ error_dev(dev, "idr alloc failed");
err = -EEXIST;
}
@@ -437,11 +409,9 @@ int dnbd3_add_device(struct dnbd3_device *dev, int minor)
disk->fops = &dnbd3_fops;
disk->private_data = dev;
sprintf(disk->disk_name, "dnbd%i", minor);
- printk(KERN_DEBUG "dnbd3: add disk device %s\n", disk->disk_name);
add_disk(disk);
dnbd3_sysfs_init(dev);
-
mutex_unlock(&dev->device_lock);
return minor;
@@ -454,7 +424,7 @@ out_free_disk:
out_free_dnbd3:
kfree(dev);
mutex_unlock(&dev->device_lock);
- printk(KERN_DEBUG "dnbd3: destroy device %i\n", minor);
+ warn_dev(dev, "failed to create device");
return err;
}
@@ -464,30 +434,30 @@ out_free_dnbd3:
static int __init dnbd3_init(void)
{
int i;
- printk(KERN_DEBUG "dnbd3: starting kernel module\n");
+ debug("starting kernel module");
dnbd3_wq = alloc_workqueue("kdnbd3", WQ_MEM_RECLAIM | WQ_FREEZABLE | WQ_UNBOUND, 0);
if (max_devs < 0) {
- printk(KERN_ERR "dnbd3: max_devs must be >= 0\n");
+ error("max_devs must be >= 0");
return -EINVAL;
}
device = kcalloc(max_devs, sizeof(*device), GFP_KERNEL);
if (!device) {
- printk(KERN_ERR "dnbd3: failed to create dnbd3 device\n");
+ error("failed to create dnbd3 device");
return -ENOMEM;
}
// initialize block device
major = register_blkdev(0, "dnbd3");
if (major == 0) {
- printk(KERN_ERR "dnbd3: register_blkdev failed\n");
+ error("register_blkdev failed");
return -EIO;
}
- printk(KERN_DEBUG "dnbd3: kernel module loaded. Machine type: " ENDIAN_MODE "\n");
+ debug("kernel module loaded. Machine type: " ENDIAN_MODE);
// add MAX_NUMBER_DEVICES devices
mutex_lock(&dnbd3_index_mutex);
@@ -496,7 +466,7 @@ static int __init dnbd3_init(void)
}
mutex_unlock(&dnbd3_index_mutex);
- printk(KERN_INFO "dnbd3: init successful (%i devices).\n", max_devs);
+ info("init successful (%i devices)", max_devs);
return 0;
}
@@ -545,7 +515,7 @@ static void __exit dnbd3_exit(void)
{
struct dnbd3_device *dnbd3;
LIST_HEAD(del_list);
- printk(KERN_DEBUG "dnbd3: stopping kernel module\n");
+ debug("stopping kernel module");
mutex_lock(&dnbd3_index_mutex);
idr_for_each(&dnbd3_index_idr, &dnbd3_exit_cb, &del_list);
@@ -565,7 +535,7 @@ static void __exit dnbd3_exit(void)
destroy_workqueue(dnbd3_wq);
- printk(KERN_INFO "dnbd3: stopped kernel module\n");
+ info("stopped kernel module");
}