@@ -353,6 +353,8 @@ static void ovl_add_layer(struct fs_context *fc, enum ovl_opt layer,
353
353
case Opt_datadir_add :
354
354
ctx -> nr_data ++ ;
355
355
fallthrough ;
356
+ case Opt_lowerdir :
357
+ fallthrough ;
356
358
case Opt_lowerdir_add :
357
359
WARN_ON (ctx -> nr >= ctx -> capacity );
358
360
l = & ctx -> lower [ctx -> nr ++ ];
@@ -365,18 +367,17 @@ static void ovl_add_layer(struct fs_context *fc, enum ovl_opt layer,
365
367
}
366
368
}
367
369
368
- static int ovl_parse_layer (struct fs_context * fc , struct fs_parameter * param ,
369
- enum ovl_opt layer )
370
+ static int ovl_parse_layer (struct fs_context * fc , const char * layer_name , enum ovl_opt layer )
370
371
{
371
- char * name = kstrdup (param -> string , GFP_KERNEL );
372
+ char * name = kstrdup (layer_name , GFP_KERNEL );
372
373
bool upper = (layer == Opt_upperdir || layer == Opt_workdir );
373
374
struct path path ;
374
375
int err ;
375
376
376
377
if (!name )
377
378
return - ENOMEM ;
378
379
379
- if (upper )
380
+ if (upper || layer == Opt_lowerdir )
380
381
err = ovl_mount_dir (name , & path );
381
382
else
382
383
err = ovl_mount_dir_noesc (name , & path );
@@ -432,7 +433,6 @@ static int ovl_parse_param_lowerdir(const char *name, struct fs_context *fc)
432
433
{
433
434
int err ;
434
435
struct ovl_fs_context * ctx = fc -> fs_private ;
435
- struct ovl_fs_context_layer * l ;
436
436
char * dup = NULL , * iter ;
437
437
ssize_t nr_lower , nr ;
438
438
bool data_layer = false;
@@ -449,7 +449,7 @@ static int ovl_parse_param_lowerdir(const char *name, struct fs_context *fc)
449
449
return 0 ;
450
450
451
451
if (* name == ':' ) {
452
- pr_err ("cannot append lower layer" );
452
+ pr_err ("cannot append lower layer\n " );
453
453
return - EINVAL ;
454
454
}
455
455
@@ -472,35 +472,11 @@ static int ovl_parse_param_lowerdir(const char *name, struct fs_context *fc)
472
472
goto out_err ;
473
473
}
474
474
475
- if (nr_lower > ctx -> capacity ) {
476
- err = - ENOMEM ;
477
- l = krealloc_array (ctx -> lower , nr_lower , sizeof (* ctx -> lower ),
478
- GFP_KERNEL_ACCOUNT );
479
- if (!l )
480
- goto out_err ;
481
-
482
- ctx -> lower = l ;
483
- ctx -> capacity = nr_lower ;
484
- }
485
-
486
475
iter = dup ;
487
- l = ctx -> lower ;
488
- for (nr = 0 ; nr < nr_lower ; nr ++ , l ++ ) {
489
- ctx -> nr ++ ;
490
- memset (l , 0 , sizeof (* l ));
491
-
492
- err = ovl_mount_dir (iter , & l -> path );
476
+ for (nr = 0 ; nr < nr_lower ; nr ++ ) {
477
+ err = ovl_parse_layer (fc , iter , Opt_lowerdir );
493
478
if (err )
494
- goto out_put ;
495
-
496
- err = ovl_mount_dir_check (fc , & l -> path , Opt_lowerdir , iter , false);
497
- if (err )
498
- goto out_put ;
499
-
500
- err = - ENOMEM ;
501
- l -> name = kstrdup (iter , GFP_KERNEL_ACCOUNT );
502
- if (!l -> name )
503
- goto out_put ;
479
+ goto out_err ;
504
480
505
481
if (data_layer )
506
482
ctx -> nr_data ++ ;
@@ -517,8 +493,8 @@ static int ovl_parse_param_lowerdir(const char *name, struct fs_context *fc)
517
493
* there are no data layers.
518
494
*/
519
495
if (ctx -> nr_data > 0 ) {
520
- pr_err ("regular lower layers cannot follow data lower layers" );
521
- goto out_put ;
496
+ pr_err ("regular lower layers cannot follow data lower layers\n " );
497
+ goto out_err ;
522
498
}
523
499
524
500
data_layer = false;
@@ -532,9 +508,6 @@ static int ovl_parse_param_lowerdir(const char *name, struct fs_context *fc)
532
508
kfree (dup );
533
509
return 0 ;
534
510
535
- out_put :
536
- ovl_reset_lowerdirs (ctx );
537
-
538
511
out_err :
539
512
kfree (dup );
540
513
@@ -582,7 +555,7 @@ static int ovl_parse_param(struct fs_context *fc, struct fs_parameter *param)
582
555
case Opt_datadir_add :
583
556
case Opt_upperdir :
584
557
case Opt_workdir :
585
- err = ovl_parse_layer (fc , param , opt );
558
+ err = ovl_parse_layer (fc , param -> string , opt );
586
559
break ;
587
560
case Opt_default_permissions :
588
561
config -> default_permissions = true;
0 commit comments