diff options
Diffstat (limited to 'fs/sysfs/bin.c')
| -rw-r--r-- | fs/sysfs/bin.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/fs/sysfs/bin.c b/fs/sysfs/bin.c index e9d293593e52..4e321f7353fa 100644 --- a/fs/sysfs/bin.c +++ b/fs/sysfs/bin.c | |||
| @@ -46,9 +46,9 @@ struct bin_buffer { | |||
| 46 | }; | 46 | }; |
| 47 | 47 | ||
| 48 | static int | 48 | static int |
| 49 | fill_read(struct dentry *dentry, char *buffer, loff_t off, size_t count) | 49 | fill_read(struct file *file, char *buffer, loff_t off, size_t count) |
| 50 | { | 50 | { |
| 51 | struct sysfs_dirent *attr_sd = dentry->d_fsdata; | 51 | struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; |
| 52 | struct bin_attribute *attr = attr_sd->s_bin_attr.bin_attr; | 52 | struct bin_attribute *attr = attr_sd->s_bin_attr.bin_attr; |
| 53 | struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; | 53 | struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; |
| 54 | int rc; | 54 | int rc; |
| @@ -59,7 +59,7 @@ fill_read(struct dentry *dentry, char *buffer, loff_t off, size_t count) | |||
| 59 | 59 | ||
| 60 | rc = -EIO; | 60 | rc = -EIO; |
| 61 | if (attr->read) | 61 | if (attr->read) |
| 62 | rc = attr->read(kobj, attr, buffer, off, count); | 62 | rc = attr->read(file, kobj, attr, buffer, off, count); |
| 63 | 63 | ||
| 64 | sysfs_put_active(attr_sd); | 64 | sysfs_put_active(attr_sd); |
| 65 | 65 | ||
| @@ -70,8 +70,7 @@ static ssize_t | |||
| 70 | read(struct file *file, char __user *userbuf, size_t bytes, loff_t *off) | 70 | read(struct file *file, char __user *userbuf, size_t bytes, loff_t *off) |
| 71 | { | 71 | { |
| 72 | struct bin_buffer *bb = file->private_data; | 72 | struct bin_buffer *bb = file->private_data; |
| 73 | struct dentry *dentry = file->f_path.dentry; | 73 | int size = file->f_path.dentry->d_inode->i_size; |
| 74 | int size = dentry->d_inode->i_size; | ||
| 75 | loff_t offs = *off; | 74 | loff_t offs = *off; |
| 76 | int count = min_t(size_t, bytes, PAGE_SIZE); | 75 | int count = min_t(size_t, bytes, PAGE_SIZE); |
| 77 | char *temp; | 76 | char *temp; |
| @@ -92,7 +91,7 @@ read(struct file *file, char __user *userbuf, size_t bytes, loff_t *off) | |||
| 92 | 91 | ||
| 93 | mutex_lock(&bb->mutex); | 92 | mutex_lock(&bb->mutex); |
| 94 | 93 | ||
| 95 | count = fill_read(dentry, bb->buffer, offs, count); | 94 | count = fill_read(file, bb->buffer, offs, count); |
| 96 | if (count < 0) { | 95 | if (count < 0) { |
| 97 | mutex_unlock(&bb->mutex); | 96 | mutex_unlock(&bb->mutex); |
| 98 | goto out_free; | 97 | goto out_free; |
| @@ -117,9 +116,9 @@ read(struct file *file, char __user *userbuf, size_t bytes, loff_t *off) | |||
| 117 | } | 116 | } |
| 118 | 117 | ||
| 119 | static int | 118 | static int |
| 120 | flush_write(struct dentry *dentry, char *buffer, loff_t offset, size_t count) | 119 | flush_write(struct file *file, char *buffer, loff_t offset, size_t count) |
| 121 | { | 120 | { |
| 122 | struct sysfs_dirent *attr_sd = dentry->d_fsdata; | 121 | struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; |
| 123 | struct bin_attribute *attr = attr_sd->s_bin_attr.bin_attr; | 122 | struct bin_attribute *attr = attr_sd->s_bin_attr.bin_attr; |
| 124 | struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; | 123 | struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; |
| 125 | int rc; | 124 | int rc; |
| @@ -130,7 +129,7 @@ flush_write(struct dentry *dentry, char *buffer, loff_t offset, size_t count) | |||
| 130 | 129 | ||
| 131 | rc = -EIO; | 130 | rc = -EIO; |
| 132 | if (attr->write) | 131 | if (attr->write) |
| 133 | rc = attr->write(kobj, attr, buffer, offset, count); | 132 | rc = attr->write(file, kobj, attr, buffer, offset, count); |
| 134 | 133 | ||
| 135 | sysfs_put_active(attr_sd); | 134 | sysfs_put_active(attr_sd); |
| 136 | 135 | ||
| @@ -141,8 +140,7 @@ static ssize_t write(struct file *file, const char __user *userbuf, | |||
| 141 | size_t bytes, loff_t *off) | 140 | size_t bytes, loff_t *off) |
| 142 | { | 141 | { |
| 143 | struct bin_buffer *bb = file->private_data; | 142 | struct bin_buffer *bb = file->private_data; |
| 144 | struct dentry *dentry = file->f_path.dentry; | 143 | int size = file->f_path.dentry->d_inode->i_size; |
| 145 | int size = dentry->d_inode->i_size; | ||
| 146 | loff_t offs = *off; | 144 | loff_t offs = *off; |
| 147 | int count = min_t(size_t, bytes, PAGE_SIZE); | 145 | int count = min_t(size_t, bytes, PAGE_SIZE); |
| 148 | char *temp; | 146 | char *temp; |
| @@ -165,7 +163,7 @@ static ssize_t write(struct file *file, const char __user *userbuf, | |||
| 165 | 163 | ||
| 166 | memcpy(bb->buffer, temp, count); | 164 | memcpy(bb->buffer, temp, count); |
| 167 | 165 | ||
| 168 | count = flush_write(dentry, bb->buffer, offs, count); | 166 | count = flush_write(file, bb->buffer, offs, count); |
| 169 | mutex_unlock(&bb->mutex); | 167 | mutex_unlock(&bb->mutex); |
| 170 | 168 | ||
| 171 | if (count > 0) | 169 | if (count > 0) |
| @@ -363,7 +361,7 @@ static int mmap(struct file *file, struct vm_area_struct *vma) | |||
| 363 | if (!attr->mmap) | 361 | if (!attr->mmap) |
| 364 | goto out_put; | 362 | goto out_put; |
| 365 | 363 | ||
| 366 | rc = attr->mmap(kobj, attr, vma); | 364 | rc = attr->mmap(file, kobj, attr, vma); |
| 367 | if (rc) | 365 | if (rc) |
| 368 | goto out_put; | 366 | goto out_put; |
| 369 | 367 | ||
| @@ -501,7 +499,7 @@ int sysfs_create_bin_file(struct kobject *kobj, | |||
| 501 | void sysfs_remove_bin_file(struct kobject *kobj, | 499 | void sysfs_remove_bin_file(struct kobject *kobj, |
| 502 | const struct bin_attribute *attr) | 500 | const struct bin_attribute *attr) |
| 503 | { | 501 | { |
| 504 | sysfs_hash_and_remove(kobj->sd, attr->attr.name); | 502 | sysfs_hash_and_remove(kobj->sd, NULL, attr->attr.name); |
| 505 | } | 503 | } |
| 506 | 504 | ||
| 507 | EXPORT_SYMBOL_GPL(sysfs_create_bin_file); | 505 | EXPORT_SYMBOL_GPL(sysfs_create_bin_file); |
