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: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
471bd7b78b
commit
a7dc66dfb4
|
@ -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 = {
|
||||||
};
|
};
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
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 {
|
||||||
#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 { \
|
||||||
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);
|
||||||
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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue