libmount: create a default lock for mtab update

Now it's necessary to explicitly create a lock for mnt_update_table().
It seems better to create the lock in mnt_update_table() by default to
skip this extra step.

Reported-by: Jan Engelhardt <jengelh@medozas.de>
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2011-03-28 12:40:24 +02:00
parent cc3c3fdd29
commit c570f567eb
1 changed files with 10 additions and 1 deletions

View File

@ -85,7 +85,8 @@ void mnt_free_update(struct libmnt_update *upd)
/*
* Returns 0 on success, 1 if not file available, -1 in case of error.
*/
int mnt_update_set_filename(struct libmnt_update *upd, const char *filename, int userspace_only)
int mnt_update_set_filename(struct libmnt_update *upd, const char *filename,
int userspace_only)
{
const char *path = NULL;
int rw = 0;
@ -785,6 +786,7 @@ static int update_modify_options(struct libmnt_update *upd, struct libmnt_lock *
*/
int mnt_update_table(struct libmnt_update *upd, struct libmnt_lock *lc)
{
struct libmnt_lock *lc0 = lc;
int rc = -EINVAL;
assert(upd);
@ -799,6 +801,9 @@ int mnt_update_table(struct libmnt_update *upd, struct libmnt_lock *lc)
DBG(UPDATE, mnt_fs_print_debug(upd->fs, stderr));
}
if (!lc && !upd->userspace_only)
lc = mnt_new_lock(upd->filename, 0);
if (!upd->fs && upd->target)
rc = update_remove_entry(upd, lc); /* umount */
else if (upd->mountflags & MS_MOVE)
@ -811,6 +816,10 @@ int mnt_update_table(struct libmnt_update *upd, struct libmnt_lock *lc)
upd->ready = FALSE;
DBG(UPDATE, mnt_debug_h(upd, "%s: update tab: done [rc=%d]",
upd->filename, rc));
if (lc != lc0)
mnt_free_lock(lc);
return rc;
}