Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 846ae671 authored by Chao Yu's avatar Chao Yu Committed by Jaegeuk Kim
Browse files

f2fs: expose extension_list sysfs entry



This patch adds a sysfs entry 'extension_list' to support
query/add/del item in extension list.

Query:
cat /sys/fs/f2fs/<device>/extension_list

Add:
echo 'extension' > /sys/fs/f2fs/<device>/extension_list

Del:
echo '!extension' > /sys/fs/f2fs/<device>/extension_list

Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 17cd07ae
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -192,3 +192,12 @@ Date: November 2017
Contact:	"Sheng Yong" <shengyong1@huawei.com>
Description:
		 Controls readahead inode block in readdir.

What:		/sys/fs/f2fs/<disk>/extension_list
Date:		Feburary 2018
Contact:	"Chao Yu" <yuchao0@huawei.com>
Description:
		 Used to control configure extension list:
		 - Query: cat /sys/fs/f2fs/<disk>/extension_list
		 - Add: echo 'extension' > /sys/fs/f2fs/<disk>/extension_list
		 - Del: echo '!extension' > /sys/fs/f2fs/<disk>/extension_list
+3 −1
Original line number Diff line number Diff line
@@ -1047,7 +1047,7 @@ struct f2fs_sb_info {
	struct super_block *sb;			/* pointer to VFS super block */
	struct proc_dir_entry *s_proc;		/* proc entry */
	struct f2fs_super_block *raw_super;	/* raw super block pointer */
	struct mutex sb_lock;			/* lock for raw super block */
	struct rw_semaphore sb_lock;		/* lock for raw super block */
	int valid_super_block;			/* valid super block no */
	unsigned long s_flag;				/* flags for sbi */

@@ -2605,6 +2605,8 @@ void handle_failed_inode(struct inode *inode);
/*
 * namei.c
 */
int update_extension_list(struct f2fs_sb_info *sbi, const char *name,
								bool set);
struct dentry *f2fs_get_parent(struct dentry *child);

/*
+2 −2
Original line number Diff line number Diff line
@@ -1970,7 +1970,7 @@ static int f2fs_ioc_get_encryption_pwsalt(struct file *filp, unsigned long arg)
	if (err)
		return err;

	mutex_lock(&sbi->sb_lock);
	down_write(&sbi->sb_lock);

	if (uuid_is_nonzero(sbi->raw_super->encrypt_pw_salt))
		goto got_it;
@@ -1989,7 +1989,7 @@ static int f2fs_ioc_get_encryption_pwsalt(struct file *filp, unsigned long arg)
									16))
		err = -EFAULT;
out_err:
	mutex_unlock(&sbi->sb_lock);
	up_write(&sbi->sb_lock);
	mnt_drop_write_file(filp);
	return err;
}
+39 −3
Original line number Diff line number Diff line
@@ -171,16 +171,52 @@ static int is_multimedia_file(const unsigned char *s, const char *sub)
static inline void set_cold_files(struct f2fs_sb_info *sbi, struct inode *inode,
		const unsigned char *name)
{
	int i;
	__u8 (*extlist)[8] = sbi->raw_super->extension_list;
	__u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
	int i, count;

	down_read(&sbi->sb_lock);

	count = le32_to_cpu(sbi->raw_super->extension_count);

	int count = le32_to_cpu(sbi->raw_super->extension_count);
	for (i = 0; i < count; i++) {
		if (is_multimedia_file(name, extlist[i])) {
			file_set_cold(inode);
			break;
		}
	}

	up_read(&sbi->sb_lock);
}

int update_extension_list(struct f2fs_sb_info *sbi, const char *name, bool set)
{
	__u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
	int count = le32_to_cpu(sbi->raw_super->extension_count);
	int i;

	for (i = 0; i < count; i++) {
		if (strcmp(name, extlist[i]))
			continue;

		if (set)
			return -EINVAL;

		memcpy(extlist[i], extlist[i + 1],
				F2FS_EXTENSION_LEN * (count - i - 1));
		memset(extlist[count - 1], 0, F2FS_EXTENSION_LEN);
		sbi->raw_super->extension_count = cpu_to_le32(count - 1);
		return 0;
	}

	if (!set)
		return -EINVAL;

	if (count == F2FS_MAX_EXTENSION)
		return -EINVAL;

	strncpy(extlist[count], name, strlen(name));
	sbi->raw_super->extension_count = cpu_to_le32(count + 1);
	return 0;
}

static int f2fs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
+1 −1
Original line number Diff line number Diff line
@@ -2222,7 +2222,7 @@ static void init_sb_info(struct f2fs_sb_info *sbi)
	sbi->dirty_device = 0;
	spin_lock_init(&sbi->dev_lock);

	mutex_init(&sbi->sb_lock);
	init_rwsem(&sbi->sb_lock);
}

static int init_percpu_info(struct f2fs_sb_info *sbi)
Loading