예제 #1
0
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);
}
예제 #2
0
파일: super.c 프로젝트: Seneol/FileSystem
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");
}
예제 #3
0
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);
}
예제 #4
0
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);
}
예제 #5
0
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);
}
예제 #6
0
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);
}
예제 #7
0
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
}
예제 #8
0
/*
 * 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;
}
예제 #9
0
/* 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);
}
예제 #10
0
void unionfs_kill_block_super(struct super_block *sb)
{
	generic_shutdown_super(sb);
}
예제 #11
0
/**
 * 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);
}