diff options
Diffstat (limited to 'fs/kernfs/dir.c')
| -rw-r--r-- | fs/kernfs/dir.c | 36 |
1 files changed, 18 insertions, 18 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: |
