• Home
  • History
  • Annotate
  • 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