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:
parent
cc3c3fdd29
commit
c570f567eb
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue