static void bdev_destroy_inode(struct inode *inode)
{
- kmem_cache_free(bdev_cachep, BDEV_I(inode));
+ struct bdev_inode *bdi = BDEV_I(inode);
+
+ bdi->bdev.bd_inode_backing_dev_info = NULL;
+ kmem_cache_free(bdev_cachep, bdi);
}
static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
void __init bdev_cache_init(void)
{
int err;
- bdev_cachep = kmem_cache_create("bdev_cache",
- sizeof(struct bdev_inode),
- 0,
- SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
- init_once,
- NULL);
- if (!bdev_cachep)
- panic("Cannot create bdev_cache SLAB cache");
+ bdev_cachep = kmem_cache_create("bdev_cache", sizeof(struct bdev_inode),
+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|SLAB_PANIC,
+ init_once, NULL);
err = register_filesystem(&bd_type);
if (err)
panic("Cannot register bdev pseudo-fs");