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

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
...@@ -47,11 +47,6 @@ struct sysfs_open_dirent { ...@@ -47,11 +47,6 @@ struct sysfs_open_dirent {
struct list_head files; /* goes through sysfs_open_file.list */ 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) static struct sysfs_open_file *sysfs_of(struct file *file)
{ {
return ((struct seq_file *)file->private_data)->private; return ((struct seq_file *)file->private_data)->private;
...@@ -916,7 +911,7 @@ static const struct kernfs_ops sysfs_bin_kfops_rw = { ...@@ -916,7 +911,7 @@ static const struct kernfs_ops sysfs_bin_kfops_rw = {
}; };
int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd, 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 amode, const void *ns)
{ {
umode_t mode = (amode & S_IALLUGO) | S_IFREG; umode_t mode = (amode & S_IALLUGO) | S_IFREG;
...@@ -926,7 +921,7 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd, ...@@ -926,7 +921,7 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
loff_t size; loff_t size;
int rc; int rc;
if (type == SYSFS_KOBJ_ATTR) { if (!is_bin) {
struct kobject *kobj = dir_sd->priv; struct kobject *kobj = dir_sd->priv;
const struct sysfs_ops *sysfs_ops = kobj->ktype->sysfs_ops; 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, ...@@ -961,7 +956,7 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
size = battr->size; size = battr->size;
} }
sd = sysfs_new_dirent(attr->name, mode, type); sd = sysfs_new_dirent(attr->name, mode, SYSFS_KOBJ_ATTR);
if (!sd) if (!sd)
return -ENOMEM; return -ENOMEM;
...@@ -991,11 +986,10 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd, ...@@ -991,11 +986,10 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd,
return rc; return rc;
} }
int sysfs_add_file(struct sysfs_dirent *dir_sd, const struct attribute *attr, 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, ...@@ -1009,8 +1003,7 @@ int sysfs_create_file_ns(struct kobject *kobj, const struct attribute *attr,
{ {
BUG_ON(!kobj || !kobj->sd || !attr); BUG_ON(!kobj || !kobj->sd || !attr);
return sysfs_add_file_mode_ns(kobj->sd, attr, SYSFS_KOBJ_ATTR, return sysfs_add_file_mode_ns(kobj->sd, attr, false, attr->mode, ns);
attr->mode, ns);
} }
EXPORT_SYMBOL_GPL(sysfs_create_file_ns); EXPORT_SYMBOL_GPL(sysfs_create_file_ns);
...@@ -1049,7 +1042,7 @@ int sysfs_add_file_to_group(struct kobject *kobj, ...@@ -1049,7 +1042,7 @@ int sysfs_add_file_to_group(struct kobject *kobj,
if (!dir_sd) if (!dir_sd)
return -ENOENT; return -ENOENT;
error = sysfs_add_file(dir_sd, attr, SYSFS_KOBJ_ATTR); error = sysfs_add_file(dir_sd, attr, false);
sysfs_put(dir_sd); sysfs_put(dir_sd);
return error; return error;
...@@ -1141,7 +1134,7 @@ int sysfs_create_bin_file(struct kobject *kobj, ...@@ -1141,7 +1134,7 @@ int sysfs_create_bin_file(struct kobject *kobj,
{ {
BUG_ON(!kobj || !kobj->sd || !attr); 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); EXPORT_SYMBOL_GPL(sysfs_create_bin_file);
......
...@@ -55,8 +55,7 @@ static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj, ...@@ -55,8 +55,7 @@ static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
if (!mode) if (!mode)
continue; continue;
} }
error = sysfs_add_file_mode_ns(dir_sd, *attr, error = sysfs_add_file_mode_ns(dir_sd, *attr, false,
SYSFS_KOBJ_ATTR,
(*attr)->mode | mode, (*attr)->mode | mode,
NULL); NULL);
if (unlikely(error)) if (unlikely(error))
...@@ -269,7 +268,7 @@ int sysfs_merge_group(struct kobject *kobj, ...@@ -269,7 +268,7 @@ int sysfs_merge_group(struct kobject *kobj,
return -ENOENT; return -ENOENT;
for ((i = 0, attr = grp->attrs); *attr && !error; (++i, ++attr)) 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) { if (error) {
while (--i >= 0) while (--i >= 0)
kernfs_remove_by_name(dir_sd, (*--attr)->name); kernfs_remove_by_name(dir_sd, (*--attr)->name);
......
...@@ -269,7 +269,6 @@ static void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode) ...@@ -269,7 +269,6 @@ static void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode)
inode->i_fop = &sysfs_dir_operations; inode->i_fop = &sysfs_dir_operations;
break; break;
case SYSFS_KOBJ_ATTR: case SYSFS_KOBJ_ATTR:
case SYSFS_KOBJ_BIN_ATTR:
inode->i_size = sd->s_attr.size; inode->i_size = sd->s_attr.size;
inode->i_fop = &kernfs_file_operations; inode->i_fop = &kernfs_file_operations;
break; break;
......
...@@ -83,10 +83,9 @@ struct sysfs_dirent { ...@@ -83,10 +83,9 @@ struct sysfs_dirent {
#define SYSFS_TYPE_MASK 0x00ff #define SYSFS_TYPE_MASK 0x00ff
#define SYSFS_DIR 0x0001 #define SYSFS_DIR 0x0001
#define SYSFS_KOBJ_ATTR 0x0002 #define SYSFS_KOBJ_ATTR 0x0002
#define SYSFS_KOBJ_BIN_ATTR 0x0004
#define SYSFS_KOBJ_LINK 0x0008 #define SYSFS_KOBJ_LINK 0x0008
#define SYSFS_COPY_NAME (SYSFS_DIR | SYSFS_KOBJ_LINK) #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_MASK ~SYSFS_TYPE_MASK
#define SYSFS_FLAG_NS 0x01000 #define SYSFS_FLAG_NS 0x01000
...@@ -115,10 +114,8 @@ do { \ ...@@ -115,10 +114,8 @@ do { \
static inline bool sysfs_ignore_lockdep(struct sysfs_dirent *sd) static inline bool sysfs_ignore_lockdep(struct sysfs_dirent *sd)
{ {
struct attribute *attr = sd->priv; struct attribute *attr = sd->priv;
int type = sysfs_type(sd);
return (type == SYSFS_KOBJ_ATTR || type == SYSFS_KOBJ_BIN_ATTR) && return sysfs_type(sd) == SYSFS_KOBJ_ATTR && attr->ignore_lockdep;
attr->ignore_lockdep;
} }
#else #else
...@@ -219,10 +216,10 @@ int sysfs_inode_init(void); ...@@ -219,10 +216,10 @@ int sysfs_inode_init(void);
extern const struct file_operations kernfs_file_operations; extern const struct file_operations kernfs_file_operations;
int sysfs_add_file(struct sysfs_dirent *dir_sd, 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, 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 amode, const void *ns);
void sysfs_unmap_bin_file(struct sysfs_dirent *sd); void sysfs_unmap_bin_file(struct sysfs_dirent *sd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment