On Mon, 2010-05-17 at 16:55 +0300, Kirill A. Shutemov wrote: > + if (!mtd->inode) { > + struct inode *mtd_inode; > + mtd_inode = new_inode(mtd_inode_mnt->mnt_sb); > + if (!mtd_inode) { > + put_mtd_device(mtd); > + ret = -ENOMEM; > + goto out; > + } > + mtd_inode->i_mode = S_IFCHR; > + mtd_inode->i_rdev = inode->i_rdev; > + if (mtd->backing_dev_info) { > + mtd_inode->i_data.backing_dev_info = > + mtd->backing_dev_info; > + } > + > + if (unlikely(cmpxchg(&mtd->inode, NULL, mtd_inode))) { > + /* Somebody has already initialized mtd->inode > */ > + iput(mtd_inode); > + } > + } > + > + igrab(mtd->inode); Now you're just reimplementing iget(). Can we just use iget_locked() to get the appropriate inode (using the mtd device number as the inode number)? Then we don't need to bother storing it in mtd->inode at all, and we can iput() the last refcount on it when the chardevice is closed -- we don't need it to stick around until the MTD device is destroyed. -- dwmw2 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html