From d27895a0928aa9e66c89636f424a0123704e5372 Mon Sep 17 00:00:00 2001 From: Frederic Robra Date: Tue, 16 Jul 2019 14:02:43 +0200 Subject: added macros for debugging --- src/kernel/core.c | 90 +++++++++++++++++++------------------------------------ 1 file changed, 30 insertions(+), 60 deletions(-) (limited to 'src/kernel/core.c') 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"); } -- cgit v1.2.3-55-g7522