static void jffs2_kill_sb(struct super_block *sb) { struct jffs2_sb_info *c = JFFS2_SB_INFO(sb); generic_shutdown_super(sb); put_mtd_device(c->mtd); kfree(c); }
static void logfs_kill_sb(struct super_block *sb) { struct logfs_super *super = logfs_super(sb); log_super("LogFS: Start unmounting\n"); /* Alias entries slow down mount, so evict as many as possible */ sync_filesystem(sb); logfs_write_anchor(sb); free_areas(sb); /* * From this point on alias entries are simply dropped - and any * writes to the object store are considered bugs. */ log_super("LogFS: Now in shutdown\n"); generic_shutdown_super(sb); super->s_flags |= LOGFS_SB_FLAG_SHUTDOWN; BUG_ON(super->s_dirty_used_bytes || super->s_dirty_free_bytes); logfs_cleanup_gc(sb); logfs_cleanup_journal(sb); logfs_cleanup_areas(sb); logfs_cleanup_rw(sb); if (super->s_erase_page) __free_page(super->s_erase_page); super->s_devops->put_device(super); logfs_mempool_destroy(super->s_btree_pool); logfs_mempool_destroy(super->s_alias_pool); kfree(super); log_super("LogFS: Finished unmounting\n"); }
static void esdfs_kill_sb(struct super_block *sb) { if (ESDFS_SB(sb)->obb_parent) dput(ESDFS_SB(sb)->obb_parent); generic_shutdown_super(sb); }
static void jffs2_kill_sb(struct super_block *sb) { struct jffs2_sb_info *c = JFFS2_SB_INFO(sb); if (!(sb->s_flags & MS_RDONLY)) jffs2_stop_garbage_collect_thread(c); generic_shutdown_super(sb); put_mtd_device(c->mtd); kfree(c); }
void sdcardfs_kill_sb(struct super_block *sb) { struct sdcardfs_sb_info *sbi; if (sb->s_magic == SDCARDFS_SUPER_MAGIC) { sbi = SDCARDFS_SB(sb); mutex_lock(&sdcardfs_super_list_lock); list_del(&sbi->list); mutex_unlock(&sdcardfs_super_list_lock); } generic_shutdown_super(sb); }
static void dumpfs_kill_sb(struct super_block *sb) { struct block_device *bdev = sb->s_bdev; fmode_t mode = sb->s_mode; kfree(sb->s_fs_info); //kill_litter_super(sb); generic_shutdown_super(sb); blkdev_put(bdev, mode | FMODE_EXCL); }
int vnlayer_get_sb( struct file_system_type *fs_type, int flags, const char *dev_name, void *raw_data, struct vfsmount *mnt ) #endif { SUPER_T *sb; int err; sb = sget(fs_type, NULL, vnlayer_set_sb, raw_data); if (IS_ERR(sb)) { #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) return sb; #else return PTR_ERR(sb); #endif } err = vnlayer_fill_super(sb, raw_data, 0); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) if (err != 0) { generic_shutdown_super(sb); sb = ERR_PTR(err); } return sb; #else if (err != 0) { generic_shutdown_super(sb); } else { /* We need to fill the mnt struct */ simple_set_mnt(mnt, sb); } return err; #endif }
/* * destroy an MTD-based superblock */ void kill_mtd_super(struct super_block *sb) { generic_shutdown_super(sb); put_mtd_device(sb->s_mtd); sb->s_mtd = NULL; }
/* generic_shutdown_super() will call our put_super function which * will handle all of our specific cleanup. */ void vnlayer_kill_sb(SUPER_T *sbp) { generic_shutdown_super(sbp); }
void unionfs_kill_block_super(struct super_block *sb) { generic_shutdown_super(sb); }
/** * lofs_kill_block_super * @sb: The lofs super block * * Used to bring the superblock down and free the private data. * Private data is free'd in lofs_put_super() */ static void lofs_kill_block_super(struct super_block *sb) { generic_shutdown_super(sb); }