Skip to content

Commit

Permalink
staging: erofs: introduce superblock registration
Browse files Browse the repository at this point in the history
In order to introducing shrinker solution for erofs,
let's manage all mounted erofs instances at first.

Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Gao Xiang authored and Greg Kroah-Hartman committed Jul 27, 2018
1 parent 0d40d6e commit 2497ee4
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/staging/erofs/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ struct erofs_fault_info {
typedef u64 erofs_nid_t;

struct erofs_sb_info {
/* list for all registered superblocks, mainly for shrinker */
struct list_head list;

u32 blocks;
u32 meta_blkaddr;
#ifdef CONFIG_EROFS_FS_XATTR
Expand Down Expand Up @@ -410,6 +413,9 @@ static inline void erofs_vunmap(const void *mem, unsigned int count)
/* utils.c */
extern struct page *erofs_allocpage(struct list_head *pool, gfp_t gfp);

extern void erofs_register_super(struct super_block *sb);
extern void erofs_unregister_super(struct super_block *sb);

#ifndef lru_to_page
#define lru_to_page(head) (list_entry((head)->prev, struct page, lru))
#endif
Expand Down
4 changes: 4 additions & 0 deletions drivers/staging/erofs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,8 @@ static int erofs_read_super(struct super_block *sb,
snprintf(sbi->dev_name, PATH_MAX, "%s", dev_name);
sbi->dev_name[PATH_MAX - 1] = '\0';

erofs_register_super(sb);

/*
* We already have a positive dentry, which was instantiated
* by d_make_root. Just need to d_rehash it.
Expand Down Expand Up @@ -373,6 +375,8 @@ static void erofs_put_super(struct super_block *sb)
infoln("unmounted for %s", sbi->dev_name);
__putname(sbi->dev_name);

erofs_unregister_super(sb);

kfree(sbi);
sb->s_fs_info = NULL;
}
Expand Down
17 changes: 17 additions & 0 deletions drivers/staging/erofs/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,20 @@ struct page *erofs_allocpage(struct list_head *pool, gfp_t gfp)
return page;
}

static DEFINE_MUTEX(erofs_sb_list_lock);
static LIST_HEAD(erofs_sb_list);

void erofs_register_super(struct super_block *sb)
{
mutex_lock(&erofs_sb_list_lock);
list_add(&EROFS_SB(sb)->list, &erofs_sb_list);
mutex_unlock(&erofs_sb_list_lock);
}

void erofs_unregister_super(struct super_block *sb)
{
mutex_lock(&erofs_sb_list_lock);
list_del(&EROFS_SB(sb)->list);
mutex_unlock(&erofs_sb_list_lock);
}

0 comments on commit 2497ee4

Please sign in to comment.