Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mtd_blkdevs: don't hold del_mtd_blktrans_dev in blktrans_{open, release}

There is nothing that this protects against except for slightly reducing
the window when new opens can appear just before calling del_gendisk.

Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20210823073359.705281-2-hch@lst.de

authored by

Christoph Hellwig and committed by
Miquel Raynal
799ae31c a89d69a4

-5
-5
drivers/mtd/mtd_blkdevs.c
··· 207 207 if (!dev) 208 208 return -ERESTARTSYS; /* FIXME: busy loop! -arnd*/ 209 209 210 - mutex_lock(&mtd_table_mutex); 211 210 mutex_lock(&dev->lock); 212 211 213 212 if (dev->open) ··· 232 233 unlock: 233 234 dev->open++; 234 235 mutex_unlock(&dev->lock); 235 - mutex_unlock(&mtd_table_mutex); 236 236 blktrans_dev_put(dev); 237 237 return ret; 238 238 ··· 242 244 module_put(dev->tr->owner); 243 245 kref_put(&dev->ref, blktrans_dev_release); 244 246 mutex_unlock(&dev->lock); 245 - mutex_unlock(&mtd_table_mutex); 246 247 blktrans_dev_put(dev); 247 248 return ret; 248 249 } ··· 253 256 if (!dev) 254 257 return; 255 258 256 - mutex_lock(&mtd_table_mutex); 257 259 mutex_lock(&dev->lock); 258 260 259 261 if (--dev->open) ··· 268 272 } 269 273 unlock: 270 274 mutex_unlock(&dev->lock); 271 - mutex_unlock(&mtd_table_mutex); 272 275 blktrans_dev_put(dev); 273 276 } 274 277