MTD: mtd_blkdevs regression

From: Jarkko Lavinen
Date: Fri Sep 10 2010 - 07:05:08 EST


In 2.6.34 modules using add_mtd_blktrans_dev() have reference
count 0 after loading and I can remove the module if it is not
being used.

In 2.6.34, using mtdblock as an example:

# modprobe nandsim
# modprobe mtdblock
# lsmod
Module Size Used by
mtdblock 2829 0
mtd_blkdevs 4217 1 mtdblock
nandsim 25811 0
nand 27184 1 nandsim
nand_ids 2666 2 nandsim,nand
nand_ecc 3392 1 nand
mtd 14794 5 mtd_blkdevs,nandsim,nand
# rmmod mtdblock
#

Since commit 048d871 (mtd: blktrans: Hotplug fixes) in 2.6.35-rc1
add_mtd_blktrans_dev() uses __get_module(tr->owner) to add reference
count to calling module.

Because of this the module cannot be removed and since module
exit cannot be called, del_mtd_blktrans_dev() will not be called,
which would do the module_put().

In 2.6.35:

# modprobe nandsim
# modprobe mtdblock
# lsmod
Module Size Used by
mtdblock 2721 1
mtd_blkdevs 4895 1 mtdblock
nandsim 25819 1
nand 28326 1 nandsim
nand_ids 2698 2 nandsim,nand
nand_ecc 3400 1 nand
mtd 15352 5 mtd_blkdevs,nandsim,nand
# rmmod mtdblock
ERROR: Module mtdblock is in use
#

Jarkko Lavinen
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/