return syserror_set(-EINVAL, "Idmapped rootfs currently only supports the \"dir\" storage driver");
}
- if (rootfs->path) {
- if (rootfs->bdev_type) {
- if (strequal(rootfs->bdev_type, "overlay") || strequal(rootfs->bdev_type, "overlayfs"))
- return log_trace_errno(0, EINVAL, "Not pinning on stacking filesystem");
- if (strequal(rootfs->bdev_type, "zfs"))
- return log_trace_errno(0, EINVAL, "Not pinning on ZFS filesystem");
- }
+ if (!rootfs->path)
+ return log_trace(0, "Not pinning because container does not have a rootfs");
- dfd_path = open_at(-EBADF, rootfs->path, PROTECT_OPATH_FILE, 0, 0);
- } else {
- dfd_path = open_at(-EBADF, "/", PROTECT_OPATH_FILE, PROTECT_LOOKUP_ABSOLUTE, 0);
- }
- if (dfd_path < 0)
- return syserror("Failed to open \"%s\"", rootfs->path);
+ if (userns)
+ return log_trace(0, "Not pinning because container runs in user namespace");
- if (!rootfs->path) {
- TRACE("Not pinning because container does not have a rootfs");
- goto out;
- }
+ if (rootfs->bdev_type) {
+ if (strequal(rootfs->bdev_type, "overlay") ||
+ strequal(rootfs->bdev_type, "overlayfs"))
+ return log_trace_errno(0, EINVAL, "Not pinning on stacking filesystem");
- if (userns) {
- TRACE("Not pinning because container runs in user namespace");
- goto out;
+ if (strequal(rootfs->bdev_type, "zfs"))
+ return log_trace_errno(0, EINVAL, "Not pinning on ZFS filesystem");
}
+ dfd_path = open_at(-EBADF, rootfs->path, PROTECT_OPATH_FILE, 0, 0);
+ if (dfd_path < 0)
+ return syserror("Failed to open \"%s\"", rootfs->path);
+
ret = fstat(dfd_path, &st);
if (ret < 0)
return log_trace_errno(-errno, errno, "Failed to retrieve file status");
ret = mkdirat(rootfs->dfd_mnt, "proc" , S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
if (ret < 0 && errno != EEXIST)
return syserror("Failed to create procfs mountpoint under %d", rootfs->dfd_mnt);
+
+ TRACE("Created procfs mountpoint under %d", rootfs->dfd_mnt);
}
if (flags & LXC_AUTO_SYS_MASK) {
ret = mkdirat(rootfs->dfd_mnt, "sys" , S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
if (ret < 0 && errno != EEXIST)
return syserror("Failed to create sysfs mountpoint under %d", rootfs->dfd_mnt);
+
+ TRACE("Created sysfs mountpoint under %d", rootfs->dfd_mnt);
}
has_cap_net_admin = lxc_wants_cap(CAP_NET_ADMIN, conf);
goto reset_umask;
}
-
/* If we are running on a devtmpfs mapping, dev/pts may already exist.
* If not, then create it and exit if that fails...
*/
if (rootfs->dfd_mnt < 0)
return -errno;
- return 0;
+ return log_trace(0, "Container doesn't use separate rootfs. Opened host's rootfs");
}
ret = access(rootfs->mount, F_OK);
if (rootfs->dfd_mnt < 0)
return -errno;
- return 0;
+ return log_trace(0, "Container uses separate rootfs. Opened container's rootfs");
}
static int lxc_chroot(const struct lxc_rootfs *rootfs)