diff options
Diffstat (limited to 'fs/sysfs/file.c')
-rw-r--r-- | fs/sysfs/file.c | 122 |
1 files changed, 61 insertions, 61 deletions
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index a67d1c682fed..be1cc39035bd 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
@@ -22,15 +22,15 @@ | |||
22 | #include "../kernfs/kernfs-internal.h" | 22 | #include "../kernfs/kernfs-internal.h" |
23 | 23 | ||
24 | /* | 24 | /* |
25 | * Determine ktype->sysfs_ops for the given sysfs_dirent. This function | 25 | * Determine ktype->sysfs_ops for the given kernfs_node. This function |
26 | * must be called while holding an active reference. | 26 | * must be called while holding an active reference. |
27 | */ | 27 | */ |
28 | static const struct sysfs_ops *sysfs_file_ops(struct sysfs_dirent *sd) | 28 | static const struct sysfs_ops *sysfs_file_ops(struct kernfs_node *kn) |
29 | { | 29 | { |
30 | struct kobject *kobj = sd->s_parent->priv; | 30 | struct kobject *kobj = kn->s_parent->priv; |
31 | 31 | ||
32 | if (sd->s_flags & SYSFS_FLAG_LOCKDEP) | 32 | if (kn->s_flags & SYSFS_FLAG_LOCKDEP) |
33 | lockdep_assert_held(sd); | 33 | lockdep_assert_held(kn); |
34 | return kobj->ktype ? kobj->ktype->sysfs_ops : NULL; | 34 | return kobj->ktype ? kobj->ktype->sysfs_ops : NULL; |
35 | } | 35 | } |
36 | 36 | ||
@@ -42,8 +42,8 @@ static const struct sysfs_ops *sysfs_file_ops(struct sysfs_dirent *sd) | |||
42 | static int sysfs_kf_seq_show(struct seq_file *sf, void *v) | 42 | static int sysfs_kf_seq_show(struct seq_file *sf, void *v) |
43 | { | 43 | { |
44 | struct sysfs_open_file *of = sf->private; | 44 | struct sysfs_open_file *of = sf->private; |
45 | struct kobject *kobj = of->sd->s_parent->priv; | 45 | struct kobject *kobj = of->kn->s_parent->priv; |
46 | const struct sysfs_ops *ops = sysfs_file_ops(of->sd); | 46 | const struct sysfs_ops *ops = sysfs_file_ops(of->kn); |
47 | ssize_t count; | 47 | ssize_t count; |
48 | char *buf; | 48 | char *buf; |
49 | 49 | ||
@@ -59,7 +59,7 @@ static int sysfs_kf_seq_show(struct seq_file *sf, void *v) | |||
59 | * if @ops->show() isn't implemented. | 59 | * if @ops->show() isn't implemented. |
60 | */ | 60 | */ |
61 | if (ops->show) { | 61 | if (ops->show) { |
62 | count = ops->show(kobj, of->sd->priv, buf); | 62 | count = ops->show(kobj, of->kn->priv, buf); |
63 | if (count < 0) | 63 | if (count < 0) |
64 | return count; | 64 | return count; |
65 | } | 65 | } |
@@ -81,8 +81,8 @@ static int sysfs_kf_seq_show(struct seq_file *sf, void *v) | |||
81 | static ssize_t sysfs_kf_bin_read(struct sysfs_open_file *of, char *buf, | 81 | static ssize_t sysfs_kf_bin_read(struct sysfs_open_file *of, char *buf, |
82 | size_t count, loff_t pos) | 82 | size_t count, loff_t pos) |
83 | { | 83 | { |
84 | struct bin_attribute *battr = of->sd->priv; | 84 | struct bin_attribute *battr = of->kn->priv; |
85 | struct kobject *kobj = of->sd->s_parent->priv; | 85 | struct kobject *kobj = of->kn->s_parent->priv; |
86 | loff_t size = file_inode(of->file)->i_size; | 86 | loff_t size = file_inode(of->file)->i_size; |
87 | 87 | ||
88 | if (!count) | 88 | if (!count) |
@@ -105,21 +105,21 @@ static ssize_t sysfs_kf_bin_read(struct sysfs_open_file *of, char *buf, | |||
105 | static ssize_t sysfs_kf_write(struct sysfs_open_file *of, char *buf, | 105 | static ssize_t sysfs_kf_write(struct sysfs_open_file *of, char *buf, |
106 | size_t count, loff_t pos) | 106 | size_t count, loff_t pos) |
107 | { | 107 | { |
108 | const struct sysfs_ops *ops = sysfs_file_ops(of->sd); | 108 | const struct sysfs_ops *ops = sysfs_file_ops(of->kn); |
109 | struct kobject *kobj = of->sd->s_parent->priv; | 109 | struct kobject *kobj = of->kn->s_parent->priv; |
110 | 110 | ||
111 | if (!count) | 111 | if (!count) |
112 | return 0; | 112 | return 0; |
113 | 113 | ||
114 | return ops->store(kobj, of->sd->priv, buf, count); | 114 | return ops->store(kobj, of->kn->priv, buf, count); |
115 | } | 115 | } |
116 | 116 | ||
117 | /* kernfs write callback for bin sysfs files */ | 117 | /* kernfs write callback for bin sysfs files */ |
118 | static ssize_t sysfs_kf_bin_write(struct sysfs_open_file *of, char *buf, | 118 | static ssize_t sysfs_kf_bin_write(struct sysfs_open_file *of, char *buf, |
119 | size_t count, loff_t pos) | 119 | size_t count, loff_t pos) |
120 | { | 120 | { |
121 | struct bin_attribute *battr = of->sd->priv; | 121 | struct bin_attribute *battr = of->kn->priv; |
122 | struct kobject *kobj = of->sd->s_parent->priv; | 122 | struct kobject *kobj = of->kn->s_parent->priv; |
123 | loff_t size = file_inode(of->file)->i_size; | 123 | loff_t size = file_inode(of->file)->i_size; |
124 | 124 | ||
125 | if (size) { | 125 | if (size) { |
@@ -139,30 +139,30 @@ static ssize_t sysfs_kf_bin_write(struct sysfs_open_file *of, char *buf, | |||
139 | static int sysfs_kf_bin_mmap(struct sysfs_open_file *of, | 139 | static int sysfs_kf_bin_mmap(struct sysfs_open_file *of, |
140 | struct vm_area_struct *vma) | 140 | struct vm_area_struct *vma) |
141 | { | 141 | { |
142 | struct bin_attribute *battr = of->sd->priv; | 142 | struct bin_attribute *battr = of->kn->priv; |
143 | struct kobject *kobj = of->sd->s_parent->priv; | 143 | struct kobject *kobj = of->kn->s_parent->priv; |
144 | 144 | ||
145 | return battr->mmap(of->file, kobj, battr, vma); | 145 | return battr->mmap(of->file, kobj, battr, vma); |
146 | } | 146 | } |
147 | 147 | ||
148 | void sysfs_notify(struct kobject *k, const char *dir, const char *attr) | 148 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr) |
149 | { | 149 | { |
150 | struct sysfs_dirent *sd = k->sd, *tmp; | 150 | struct kernfs_node *kn = kobj->sd, *tmp; |
151 | 151 | ||
152 | if (sd && dir) | 152 | if (kn && dir) |
153 | sd = kernfs_find_and_get(sd, dir); | 153 | kn = kernfs_find_and_get(kn, dir); |
154 | else | 154 | else |
155 | kernfs_get(sd); | 155 | kernfs_get(kn); |
156 | 156 | ||
157 | if (sd && attr) { | 157 | if (kn && attr) { |
158 | tmp = kernfs_find_and_get(sd, attr); | 158 | tmp = kernfs_find_and_get(kn, attr); |
159 | kernfs_put(sd); | 159 | kernfs_put(kn); |
160 | sd = tmp; | 160 | kn = tmp; |
161 | } | 161 | } |
162 | 162 | ||
163 | if (sd) { | 163 | if (kn) { |
164 | kernfs_notify(sd); | 164 | kernfs_notify(kn); |
165 | kernfs_put(sd); | 165 | kernfs_put(kn); |
166 | } | 166 | } |
167 | } | 167 | } |
168 | EXPORT_SYMBOL_GPL(sysfs_notify); | 168 | EXPORT_SYMBOL_GPL(sysfs_notify); |
@@ -202,17 +202,17 @@ static const struct kernfs_ops sysfs_bin_kfops_mmap = { | |||
202 | .mmap = sysfs_kf_bin_mmap, | 202 | .mmap = sysfs_kf_bin_mmap, |
203 | }; | 203 | }; |
204 | 204 | ||
205 | int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd, | 205 | int sysfs_add_file_mode_ns(struct kernfs_node *parent, |
206 | const struct attribute *attr, bool is_bin, | 206 | const struct attribute *attr, bool is_bin, |
207 | umode_t mode, const void *ns) | 207 | umode_t mode, const void *ns) |
208 | { | 208 | { |
209 | struct lock_class_key *key = NULL; | 209 | struct lock_class_key *key = NULL; |
210 | const struct kernfs_ops *ops; | 210 | const struct kernfs_ops *ops; |
211 | struct sysfs_dirent *sd; | 211 | struct kernfs_node *kn; |
212 | loff_t size; | 212 | loff_t size; |
213 | 213 | ||
214 | if (!is_bin) { | 214 | if (!is_bin) { |
215 | struct kobject *kobj = dir_sd->priv; | 215 | struct kobject *kobj = parent->priv; |
216 | const struct sysfs_ops *sysfs_ops = kobj->ktype->sysfs_ops; | 216 | const struct sysfs_ops *sysfs_ops = kobj->ktype->sysfs_ops; |
217 | 217 | ||
218 | /* every kobject with an attribute needs a ktype assigned */ | 218 | /* every kobject with an attribute needs a ktype assigned */ |
@@ -252,20 +252,20 @@ int sysfs_add_file_mode_ns(struct sysfs_dirent *dir_sd, | |||
252 | if (!attr->ignore_lockdep) | 252 | if (!attr->ignore_lockdep) |
253 | key = attr->key ?: (struct lock_class_key *)&attr->skey; | 253 | key = attr->key ?: (struct lock_class_key *)&attr->skey; |
254 | #endif | 254 | #endif |
255 | sd = kernfs_create_file_ns_key(dir_sd, attr->name, mode, size, | 255 | kn = kernfs_create_file_ns_key(parent, attr->name, mode, size, |
256 | ops, (void *)attr, ns, key); | 256 | ops, (void *)attr, ns, key); |
257 | if (IS_ERR(sd)) { | 257 | if (IS_ERR(kn)) { |
258 | if (PTR_ERR(sd) == -EEXIST) | 258 | if (PTR_ERR(kn) == -EEXIST) |
259 | sysfs_warn_dup(dir_sd, attr->name); | 259 | sysfs_warn_dup(parent, attr->name); |
260 | return PTR_ERR(sd); | 260 | return PTR_ERR(kn); |
261 | } | 261 | } |
262 | return 0; | 262 | return 0; |
263 | } | 263 | } |
264 | 264 | ||
265 | int sysfs_add_file(struct sysfs_dirent *dir_sd, const struct attribute *attr, | 265 | int sysfs_add_file(struct kernfs_node *parent, const struct attribute *attr, |
266 | bool is_bin) | 266 | bool is_bin) |
267 | { | 267 | { |
268 | return sysfs_add_file_mode_ns(dir_sd, attr, is_bin, attr->mode, NULL); | 268 | return sysfs_add_file_mode_ns(parent, attr, is_bin, attr->mode, NULL); |
269 | } | 269 | } |
270 | 270 | ||
271 | /** | 271 | /** |
@@ -307,21 +307,21 @@ EXPORT_SYMBOL_GPL(sysfs_create_files); | |||
307 | int sysfs_add_file_to_group(struct kobject *kobj, | 307 | int sysfs_add_file_to_group(struct kobject *kobj, |
308 | const struct attribute *attr, const char *group) | 308 | const struct attribute *attr, const char *group) |
309 | { | 309 | { |
310 | struct sysfs_dirent *dir_sd; | 310 | struct kernfs_node *parent; |
311 | int error; | 311 | int error; |
312 | 312 | ||
313 | if (group) { | 313 | if (group) { |
314 | dir_sd = kernfs_find_and_get(kobj->sd, group); | 314 | parent = kernfs_find_and_get(kobj->sd, group); |
315 | } else { | 315 | } else { |
316 | dir_sd = kobj->sd; | 316 | parent = kobj->sd; |
317 | kernfs_get(dir_sd); | 317 | kernfs_get(parent); |
318 | } | 318 | } |
319 | 319 | ||
320 | if (!dir_sd) | 320 | if (!parent) |
321 | return -ENOENT; | 321 | return -ENOENT; |
322 | 322 | ||
323 | error = sysfs_add_file(dir_sd, attr, false); | 323 | error = sysfs_add_file(parent, attr, false); |
324 | kernfs_put(dir_sd); | 324 | kernfs_put(parent); |
325 | 325 | ||
326 | return error; | 326 | return error; |
327 | } | 327 | } |
@@ -337,20 +337,20 @@ EXPORT_SYMBOL_GPL(sysfs_add_file_to_group); | |||
337 | int sysfs_chmod_file(struct kobject *kobj, const struct attribute *attr, | 337 | int sysfs_chmod_file(struct kobject *kobj, const struct attribute *attr, |
338 | umode_t mode) | 338 | umode_t mode) |
339 | { | 339 | { |
340 | struct sysfs_dirent *sd; | 340 | struct kernfs_node *kn; |
341 | struct iattr newattrs; | 341 | struct iattr newattrs; |
342 | int rc; | 342 | int rc; |
343 | 343 | ||
344 | sd = kernfs_find_and_get(kobj->sd, attr->name); | 344 | kn = kernfs_find_and_get(kobj->sd, attr->name); |
345 | if (!sd) | 345 | if (!kn) |
346 | return -ENOENT; | 346 | return -ENOENT; |
347 | 347 | ||
348 | newattrs.ia_mode = (mode & S_IALLUGO) | (sd->s_mode & ~S_IALLUGO); | 348 | newattrs.ia_mode = (mode & S_IALLUGO) | (kn->s_mode & ~S_IALLUGO); |
349 | newattrs.ia_valid = ATTR_MODE; | 349 | newattrs.ia_valid = ATTR_MODE; |
350 | 350 | ||
351 | rc = kernfs_setattr(sd, &newattrs); | 351 | rc = kernfs_setattr(kn, &newattrs); |
352 | 352 | ||
353 | kernfs_put(sd); | 353 | kernfs_put(kn); |
354 | return rc; | 354 | return rc; |
355 | } | 355 | } |
356 | EXPORT_SYMBOL_GPL(sysfs_chmod_file); | 356 | EXPORT_SYMBOL_GPL(sysfs_chmod_file); |
@@ -366,9 +366,9 @@ EXPORT_SYMBOL_GPL(sysfs_chmod_file); | |||
366 | void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr, | 366 | void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr, |
367 | const void *ns) | 367 | const void *ns) |
368 | { | 368 | { |
369 | struct sysfs_dirent *dir_sd = kobj->sd; | 369 | struct kernfs_node *parent = kobj->sd; |
370 | 370 | ||
371 | kernfs_remove_by_name_ns(dir_sd, attr->name, ns); | 371 | kernfs_remove_by_name_ns(parent, attr->name, ns); |
372 | } | 372 | } |
373 | EXPORT_SYMBOL_GPL(sysfs_remove_file_ns); | 373 | EXPORT_SYMBOL_GPL(sysfs_remove_file_ns); |
374 | 374 | ||
@@ -389,18 +389,18 @@ EXPORT_SYMBOL_GPL(sysfs_remove_files); | |||
389 | void sysfs_remove_file_from_group(struct kobject *kobj, | 389 | void sysfs_remove_file_from_group(struct kobject *kobj, |
390 | const struct attribute *attr, const char *group) | 390 | const struct attribute *attr, const char *group) |
391 | { | 391 | { |
392 | struct sysfs_dirent *dir_sd; | 392 | struct kernfs_node *parent; |
393 | 393 | ||
394 | if (group) { | 394 | if (group) { |
395 | dir_sd = kernfs_find_and_get(kobj->sd, group); | 395 | parent = kernfs_find_and_get(kobj->sd, group); |
396 | } else { | 396 | } else { |
397 | dir_sd = kobj->sd; | 397 | parent = kobj->sd; |
398 | kernfs_get(dir_sd); | 398 | kernfs_get(parent); |
399 | } | 399 | } |
400 | 400 | ||
401 | if (dir_sd) { | 401 | if (parent) { |
402 | kernfs_remove_by_name(dir_sd, attr->name); | 402 | kernfs_remove_by_name(parent, attr->name); |
403 | kernfs_put(dir_sd); | 403 | kernfs_put(parent); |
404 | } | 404 | } |
405 | } | 405 | } |
406 | EXPORT_SYMBOL_GPL(sysfs_remove_file_from_group); | 406 | EXPORT_SYMBOL_GPL(sysfs_remove_file_from_group); |