int mnt_context_do_mount(struct libmnt_context *cxt)
{
const char *type;
- int res, rc;
+ int res = 0, rc = 0;
struct libmnt_ns *ns_old;
assert(cxt);
res = do_mount_by_pattern(cxt, cxt->fstype_pattern);
/* after mount stage */
- rc = mnt_context_call_hooks(cxt, MNT_STAGE_MOUNT_POST);
- if (rc)
- return rc;
+ if (res == 0) {
+ rc = mnt_context_call_hooks(cxt, MNT_STAGE_MOUNT_POST);
+ if (rc)
+ return rc;
+ }
if (!mnt_context_switch_ns(cxt, ns_old))
return -MNT_ERR_NAMESPACE;
#define set_syscall_status(_cxt, _name, _x) __extension__ ({ \
if (!(_x)) { \
+ DBG(HOOK, ul_debug("syscall '%s' [%m]", _name)); \
(_cxt)->syscall_status = -errno; \
(_cxt)->syscall_name = (_name); \
- } else \
+ } else { \
+ DBG(HOOK, ul_debug("syscall '%s' [succes]", _name)); \
(_cxt)->syscall_status = 0; \
+ } \
})
if (mnt_optlist_is_recursive(ol))
callflags |= AT_RECURSIVE;
+ if (set & (MOUNT_ATTR_RELATIME | MOUNT_ATTR_NOATIME | MOUNT_ATTR_STRICTATIME))
+ clr |= MOUNT_ATTR__ATIME;
+
DBG(HOOK, ul_debugobj(hs,
"mount_setattr(set=0x%08" PRIx64" clr=0x%08" PRIx64")", set, clr));
attr.attr_set = set;
if (mnt_context_is_fake(cxt))
goto fake;
- DBG(HOOK, ul_debugobj(hs, "fsopen(%s)", type));
+ DBG(HOOK, ul_debugobj(hs, " fsopen(%s)", type));
if (mnt_context_is_fake(cxt))
goto fake;
if (!x)
continue;
- if (opt->ent->mask & MNT_INVERT)
+ if (opt->ent->mask & MNT_INVERT) {
+ DBG(OPTLIST, ul_debugobj(ls, " clr: %s", opt->ent->name));
*clr |= x;
- else
+ } else {
+ DBG(OPTLIST, ul_debugobj(ls, " set: %s", opt->ent->name));
*set |= x;
+ }
}
DBG(OPTLIST, ul_debugobj(ls, "return attrs set=0x%08" PRIx64