# HG changeset patch # User Daniel Stodden # Date 1267200155 28800 # Node ID 03b5c624c6186447675e996b62747e6aa87671a4 # Parent 03ff587d68cd4146470e874c587250d9bc7a2492 blkfront: Clean up debug statements. * Use dev_dbg everywhere. * Fix excess line withs. * Wrap dev_dbg to take a blkfront_info handle. * Separate datapath debug statements (DEV_QDBG), conditionally. * Verbose disk remove/release dbg_info statements. diff -r 03ff587d68cd -r 03b5c624c618 drivers/block/xen-blkfront.c --- a/drivers/block/xen-blkfront.c Fri Feb 26 08:02:32 2010 -0800 +++ b/drivers/block/xen-blkfront.c Fri Feb 26 08:02:35 2010 -0800 @@ -35,6 +35,8 @@ * IN THE SOFTWARE. */ +/* #define DEBUG 1 */ + #include #include #include @@ -100,6 +102,19 @@ int users; }; +#define DEV_DBG(_info, _fmt, _args ...) \ + dev_dbg(&(_info)->xbdev->dev, "%s: "_fmt, __func__, ##_args) +#define DEV_WARN(_info, _fmt, _args ...) \ + dev_warn(&(_info)->xbdev->dev, _fmt, ##_args) +#define DEV_INFO(_info, _fmt, _args ...) \ + dev_warn(&(_info)->xbdev->dev, _fmt, ##_args) + +#if defined(DEBUG) && DEBUG >= 2 +#define DEV_QDBG(_info, _fmt, _args ...) DEV_DBG(_info, _fmt, ##_args) +#else +#define DEV_QDBG(_info, _fmt, _args ...) do {} while (0) +#endif + static DEFINE_SPINLOCK(blkif_io_lock); #define MAXIMUM_OUTSTANDING_BLOCK_REQS \ @@ -164,12 +179,11 @@ struct blkfront_info *info = bdev->bd_disk->private_data; int i; - dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n", - command, (long)argument); + DEV_DBG(info, "command: 0x%x, argument: 0x%lx\n", command, (long)argument); switch (command) { case CDROMMULTISESSION: - dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n"); + DEV_DBG(info, "FIXME: support multisession CDs later\n"); for (i = 0; i < sizeof(struct cdrom_multisession); i++) if (put_user(0, (char __user *)(argument + i))) return -EFAULT; @@ -183,8 +197,7 @@ } default: - /*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n", - command);*/ + /* DEV_WARN(info, "ioctl %08x not supported\n", command); */ return -EINVAL; /* same return as native Linux */ } @@ -291,16 +304,15 @@ */ static void do_blkif_request(struct request_queue *rq) { - struct blkfront_info *info = NULL; + struct blkfront_info *info = rq->queuedata; struct request *req; int queued; - pr_debug("Entered do_blkif_request\n"); + DEV_QDBG(info, "\n"); queued = 0; while ((req = blk_peek_request(rq)) != NULL) { - info = req->rq_disk->private_data; if (RING_FULL(&info->ring)) goto wait; @@ -312,8 +324,8 @@ continue; } - pr_debug("do_blk_req %p: cmd %p, sec %lx, " - "(%u/%u) buffer:%p [%s]\n", + DEV_QDBG(info, + "%p: cmd %p, sec %lx, (%u/%u) buffer:%p [%s]\n", req, req->cmd, (unsigned long)blk_rq_pos(req), blk_rq_cur_sectors(req), blk_rq_sectors(req), req->buffer, rq_data_dir(req) ? "write" : "read"); @@ -378,9 +390,6 @@ if (err) return err; - printk(KERN_INFO "blkfront: %s: barriers %s\n", - info->gd->disk_name, - info->feature_barrier ? "enabled" : "disabled"); return 0; } @@ -401,7 +410,8 @@ if ((info->vdevice>>EXT_SHIFT) > 1) { /* this is above the extended range; something is wrong */ - printk(KERN_WARNING "blkfront: vdevice 0x%x is above the extended range; ignoring\n", info->vdevice); + DEV_WARN(info, "vdevice %#x is above %#x; ignoring\n", + info->vdevice, 1U<gd = gd; info->rq = gd->queue; - info->gd = gd; + info->rq->queuedata = info; if (info->feature_barrier) xlvbd_barrier(info); @@ -475,11 +486,8 @@ static void xlvbd_release_gendisk(struct blkfront_info *info) { - struct xenbus_device *dev = info->xbdev; unsigned long flags; - dev_dbg(&dev->dev, "%s: %s removed\n", __func__, dev->nodename); - if (!info->gd) return; @@ -595,8 +603,7 @@ switch (bret->operation) { case BLKIF_OP_WRITE_BARRIER: if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) { - printk(KERN_WARNING "blkfront: %s: write barrier op failed\n", - info->gd->disk_name); + DEV_WARN(info, "write barrier op failed\n"); error = -EOPNOTSUPP; info->feature_barrier = 0; xlvbd_barrier(info); @@ -605,8 +612,9 @@ case BLKIF_OP_READ: case BLKIF_OP_WRITE: if (unlikely(bret->status != BLKIF_RSP_OKAY)) - dev_dbg(&info->xbdev->dev, "Bad return from blkdev data " - "request: %x\n", bret->status); + DEV_QDBG(info, + "Bad return from blkdev data " + "request: %x\n", bret->status); __blk_end_request_all(req, error); break; @@ -877,7 +885,7 @@ struct blkfront_info *info = dev_get_drvdata(&dev->dev); int err; - dev_dbg(&dev->dev, "blkfront_resume: %s\n", dev->nodename); + DEV_DBG(info, "connected=%d\n", info->connected); blkif_free(info, info->connected == BLKIF_STATE_CONNECTED); @@ -904,8 +912,7 @@ (info->connected == BLKIF_STATE_SUSPENDED) ) return; - dev_dbg(&info->xbdev->dev, "%s:%s.\n", - __func__, info->xbdev->otherend); + DEV_DBG(info, "connecting to %s\n", info->xbdev->otherend); err = xenbus_gather(XBT_NIL, info->xbdev->otherend, "sectors", "%llu", §ors, @@ -940,6 +947,9 @@ kick_pending_request_queues(info); spin_unlock_irq(&blkif_io_lock); + DEV_INFO(info, "%s: %llu MiB, %luB sectors, barriers %s\n", + info->gd->disk_name, (sectors * sector_size) >> 20, + sector_size, info->feature_barrier ? "enabled" : "disabled"); add_disk(info->gd); info->is_ready = 1; @@ -971,8 +981,10 @@ mutex_lock(&bd->bd_mutex); inuse = !!info->users; - if (!inuse) + if (!inuse) { + get_disk(gd); xlvbd_release_gendisk(info); + } mutex_unlock(&bd->bd_mutex); bdput(bd); @@ -980,8 +992,11 @@ if (inuse) xenbus_dev_error(dev, -EBUSY, "Device in use; refusing to close"); - else + else { + DEV_INFO(info, "%s removed\n", gd->disk_name); + put_disk(gd); xenbus_frontend_closed(dev); + } } /** @@ -992,7 +1007,7 @@ { struct blkfront_info *info = dev_get_drvdata(&dev->dev); - dev_dbg(&dev->dev, "blkfront:blkback_changed to state %d.\n", backend_state); + DEV_DBG(info, "state %d\n", backend_state); switch (backend_state) { case XenbusStateInitialising: @@ -1018,7 +1033,7 @@ { struct blkfront_info *info = dev_get_drvdata(&dev->dev); - dev_dbg(&dev->dev, "blkfront_remove: %s removed\n", dev->nodename); + DEV_DBG(info, "\n"); blkif_free(info, 0); @@ -1088,13 +1103,16 @@ static int __init xlblk_init(void) { + int err; + if (!xen_domain()) return -ENODEV; - if (register_blkdev(XENVBD_MAJOR, DEV_NAME)) { - printk(KERN_WARNING "xen_blk: can't get major %d with name %s\n", - XENVBD_MAJOR, DEV_NAME); - return -ENODEV; + err = register_blkdev(XENVBD_MAJOR, DEV_NAME); + if (err) { + printk(KERN_WARNING "%s: can't get major %d with name %s: %d\n", + KBUILD_MODNAME, XENVBD_MAJOR, DEV_NAME, err); + return err; } return xenbus_register_frontend(&blkfront);