diff options
Diffstat (limited to 'fs/kernfs')
| -rw-r--r-- | fs/kernfs/dir.c | 36 | ||||
| -rw-r--r-- | fs/kernfs/file.c | 4 | ||||
| -rw-r--r-- | fs/kernfs/inode.c | 13 | ||||
| -rw-r--r-- | fs/kernfs/kernfs-internal.h | 1 | ||||
| -rw-r--r-- | fs/kernfs/mount.c | 1 |
5 files changed, 18 insertions, 37 deletions
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index 37989f02a226..6acc9648f986 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c | |||
| @@ -201,10 +201,14 @@ static unsigned int kernfs_name_hash(const char *name, const void *ns) | |||
| 201 | static int kernfs_name_compare(unsigned int hash, const char *name, | 201 | static int kernfs_name_compare(unsigned int hash, const char *name, |
| 202 | const void *ns, const struct kernfs_node *kn) | 202 | const void *ns, const struct kernfs_node *kn) |
| 203 | { | 203 | { |
| 204 | if (hash != kn->hash) | 204 | if (hash < kn->hash) |
| 205 | return hash - kn->hash; | 205 | return -1; |
| 206 | if (ns != kn->ns) | 206 | if (hash > kn->hash) |
| 207 | return ns - kn->ns; | 207 | return 1; |
| 208 | if (ns < kn->ns) | ||
| 209 | return -1; | ||
| 210 | if (ns > kn->ns) | ||
| 211 | return 1; | ||
| 208 | return strcmp(name, kn->name); | 212 | return strcmp(name, kn->name); |
| 209 | } | 213 | } |
| 210 | 214 | ||
| @@ -407,8 +411,9 @@ void kernfs_put(struct kernfs_node *kn) | |||
| 407 | 411 | ||
| 408 | if (kernfs_type(kn) == KERNFS_LINK) | 412 | if (kernfs_type(kn) == KERNFS_LINK) |
| 409 | kernfs_put(kn->symlink.target_kn); | 413 | kernfs_put(kn->symlink.target_kn); |
| 410 | if (!(kn->flags & KERNFS_STATIC_NAME)) | 414 | |
| 411 | kfree(kn->name); | 415 | kfree_const(kn->name); |
| 416 | |||
| 412 | if (kn->iattr) { | 417 | if (kn->iattr) { |
| 413 | if (kn->iattr->ia_secdata) | 418 | if (kn->iattr->ia_secdata) |
| 414 | security_release_secctx(kn->iattr->ia_secdata, | 419 | security_release_secctx(kn->iattr->ia_secdata, |
| @@ -502,15 +507,12 @@ static struct kernfs_node *__kernfs_new_node(struct kernfs_root *root, | |||
| 502 | const char *name, umode_t mode, | 507 | const char *name, umode_t mode, |
| 503 | unsigned flags) | 508 | unsigned flags) |
| 504 | { | 509 | { |
| 505 | char *dup_name = NULL; | ||
| 506 | struct kernfs_node *kn; | 510 | struct kernfs_node *kn; |
| 507 | int ret; | 511 | int ret; |
| 508 | 512 | ||
| 509 | if (!(flags & KERNFS_STATIC_NAME)) { | 513 | name = kstrdup_const(name, GFP_KERNEL); |
| 510 | name = dup_name = kstrdup(name, GFP_KERNEL); | 514 | if (!name) |
| 511 | if (!name) | 515 | return NULL; |
| 512 | return NULL; | ||
| 513 | } | ||
| 514 | 516 | ||
| 515 | kn = kmem_cache_zalloc(kernfs_node_cache, GFP_KERNEL); | 517 | kn = kmem_cache_zalloc(kernfs_node_cache, GFP_KERNEL); |
| 516 | if (!kn) | 518 | if (!kn) |
| @@ -534,7 +536,7 @@ static struct kernfs_node *__kernfs_new_node(struct kernfs_root *root, | |||
| 534 | err_out2: | 536 | err_out2: |
| 535 | kmem_cache_free(kernfs_node_cache, kn); | 537 | kmem_cache_free(kernfs_node_cache, kn); |
| 536 | err_out1: | 538 | err_out1: |
| 537 | kfree(dup_name); | 539 | kfree_const(name); |
| 538 | return NULL; | 540 | return NULL; |
| 539 | } | 541 | } |
| 540 | 542 | ||
| @@ -1260,7 +1262,7 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, | |||
| 1260 | /* rename kernfs_node */ | 1262 | /* rename kernfs_node */ |
| 1261 | if (strcmp(kn->name, new_name) != 0) { | 1263 | if (strcmp(kn->name, new_name) != 0) { |
| 1262 | error = -ENOMEM; | 1264 | error = -ENOMEM; |
| 1263 | new_name = kstrdup(new_name, GFP_KERNEL); | 1265 | new_name = kstrdup_const(new_name, GFP_KERNEL); |
| 1264 | if (!new_name) | 1266 | if (!new_name) |
| 1265 | goto out; | 1267 | goto out; |
| 1266 | } else { | 1268 | } else { |
| @@ -1281,9 +1283,7 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, | |||
| 1281 | 1283 | ||
| 1282 | kn->ns = new_ns; | 1284 | kn->ns = new_ns; |
| 1283 | if (new_name) { | 1285 | if (new_name) { |
| 1284 | if (!(kn->flags & KERNFS_STATIC_NAME)) | 1286 | old_name = kn->name; |
| 1285 | old_name = kn->name; | ||
| 1286 | kn->flags &= ~KERNFS_STATIC_NAME; | ||
| 1287 | kn->name = new_name; | 1287 | kn->name = new_name; |
| 1288 | } | 1288 | } |
| 1289 | 1289 | ||
| @@ -1293,7 +1293,7 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, | |||
| 1293 | kernfs_link_sibling(kn); | 1293 | kernfs_link_sibling(kn); |
| 1294 | 1294 | ||
| 1295 | kernfs_put(old_parent); | 1295 | kernfs_put(old_parent); |
| 1296 | kfree(old_name); | 1296 | kfree_const(old_name); |
| 1297 | 1297 | ||
| 1298 | error = 0; | 1298 | error = 0; |
| 1299 | out: | 1299 | out: |
diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c index ddc9f9612f16..b684e8a132e6 100644 --- a/fs/kernfs/file.c +++ b/fs/kernfs/file.c | |||
| @@ -901,7 +901,6 @@ const struct file_operations kernfs_file_fops = { | |||
| 901 | * @ops: kernfs operations for the file | 901 | * @ops: kernfs operations for the file |
| 902 | * @priv: private data for the file | 902 | * @priv: private data for the file |
| 903 | * @ns: optional namespace tag of the file | 903 | * @ns: optional namespace tag of the file |
| 904 | * @name_is_static: don't copy file name | ||
| 905 | * @key: lockdep key for the file's active_ref, %NULL to disable lockdep | 904 | * @key: lockdep key for the file's active_ref, %NULL to disable lockdep |
| 906 | * | 905 | * |
| 907 | * Returns the created node on success, ERR_PTR() value on error. | 906 | * Returns the created node on success, ERR_PTR() value on error. |
| @@ -911,7 +910,6 @@ struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent, | |||
| 911 | umode_t mode, loff_t size, | 910 | umode_t mode, loff_t size, |
| 912 | const struct kernfs_ops *ops, | 911 | const struct kernfs_ops *ops, |
| 913 | void *priv, const void *ns, | 912 | void *priv, const void *ns, |
| 914 | bool name_is_static, | ||
| 915 | struct lock_class_key *key) | 913 | struct lock_class_key *key) |
| 916 | { | 914 | { |
| 917 | struct kernfs_node *kn; | 915 | struct kernfs_node *kn; |
| @@ -919,8 +917,6 @@ struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent, | |||
| 919 | int rc; | 917 | int rc; |
| 920 | 918 | ||
| 921 | flags = KERNFS_FILE; | 919 | flags = KERNFS_FILE; |
| 922 | if (name_is_static) | ||
| 923 | flags |= KERNFS_STATIC_NAME; | ||
| 924 | 920 | ||
| 925 | kn = kernfs_new_node(parent, name, (mode & S_IALLUGO) | S_IFREG, flags); | 921 | kn = kernfs_new_node(parent, name, (mode & S_IALLUGO) | S_IFREG, flags); |
| 926 | if (!kn) | 922 | if (!kn) |
diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 985217626e66..9000874a945b 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c | |||
| @@ -24,12 +24,6 @@ static const struct address_space_operations kernfs_aops = { | |||
| 24 | .write_end = simple_write_end, | 24 | .write_end = simple_write_end, |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | static struct backing_dev_info kernfs_bdi = { | ||
| 28 | .name = "kernfs", | ||
| 29 | .ra_pages = 0, /* No readahead */ | ||
| 30 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, | ||
| 31 | }; | ||
| 32 | |||
| 33 | static const struct inode_operations kernfs_iops = { | 27 | static const struct inode_operations kernfs_iops = { |
| 34 | .permission = kernfs_iop_permission, | 28 | .permission = kernfs_iop_permission, |
| 35 | .setattr = kernfs_iop_setattr, | 29 | .setattr = kernfs_iop_setattr, |
| @@ -40,12 +34,6 @@ static const struct inode_operations kernfs_iops = { | |||
| 40 | .listxattr = kernfs_iop_listxattr, | 34 | .listxattr = kernfs_iop_listxattr, |
| 41 | }; | 35 | }; |
| 42 | 36 | ||
| 43 | void __init kernfs_inode_init(void) | ||
| 44 | { | ||
| 45 | if (bdi_init(&kernfs_bdi)) | ||
| 46 | panic("failed to init kernfs_bdi"); | ||
| 47 | } | ||
| 48 | |||
| 49 | static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) | 37 | static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) |
| 50 | { | 38 | { |
| 51 | static DEFINE_MUTEX(iattr_mutex); | 39 | static DEFINE_MUTEX(iattr_mutex); |
| @@ -298,7 +286,6 @@ static void kernfs_init_inode(struct kernfs_node *kn, struct inode *inode) | |||
| 298 | kernfs_get(kn); | 286 | kernfs_get(kn); |
| 299 | inode->i_private = kn; | 287 | inode->i_private = kn; |
| 300 | inode->i_mapping->a_ops = &kernfs_aops; | 288 | inode->i_mapping->a_ops = &kernfs_aops; |
| 301 | inode->i_mapping->backing_dev_info = &kernfs_bdi; | ||
| 302 | inode->i_op = &kernfs_iops; | 289 | inode->i_op = &kernfs_iops; |
| 303 | 290 | ||
| 304 | set_default_inode_attr(inode, kn->mode); | 291 | set_default_inode_attr(inode, kn->mode); |
diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h index dc84a3ef9ca2..af9fa7499919 100644 --- a/fs/kernfs/kernfs-internal.h +++ b/fs/kernfs/kernfs-internal.h | |||
| @@ -88,7 +88,6 @@ int kernfs_iop_removexattr(struct dentry *dentry, const char *name); | |||
| 88 | ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, | 88 | ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, |
| 89 | size_t size); | 89 | size_t size); |
| 90 | ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size); | 90 | ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size); |
| 91 | void kernfs_inode_init(void); | ||
| 92 | 91 | ||
| 93 | /* | 92 | /* |
| 94 | * dir.c | 93 | * dir.c |
diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c index f973ae9b05f1..8eaf417187f1 100644 --- a/fs/kernfs/mount.c +++ b/fs/kernfs/mount.c | |||
| @@ -246,5 +246,4 @@ void __init kernfs_init(void) | |||
| 246 | kernfs_node_cache = kmem_cache_create("kernfs_node_cache", | 246 | kernfs_node_cache = kmem_cache_create("kernfs_node_cache", |
| 247 | sizeof(struct kernfs_node), | 247 | sizeof(struct kernfs_node), |
| 248 | 0, SLAB_PANIC, NULL); | 248 | 0, SLAB_PANIC, NULL); |
| 249 | kernfs_inode_init(); | ||
| 250 | } | 249 | } |
