All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <error27@gmail.com>
To: jiasheng@iscas.ac.cn
Cc: linux-mmc@vger.kernel.org
Subject: [bug report] memstick/ms_block: Add check for alloc_ordered_workqueue
Date: Fri, 25 Nov 2022 11:01:52 +0300	[thread overview]
Message-ID: <Y4B2cIhw6DVSkvKD@kili> (raw)

Hello Jiasheng Jiang,

The patch cb713d1f69ae: "memstick/ms_block: Add check for
alloc_ordered_workqueue" from Nov 22, 2022, leads to the following
Smatch static checker warnings:

    drivers/memstick/core/ms_block.c:2143 msb_init_disk()
    warn: 'msb->io_queue' from alloc_workqueue() not released on lines: 2143.

    drivers/memstick/core/ms_block.c:2120 msb_init_disk()
    warn: missing error code here? 'alloc_workqueue()' failed. 'rc' = '0'

drivers/memstick/core/ms_block.c
    2078 static int msb_init_disk(struct memstick_dev *card)
    2079 {
    2080         struct msb_data *msb = memstick_get_drvdata(card);
    2081         int rc;
    2082         unsigned long capacity;
    2083 
    2084         mutex_lock(&msb_disk_lock);
    2085         msb->disk_id = idr_alloc(&msb_disk_idr, card, 0, 256, GFP_KERNEL);
    2086         mutex_unlock(&msb_disk_lock);
    2087 
    2088         if (msb->disk_id  < 0)
    2089                 return msb->disk_id;
    2090 
    2091         rc = blk_mq_alloc_sq_tag_set(&msb->tag_set, &msb_mq_ops, 2,
    2092                                      BLK_MQ_F_SHOULD_MERGE);
    2093         if (rc)
    2094                 goto out_release_id;
    2095 
    2096         msb->disk = blk_mq_alloc_disk(&msb->tag_set, card);
    2097         if (IS_ERR(msb->disk)) {
    2098                 rc = PTR_ERR(msb->disk);
    2099                 goto out_free_tag_set;
    2100         }
    2101         msb->queue = msb->disk->queue;
    2102 
    2103         blk_queue_max_hw_sectors(msb->queue, MS_BLOCK_MAX_PAGES);
    2104         blk_queue_max_segments(msb->queue, MS_BLOCK_MAX_SEGS);
    2105         blk_queue_max_segment_size(msb->queue,
    2106                                    MS_BLOCK_MAX_PAGES * msb->page_size);
    2107         blk_queue_logical_block_size(msb->queue, msb->page_size);
    2108 
    2109         sprintf(msb->disk->disk_name, "msblk%d", msb->disk_id);
    2110         msb->disk->fops = &msb_bdops;
    2111         msb->disk->private_data = msb;
    2112 
    2113         capacity = msb->pages_in_block * msb->logical_block_count;
    2114         capacity *= (msb->page_size / 512);
    2115         set_capacity(msb->disk, capacity);
    2116         dbg("Set total disk size to %lu sectors", capacity);
    2117 
    2118         msb->io_queue = alloc_ordered_workqueue("ms_block", WQ_MEM_RECLAIM);
    2119         if (!msb->io_queue)
--> 2120                 goto out_cleanup_disk;

Set error code.  Also this ->io_queue doesn't seem to be freed when we
unload the driver.

    2121 
    2122         INIT_WORK(&msb->io_work, msb_io_work);
    2123         sg_init_table(msb->prealloc_sg, MS_BLOCK_MAX_SEGS+1);
    2124 
    2125         if (msb->read_only)
    2126                 set_disk_ro(msb->disk, 1);
    2127 
    2128         msb_start(card);
    2129         rc = device_add_disk(&card->dev, msb->disk, NULL);
    2130         if (rc)
    2131                 goto out_cleanup_disk;

Needs to free msb->io_queue.

    2132         dbg("Disk added");
    2133         return 0;
    2134 
    2135 out_cleanup_disk:
    2136         put_disk(msb->disk);
    2137 out_free_tag_set:
    2138         blk_mq_free_tag_set(&msb->tag_set);
    2139 out_release_id:
    2140         mutex_lock(&msb_disk_lock);
    2141         idr_remove(&msb_disk_idr, msb->disk_id);
    2142         mutex_unlock(&msb_disk_lock);
    2143         return rc;
    2144 }

regards,
dan carpenter

                 reply	other threads:[~2022-11-25  8:02 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y4B2cIhw6DVSkvKD@kili \
    --to=error27@gmail.com \
    --cc=jiasheng@iscas.ac.cn \
    --cc=linux-mmc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.