diff options
Diffstat (limited to 'shlibs/mount/src/tab_update.c')
-rw-r--r-- | shlibs/mount/src/tab_update.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/shlibs/mount/src/tab_update.c b/shlibs/mount/src/tab_update.c index 47a3e5fe9..9a56b6738 100644 --- a/shlibs/mount/src/tab_update.c +++ b/shlibs/mount/src/tab_update.c @@ -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; } |