libmount: cleanup high-level mount API

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2011-02-02 21:19:14 +01:00
parent 8fb81f73cf
commit cfb9db3095
6 changed files with 52 additions and 48 deletions

View File

@ -211,8 +211,12 @@ mnt_context_set_source
mnt_context_set_target
mnt_context_set_user_mflags
mnt_context_strerror
mnt_context_mount
mnt_free_context
mnt_new_context
mnt_reset_context
mnt_context_prepare_mount
mnt_context_do_mount
mnt_context_finalize_mount
</SECTION>

View File

@ -409,7 +409,7 @@ int main(int argc, char **argv)
if (lock)
atexit(lock_atexit_cleanup);
rc = mnt_mount_context(cxt);
rc = mnt_context_mount(cxt);
if (rc) {
/* TODO: call mnt_context_strerror() */
rc = EX_FAIL;

View File

@ -1486,7 +1486,7 @@ int mnt_context_get_status(struct libmnt_context *cxt)
* @status: mount(2) return code
*
* This function should be used if [u]mount(2) syscall was NOT called by
* libmount (mnt_mount_context() or mnt_context_do_mount()) only.
* libmount (mnt_context_mount() or mnt_context_do_mount()) only.
*
* Returns: 0 or negative number in case of error.
*/
@ -1586,7 +1586,7 @@ int test_mount(struct libmnt_test *ts, int argc, char *argv[])
if (lock)
atexit(lock_fallback);
rc = mnt_mount_context(cxt);
rc = mnt_context_mount(cxt);
if (rc)
printf("failed to mount %s\n", strerror(errno));
else

View File

@ -496,7 +496,6 @@ int mnt_context_prepare_mount(struct libmnt_context *cxt)
return -EINVAL;
if (!mnt_fs_get_source(cxt->fs) && !mnt_fs_get_target(cxt->fs))
return -EINVAL;
if (cxt->flags & MNT_FL_PREPARED)
return 0;
@ -546,6 +545,7 @@ int mnt_context_do_mount(struct libmnt_context *cxt)
assert(cxt->syscall_status == 1);
assert((cxt->flags & MNT_FL_MOUNTFLAGS_MERGED));
assert((cxt->flags & MNT_FL_PREPARED));
assert((cxt->action == MNT_ACT_MOUNT));
DBG(CXT, mnt_debug_h(cxt, "mount: do mount"));
@ -559,48 +559,6 @@ int mnt_context_do_mount(struct libmnt_context *cxt)
return do_mount_by_pattern(cxt, cxt->fstype_pattern);
}
/**
* mnt_mount_context:
* @cxt: mount context
*
* Mount filesystem by mount(2) or fork()+exec(/sbin/mount.type).
*
* This is top-level function for FS mounting, similar to:
*
* mnt_context_prepare_mount(cxt);
* mnt_context_do_mount(cxt);
* mnt_context_finalize_mount(cxt);
*
* See also mnt_context_disable_helpers().
*
* Returns: 0 on success, and negative number in case of error. WARNING: error
* does not mean that mount(2) syscall or mount.type helper wasn't
* sucessfully called. Check mnt_context_get_status() after error!
*/
int mnt_mount_context(struct libmnt_context *cxt)
{
int rc;
assert(cxt);
assert(cxt->fs);
assert(cxt->helper_exec_status == 1);
assert(cxt->syscall_status == 1);
rc = mnt_context_prepare_mount(cxt);
if (!rc)
rc = mnt_context_prepare_update(cxt);
if (!rc)
rc = mnt_context_do_mount(cxt);
/* TODO: if mtab update is expected then check if the
* target is really mounted read-write to avoid 'ro' in
* mtab and 'rw' in /proc/mounts.
*/
if (!rc)
rc = mnt_context_update_tabs(cxt);
return rc;
}
/**
* mnt_context_finalize_mount:
* @cxt: context
@ -625,3 +583,45 @@ int mnt_context_finalize_mount(struct libmnt_context *cxt)
return rc;
}
/**
* mnt_context_mount:
* @cxt: mount context
*
* High-level, mounts filesystem by mount(2) or fork()+exec(/sbin/mount.type).
*
* This is similar to:
*
* mnt_context_prepare_mount(cxt);
* mnt_context_do_mount(cxt);
* mnt_context_finalize_mount(cxt);
*
* See also mnt_context_disable_helpers().
*
* Returns: 0 on success, and negative number in case of error. WARNING: error
* does not mean that mount(2) syscall or mount.type helper wasn't
* sucessfully called. Check mnt_context_get_status() after error!
*/
int mnt_context_mount(struct libmnt_context *cxt)
{
int rc;
assert(cxt);
assert(cxt->fs);
assert(cxt->helper_exec_status == 1);
assert(cxt->syscall_status == 1);
rc = mnt_context_prepare_mount(cxt);
if (!rc)
rc = mnt_context_prepare_update(cxt);
if (!rc)
rc = mnt_context_do_mount(cxt);
/* TODO: if mtab update is expected then check if the
* target is really mounted read-write to avoid 'ro' in
* mtab and 'rw' in /proc/mounts.
*/
if (!rc)
rc = mnt_context_update_tabs(cxt);
return rc;
}

View File

@ -416,7 +416,7 @@ extern int mnt_context_get_status(struct libmnt_context *cxt);
extern int mnt_context_strerror(struct libmnt_context *cxt, char *buf,
size_t bufsiz);
extern int mnt_mount_context(struct libmnt_context *cxt);
extern int mnt_context_mount(struct libmnt_context *cxt);
extern int mnt_context_prepare_mount(struct libmnt_context *cxt);
extern int mnt_context_do_mount(struct libmnt_context *cxt);

View File

@ -133,7 +133,7 @@ global:
mnt_mangle;
mnt_match_fstype;
mnt_match_options;
mnt_mount_context;
mnt_context_mount;
mnt_new_cache;
mnt_new_context;
mnt_new_fs;