• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 
3 #include <dirent.h>
4 #include <errno.h>
5 #include <sys/mount.h>
6 
7 #define TST_NO_DEFAULT_MAIN
8 #include "tst_test.h"
9 #include "tst_fs.h"
10 
11 #define TST_FS_SETUP_OVERLAYFS_MSG "overlayfs is not configured in this kernel"
12 #define TST_FS_SETUP_OVERLAYFS_CONFIG "lowerdir="OVL_LOWER",upperdir="OVL_UPPER",workdir="OVL_WORK
13 
create_overlay_dirs(void)14 void create_overlay_dirs(void)
15 {
16 	DIR *dir = opendir(OVL_LOWER);
17 	if (dir == NULL) {
18 		SAFE_MKDIR(OVL_LOWER, 0755);
19 		SAFE_MKDIR(OVL_UPPER, 0755);
20 		SAFE_MKDIR(OVL_WORK, 0755);
21 		SAFE_MKDIR(OVL_MNT, 0755);
22 		return;
23 	}
24 	closedir(dir);
25 }
26 
mount_overlay(const char * file,const int lineno,int skip)27 int mount_overlay(const char *file, const int lineno, int skip)
28 {
29 	int ret;
30 
31 	create_overlay_dirs();
32 	ret = mount("overlay", OVL_MNT, "overlay", 0,
33 				TST_FS_SETUP_OVERLAYFS_CONFIG);
34 	if (ret == 0)
35 		return 0;
36 
37 	if (errno == ENODEV) {
38 		if (skip) {
39 			tst_brk(TCONF, "%s:%d: " TST_FS_SETUP_OVERLAYFS_MSG,
40 				file, lineno);
41 		} else {
42 			tst_res(TINFO, "%s:%d: " TST_FS_SETUP_OVERLAYFS_MSG,
43 				file, lineno);
44 		}
45 	} else {
46 		tst_brk(TBROK | TERRNO, "overlayfs mount failed");
47 	}
48 	return ret;
49 }
50