summaryrefslogtreecommitdiffstats
path: root/libmount/src/context_loopdev.c
diff options
context:
space:
mode:
authorKarel Zak2011-09-30 01:38:38 +0200
committerKarel Zak2011-09-30 01:38:38 +0200
commitf0d3ff0a6f3c5b0bd891f7ab6f2bdeb4431b1aa6 (patch)
tree3afe76793dafc5925c0bcb401ee3c67573f528c0 /libmount/src/context_loopdev.c
parentmount: use new lib/loopdev.c code (diff)
downloadkernel-qcow2-util-linux-f0d3ff0a6f3c5b0bd891f7ab6f2bdeb4431b1aa6.tar.gz
kernel-qcow2-util-linux-f0d3ff0a6f3c5b0bd891f7ab6f2bdeb4431b1aa6.tar.xz
kernel-qcow2-util-linux-f0d3ff0a6f3c5b0bd891f7ab6f2bdeb4431b1aa6.zip
libmount: support -o loop=<devname>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libmount/src/context_loopdev.c')
-rw-r--r--libmount/src/context_loopdev.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libmount/src/context_loopdev.c b/libmount/src/context_loopdev.c
index 377dd769e..561ab397d 100644
--- a/libmount/src/context_loopdev.c
+++ b/libmount/src/context_loopdev.c
@@ -65,8 +65,8 @@ int mnt_context_is_loopdev(struct libmnt_context *cxt)
int mnt_context_setup_loopdev(struct libmnt_context *cxt)
{
- const char *backing_file, *optstr;
- char *loopdev = NULL, *val = NULL;
+ const char *backing_file, *optstr, *loopdev = NULL;
+ char *val = NULL;
size_t len;
struct loopdev_cxt lc;
int rc = 0, lo_flags = 0;
@@ -102,6 +102,9 @@ int mnt_context_setup_loopdev(struct libmnt_context *cxt)
val = strndup(val, len);
rc = val ? loopcxt_set_device(&lc, val) : -ENOMEM;
free(val);
+
+ if (rc == 0)
+ loopdev = loopcxt_get_device(&lc);
}
/*
@@ -182,12 +185,14 @@ int mnt_context_setup_loopdev(struct libmnt_context *cxt)
cxt->flags |= MNT_FL_LOOPDEV_READY;
if ((cxt->user_mountflags & MNT_MS_LOOP) &&
- loopcxt_is_autoclear(&lc))
+ loopcxt_is_autoclear(&lc)) {
/*
* autoclear flag accepted by kernel, don't store
* the "loop=" option to mtab.
*/
cxt->user_mountflags &= ~MNT_MS_LOOP;
+ mnt_optstr_remove_option(&cxt->fs->user_optstr, "loop");
+ }
if (!(cxt->mountflags & MS_RDONLY) &&
loopcxt_is_readonly(&lc))