aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/sysfs/dir.c')
-rw-r--r--fs/sysfs/dir.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
index aee966c44aac..2e6775a836f2 100644
--- a/fs/sysfs/dir.c
+++ b/fs/sysfs/dir.c
@@ -361,20 +361,20 @@ static struct dentry_operations sysfs_dentry_ops = {
361struct sysfs_dirent *sysfs_new_dirent(const char *name, umode_t mode, int type) 361struct sysfs_dirent *sysfs_new_dirent(const char *name, umode_t mode, int type)
362{ 362{
363 char *dup_name = NULL; 363 char *dup_name = NULL;
364 struct sysfs_dirent *sd = NULL; 364 struct sysfs_dirent *sd;
365 365
366 if (type & SYSFS_COPY_NAME) { 366 if (type & SYSFS_COPY_NAME) {
367 name = dup_name = kstrdup(name, GFP_KERNEL); 367 name = dup_name = kstrdup(name, GFP_KERNEL);
368 if (!name) 368 if (!name)
369 goto err_out; 369 return NULL;
370 } 370 }
371 371
372 sd = kmem_cache_zalloc(sysfs_dir_cachep, GFP_KERNEL); 372 sd = kmem_cache_zalloc(sysfs_dir_cachep, GFP_KERNEL);
373 if (!sd) 373 if (!sd)
374 goto err_out; 374 goto err_out1;
375 375
376 if (sysfs_alloc_ino(&sd->s_ino)) 376 if (sysfs_alloc_ino(&sd->s_ino))
377 goto err_out; 377 goto err_out2;
378 378
379 atomic_set(&sd->s_count, 1); 379 atomic_set(&sd->s_count, 1);
380 atomic_set(&sd->s_active, 0); 380 atomic_set(&sd->s_active, 0);
@@ -386,9 +386,10 @@ struct sysfs_dirent *sysfs_new_dirent(const char *name, umode_t mode, int type)
386 386
387 return sd; 387 return sd;
388 388
389 err_out: 389 err_out2:
390 kfree(dup_name);
391 kmem_cache_free(sysfs_dir_cachep, sd); 390 kmem_cache_free(sysfs_dir_cachep, sd);
391 err_out1:
392 kfree(dup_name);
392 return NULL; 393 return NULL;
393} 394}
394 395