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

Commit a7dc66df authored by Tejun Heo's avatar Tejun Heo Committed by Greg Kroah-Hartman
Browse files

sysfs, kernfs: remove SYSFS_KOBJ_BIN_ATTR



After kernfs_ops and sysfs_dirent->s_attr.size addition, the
distinction between SYSFS_KOBJ_BIN_ATTR and SYSFS_KOBJ_ATTR is only
necessary while creating files to decide which kernfs_ops to use.
Afterwards, they behave exactly the same.

This patch removes SYSFS_KOBJ_BIN_ATTR along with sysfs_is_bin().
sysfs_add_file[_mode_ns]() are updated to take bool @is_bin instead of
@type.

This patch doesn't introduce any behavior changes.  This completely
isolates the distinction between the two sysfs file types in the sysfs
layer proper.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 471bd7b7
Loading
Loading
Loading
Loading
+8 −15
Original line number Diff line number Diff line
@@ -47,11 +47,6 @@ struct sysfs_open_dirent {
	struct list_head	files; /* goes through sysfs_open_file.list */
};

static bool sysfs_is_bin(struct sysfs_dirent *sd)
{
	return sysfs_type(sd) == SYSFS_KOBJ_BIN_ATTR;
}

static struct sysfs_open_file *sysfs_of(struct file *file)
{
	return ((struct seq_file *)file->private_data)->private;
@@ -916,7 +911,7 @@ static const struct kernfs_ops sysfs_bin_kfops_rw = {
};

int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
			   const struct attribute *attr, int type,
			   const struct attribute *attr, bool is_bin,
			   umode_t amode, const void *ns)
{
	umode_t mode = (amode & S_IALLUGO) | S_IFREG;
@@ -926,7 +921,7 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
	loff_t size;
	int rc;

	if (type == SYSFS_KOBJ_ATTR) {
	if (!is_bin) {
		struct kobject *kobj = dir_sd->priv;
		const struct sysfs_ops *sysfs_ops = kobj->ktype->sysfs_ops;

@@ -961,7 +956,7 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
		size = battr->size;
	}

	sd = sysfs_new_dirent(attr->name, mode, type);
	sd = sysfs_new_dirent(attr->name, mode, SYSFS_KOBJ_ATTR);
	if (!sd)
		return -ENOMEM;

@@ -991,11 +986,10 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
	return rc;
}


int sysfs_add_file(struct sysfs_dirent *dir_sd, const struct attribute *attr,
		   int type)
		   bool is_bin)
{
	return sysfs_add_file_mode_ns(dir_sd, attr, type, attr->mode, NULL);
	return sysfs_add_file_mode_ns(dir_sd, attr, is_bin, attr->mode, NULL);
}

/**
@@ -1009,8 +1003,7 @@ int sysfs_create_file_ns(struct kobject *kobj, const struct attribute *attr,
{
	BUG_ON(!kobj || !kobj->sd || !attr);

	return sysfs_add_file_mode_ns(kobj->sd, attr, SYSFS_KOBJ_ATTR,
				      attr->mode, ns);
	return sysfs_add_file_mode_ns(kobj->sd, attr, false, attr->mode, ns);

}
EXPORT_SYMBOL_GPL(sysfs_create_file_ns);
@@ -1049,7 +1042,7 @@ int sysfs_add_file_to_group(struct kobject *kobj,
	if (!dir_sd)
		return -ENOENT;

	error = sysfs_add_file(dir_sd, attr, SYSFS_KOBJ_ATTR);
	error = sysfs_add_file(dir_sd, attr, false);
	sysfs_put(dir_sd);

	return error;
@@ -1141,7 +1134,7 @@ int sysfs_create_bin_file(struct kobject *kobj,
{
	BUG_ON(!kobj || !kobj->sd || !attr);

	return sysfs_add_file(kobj->sd, &attr->attr, SYSFS_KOBJ_BIN_ATTR);
	return sysfs_add_file(kobj->sd, &attr->attr, true);
}
EXPORT_SYMBOL_GPL(sysfs_create_bin_file);

+2 −3
Original line number Diff line number Diff line
@@ -55,8 +55,7 @@ static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
				if (!mode)
					continue;
			}
			error = sysfs_add_file_mode_ns(dir_sd, *attr,
						       SYSFS_KOBJ_ATTR,
			error = sysfs_add_file_mode_ns(dir_sd, *attr, false,
						       (*attr)->mode | mode,
						       NULL);
			if (unlikely(error))
@@ -269,7 +268,7 @@ int sysfs_merge_group(struct kobject *kobj,
		return -ENOENT;

	for ((i = 0, attr = grp->attrs); *attr && !error; (++i, ++attr))
		error = sysfs_add_file(dir_sd, *attr, SYSFS_KOBJ_ATTR);
		error = sysfs_add_file(dir_sd, *attr, false);
	if (error) {
		while (--i >= 0)
			kernfs_remove_by_name(dir_sd, (*--attr)->name);
+0 −1
Original line number Diff line number Diff line
@@ -269,7 +269,6 @@ static void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode)
		inode->i_fop = &sysfs_dir_operations;
		break;
	case SYSFS_KOBJ_ATTR:
	case SYSFS_KOBJ_BIN_ATTR:
		inode->i_size = sd->s_attr.size;
		inode->i_fop = &kernfs_file_operations;
		break;
+4 −7
Original line number Diff line number Diff line
@@ -83,10 +83,9 @@ struct sysfs_dirent {
#define SYSFS_TYPE_MASK			0x00ff
#define SYSFS_DIR			0x0001
#define SYSFS_KOBJ_ATTR			0x0002
#define SYSFS_KOBJ_BIN_ATTR		0x0004
#define SYSFS_KOBJ_LINK			0x0008
#define SYSFS_COPY_NAME			(SYSFS_DIR | SYSFS_KOBJ_LINK)
#define SYSFS_ACTIVE_REF		(SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR)
#define SYSFS_ACTIVE_REF		SYSFS_KOBJ_ATTR

#define SYSFS_FLAG_MASK			~SYSFS_TYPE_MASK
#define SYSFS_FLAG_NS			0x01000
@@ -115,10 +114,8 @@ do { \
static inline bool sysfs_ignore_lockdep(struct sysfs_dirent *sd)
{
	struct attribute *attr = sd->priv;
	int type = sysfs_type(sd);

	return (type == SYSFS_KOBJ_ATTR || type == SYSFS_KOBJ_BIN_ATTR) &&
		attr->ignore_lockdep;
	return sysfs_type(sd) == SYSFS_KOBJ_ATTR && attr->ignore_lockdep;
}

#else
@@ -219,10 +216,10 @@ int sysfs_inode_init(void);
extern const struct file_operations kernfs_file_operations;

int sysfs_add_file(struct sysfs_dirent *dir_sd,
		   const struct attribute *attr, int type);
		   const struct attribute *attr, bool is_bin);

int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
			   const struct attribute *attr, int type,
			   const struct attribute *attr, bool is_bin,
			   umode_t amode, const void *ns);
void sysfs_unmap_bin_file(struct sysfs_dirent *sd);