Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
10bc1861
Unverified
Commit
10bc1861
authored
Jul 29, 2017
by
Christian Brauner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tree-wide: struct bdev -> struct lxc_storage
Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
28d832c4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
348 additions
and
390 deletions
+348
-390
conf.c
src/lxc/conf.c
+3
-3
lxccontainer.c
src/lxc/lxccontainer.c
+42
-41
start.c
src/lxc/start.c
+5
-3
aufs.c
src/lxc/storage/aufs.c
+9
-8
aufs.h
src/lxc/storage/aufs.h
+11
-18
btrfs.c
src/lxc/storage/btrfs.c
+13
-13
btrfs.h
src/lxc/storage/btrfs.h
+28
-36
dir.c
src/lxc/storage/dir.c
+11
-11
dir.h
src/lxc/storage/dir.h
+11
-16
loop.c
src/lxc/storage/loop.c
+9
-8
loop.h
src/lxc/storage/loop.h
+11
-16
lvm.c
src/lxc/storage/lvm.c
+13
-12
lvm.h
src/lxc/storage/lvm.h
+19
-24
nbd.c
src/lxc/storage/nbd.c
+10
-9
nbd.h
src/lxc/storage/nbd.h
+15
-21
overlay.c
src/lxc/storage/overlay.c
+8
-8
overlay.h
src/lxc/storage/overlay.h
+23
-32
rbd.c
src/lxc/storage/rbd.c
+9
-8
rbd.h
src/lxc/storage/rbd.h
+11
-16
rsync.c
src/lxc/storage/rsync.c
+3
-4
rsync.h
src/lxc/storage/rsync.h
+2
-2
storage.c
src/lxc/storage/storage.c
+0
-0
storage.h
src/lxc/storage/storage.h
+41
-41
storage_utils.c
src/lxc/storage/storage_utils.c
+9
-9
storage_utils.h
src/lxc/storage/storage_utils.h
+8
-8
zfs.c
src/lxc/storage/zfs.c
+13
-12
zfs.h
src/lxc/storage/zfs.h
+10
-10
lxc_create.c
src/lxc/tools/lxc_create.c
+1
-1
No files found.
src/lxc/conf.c
View file @
10bc1861
...
...
@@ -1171,7 +1171,7 @@ static int lxc_fill_autodev(const struct lxc_rootfs *rootfs)
static
int
lxc_setup_rootfs
(
struct
lxc_conf
*
conf
)
{
int
ret
;
struct
bdev
*
bdev
;
struct
lxc_storage
*
bdev
;
const
struct
lxc_rootfs
*
rootfs
;
rootfs
=
&
conf
->
rootfs
;
...
...
@@ -1189,7 +1189,7 @@ static int lxc_setup_rootfs(struct lxc_conf *conf)
return
-
1
;
}
bdev
=
bdev
_init
(
conf
,
rootfs
->
path
,
rootfs
->
mount
,
rootfs
->
options
);
bdev
=
storage
_init
(
conf
,
rootfs
->
path
,
rootfs
->
mount
,
rootfs
->
options
);
if
(
!
bdev
)
{
ERROR
(
"Failed to mount rootfs
\"
%s
\"
onto
\"
%s
\"
with options
\"
%s
\"
."
,
rootfs
->
path
,
rootfs
->
mount
,
...
...
@@ -1198,7 +1198,7 @@ static int lxc_setup_rootfs(struct lxc_conf *conf)
}
ret
=
bdev
->
ops
->
mount
(
bdev
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
if
(
ret
<
0
)
{
ERROR
(
"Failed to mount rootfs
\"
%s
\"
onto
\"
%s
\"
with options
\"
%s
\"
."
,
rootfs
->
path
,
rootfs
->
mount
,
...
...
src/lxc/lxccontainer.c
View file @
10bc1861
...
...
@@ -1154,16 +1154,16 @@ static bool create_container_dir(struct lxc_container *c)
return
ret
==
0
;
}
/*
* do_bdev_create: thin wrapper around bdev_create(). Like bdev_create(),
* it returns a mounted bdev on success, NULL on error.
/* do_storage_create: thin wrapper around storage_create(). Like
* storage_create(), it returns a mounted bdev on success, NULL on error.
*/
static
struct
bdev
*
do_bdev_create
(
struct
lxc_container
*
c
,
const
char
*
type
,
struct
bdev_specs
*
specs
)
static
struct
lxc_storage
*
do_storage_create
(
struct
lxc_container
*
c
,
const
char
*
type
,
struct
bdev_specs
*
specs
)
{
char
*
dest
;
size_t
len
;
struct
bdev
*
bdev
;
struct
lxc_storage
*
bdev
;
int
ret
;
/* rootfs.path or lxcpath/lxcname/rootfs */
...
...
@@ -1181,7 +1181,7 @@ static struct bdev *do_bdev_create(struct lxc_container *c, const char *type,
if
(
ret
<
0
||
ret
>=
len
)
return
NULL
;
bdev
=
bdev
_create
(
dest
,
type
,
c
->
name
,
specs
);
bdev
=
storage
_create
(
dest
,
type
,
c
->
name
,
specs
);
if
(
!
bdev
)
{
ERROR
(
"Failed to create backing store type %s"
,
type
);
return
NULL
;
...
...
@@ -1200,7 +1200,7 @@ static struct bdev *do_bdev_create(struct lxc_container *c, const char *type,
if
(
chown_mapped_root
(
bdev
->
dest
,
c
->
lxc_conf
)
<
0
)
{
ERROR
(
"Error chowning %s to container root"
,
bdev
->
dest
);
suggest_default_idmap
();
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
return
NULL
;
}
}
...
...
@@ -1232,7 +1232,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, bool need_
if
(
pid
==
0
)
{
// child
char
*
patharg
,
*
namearg
,
*
rootfsarg
;
struct
bdev
*
bdev
=
NULL
;
struct
lxc_storage
*
bdev
=
NULL
;
int
i
;
int
ret
,
len
,
nargs
=
0
;
char
**
newargv
;
...
...
@@ -1242,7 +1242,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, bool need_
exit
(
1
);
}
bdev
=
bdev
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
bdev
=
storage
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
if
(
!
bdev
)
{
ERROR
(
"Error opening rootfs"
);
exit
(
1
);
...
...
@@ -1694,12 +1694,13 @@ static bool do_lxcapi_create(struct lxc_container *c, const char *t,
}
if
(
pid
==
0
)
{
// child
struct
bdev
*
bdev
=
NULL
;
struct
lxc_storage
*
bdev
=
NULL
;
if
(
!
(
bdev
=
do_bdev_create
(
c
,
bdevtype
,
specs
)))
{
bdev
=
do_storage_create
(
c
,
bdevtype
,
specs
);
if
(
!
bdev
)
{
ERROR
(
"Error creating backing store type %s for %s"
,
bdevtype
?
bdevtype
:
"(none)"
,
c
->
name
);
exit
(
1
);
exit
(
EXIT_FAILURE
);
}
/* save config file again to store the new rootfs location */
...
...
@@ -1708,9 +1709,9 @@ static bool do_lxcapi_create(struct lxc_container *c, const char *t,
// parent task won't see bdev in config so we delete it
bdev
->
ops
->
umount
(
bdev
);
bdev
->
ops
->
destroy
(
bdev
);
exit
(
1
);
exit
(
EXIT_FAILURE
);
}
exit
(
0
);
exit
(
EXIT_SUCCESS
);
}
if
(
wait_for_pid
(
pid
)
!=
0
)
goto
out_unlock
;
...
...
@@ -2565,12 +2566,12 @@ static bool has_snapshots(struct lxc_container *c)
static
bool
do_destroy_container
(
struct
lxc_conf
*
conf
)
{
if
(
am_unpriv
())
{
if
(
userns_exec_1
(
conf
,
bdev
_destroy_wrapper
,
conf
,
"
bdev
_destroy_wrapper"
)
<
0
)
if
(
userns_exec_1
(
conf
,
storage
_destroy_wrapper
,
conf
,
"
storage
_destroy_wrapper"
)
<
0
)
return
false
;
return
true
;
}
return
bdev
_destroy
(
conf
);
return
storage
_destroy
(
conf
);
}
static
int
lxc_rmdir_onedev_wrapper
(
void
*
data
)
...
...
@@ -3114,14 +3115,14 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c,
const
char
*
newtype
,
int
flags
,
const
char
*
bdevdata
,
uint64_t
newsize
)
{
struct
bdev
*
bdev
;
struct
lxc_storage
*
bdev
;
int
need_rdep
;
if
(
should_default_to_snapshot
(
c0
,
c
))
flags
|=
LXC_CLONE_SNAPSHOT
;
bdev
=
bdev_copy
(
c0
,
c
->
name
,
c
->
config_path
,
newtype
,
flags
,
bdevdata
,
newsize
,
&
need_rdep
);
bdev
=
storage_copy
(
c0
,
c
->
name
,
c
->
config_path
,
newtype
,
flags
,
bdevdata
,
newsize
,
&
need_rdep
);
if
(
!
bdev
)
{
ERROR
(
"Error copying storage."
);
return
-
1
;
...
...
@@ -3130,7 +3131,7 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c,
/* Set new rootfs. */
free
(
c
->
lxc_conf
->
rootfs
.
path
);
c
->
lxc_conf
->
rootfs
.
path
=
strdup
(
bdev
->
src
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
if
(
!
c
->
lxc_conf
->
rootfs
.
path
)
{
ERROR
(
"Out of memory while setting storage path."
);
...
...
@@ -3183,7 +3184,7 @@ static int clone_update_rootfs(struct clone_update_data *data)
char
**
hookargs
=
data
->
hookargs
;
int
ret
=
-
1
;
char
path
[
MAXPATHLEN
];
struct
bdev
*
bdev
;
struct
lxc_storage
*
bdev
;
FILE
*
fout
;
struct
lxc_conf
*
conf
=
c
->
lxc_conf
;
...
...
@@ -3203,13 +3204,13 @@ static int clone_update_rootfs(struct clone_update_data *data)
if
(
unshare
(
CLONE_NEWNS
)
<
0
)
return
-
1
;
bdev
=
bdev
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
bdev
=
storage
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
if
(
!
bdev
)
return
-
1
;
if
(
strcmp
(
bdev
->
type
,
"dir"
)
!=
0
)
{
if
(
unshare
(
CLONE_NEWNS
)
<
0
)
{
ERROR
(
"error unsharing mounts"
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
return
-
1
;
}
if
(
detect_shared_rootfs
())
{
...
...
@@ -3219,7 +3220,7 @@ static int clone_update_rootfs(struct clone_update_data *data)
}
}
if
(
bdev
->
ops
->
mount
(
bdev
)
<
0
)
{
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
return
-
1
;
}
}
else
{
// TODO come up with a better way
...
...
@@ -3247,14 +3248,14 @@ static int clone_update_rootfs(struct clone_update_data *data)
if
(
run_lxc_hooks
(
c
->
name
,
"clone"
,
conf
,
c
->
get_config_path
(
c
),
hookargs
))
{
ERROR
(
"Error executing clone hook for %s"
,
c
->
name
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
return
-
1
;
}
}
if
(
!
(
flags
&
LXC_CLONE_KEEPNAME
))
{
ret
=
snprintf
(
path
,
MAXPATHLEN
,
"%s/etc/hostname"
,
bdev
->
dest
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
if
(
ret
<
0
||
ret
>=
MAXPATHLEN
)
return
-
1
;
...
...
@@ -3270,9 +3271,9 @@ static int clone_update_rootfs(struct clone_update_data *data)
}
if
(
fclose
(
fout
)
<
0
)
return
-
1
;
}
else
{
storage_put
(
bdev
);
}
else
bdev_put
(
bdev
);
return
0
;
}
...
...
@@ -3512,7 +3513,7 @@ static struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *n
static
bool
do_lxcapi_rename
(
struct
lxc_container
*
c
,
const
char
*
newname
)
{
struct
bdev
*
bdev
;
struct
lxc_storage
*
bdev
;
struct
lxc_container
*
newc
;
if
(
!
c
||
!
c
->
name
||
!
c
->
config_path
||
!
c
->
lxc_conf
)
...
...
@@ -3522,14 +3523,14 @@ static bool do_lxcapi_rename(struct lxc_container *c, const char *newname)
ERROR
(
"Renaming a container with snapshots is not supported"
);
return
false
;
}
bdev
=
bdev
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
bdev
=
storage
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
if
(
!
bdev
)
{
ERROR
(
"Failed to find original backing store type"
);
return
false
;
}
newc
=
lxcapi_clone
(
c
,
newname
,
c
->
config_path
,
LXC_CLONE_KEEPMACADDR
,
NULL
,
bdev
->
type
,
0
,
NULL
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
if
(
!
newc
)
{
lxc_container_put
(
newc
);
return
false
;
...
...
@@ -3641,7 +3642,7 @@ static int do_lxcapi_snapshot(struct lxc_container *c, const char *commentfile)
if
(
!
c
||
!
lxcapi_is_defined
(
c
))
return
-
1
;
if
(
!
bdev
_can_backup
(
c
->
lxc_conf
))
{
if
(
!
storage
_can_backup
(
c
->
lxc_conf
))
{
ERROR
(
"%s's backing store cannot be backed up."
,
c
->
name
);
ERROR
(
"Your container must use another backing store type."
);
return
-
1
;
...
...
@@ -3667,7 +3668,7 @@ static int do_lxcapi_snapshot(struct lxc_container *c, const char *commentfile)
*/
flags
=
LXC_CLONE_SNAPSHOT
|
LXC_CLONE_KEEPMACADDR
|
LXC_CLONE_KEEPNAME
|
LXC_CLONE_KEEPBDEVTYPE
|
LXC_CLONE_MAYBE_SNAPSHOT
;
if
(
bdev
_is_dir
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
))
{
if
(
storage
_is_dir
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
))
{
ERROR
(
"Snapshot of directory-backed container requested."
);
ERROR
(
"Making a copy-clone. If you do want snapshots, then"
);
ERROR
(
"please create an aufs or overlay clone first, snapshot that"
);
...
...
@@ -3861,7 +3862,7 @@ static bool do_lxcapi_snapshot_restore(struct lxc_container *c, const char *snap
char
clonelxcpath
[
MAXPATHLEN
];
int
flags
=
0
;
struct
lxc_container
*
snap
,
*
rest
;
struct
bdev
*
bdev
;
struct
lxc_storage
*
bdev
;
bool
b
=
false
;
if
(
!
c
||
!
c
->
name
||
!
c
->
config_path
)
...
...
@@ -3872,7 +3873,7 @@ static bool do_lxcapi_snapshot_restore(struct lxc_container *c, const char *snap
return
false
;
}
bdev
=
bdev
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
bdev
=
storage
_init
(
c
->
lxc_conf
,
c
->
lxc_conf
->
rootfs
.
path
,
c
->
lxc_conf
->
rootfs
.
mount
,
NULL
);
if
(
!
bdev
)
{
ERROR
(
"Failed to find original backing store type"
);
return
false
;
...
...
@@ -3882,7 +3883,7 @@ static bool do_lxcapi_snapshot_restore(struct lxc_container *c, const char *snap
newname
=
c
->
name
;
if
(
!
get_snappath_dir
(
c
,
clonelxcpath
))
{
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
return
false
;
}
// how should we lock this?
...
...
@@ -3891,7 +3892,7 @@ static bool do_lxcapi_snapshot_restore(struct lxc_container *c, const char *snap
if
(
!
snap
||
!
lxcapi_is_defined
(
snap
))
{
ERROR
(
"Could not open snapshot %s"
,
snapname
);
if
(
snap
)
lxc_container_put
(
snap
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
return
false
;
}
...
...
@@ -3899,7 +3900,7 @@ static bool do_lxcapi_snapshot_restore(struct lxc_container *c, const char *snap
if
(
!
container_destroy
(
c
))
{
ERROR
(
"Could not destroy existing container %s"
,
newname
);
lxc_container_put
(
snap
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
return
false
;
}
}
...
...
@@ -3908,7 +3909,7 @@ static bool do_lxcapi_snapshot_restore(struct lxc_container *c, const char *snap
flags
=
LXC_CLONE_SNAPSHOT
|
LXC_CLONE_MAYBE_SNAPSHOT
;
rest
=
lxcapi_clone
(
snap
,
newname
,
c
->
config_path
,
flags
,
bdev
->
type
,
NULL
,
0
,
NULL
);
bdev
_put
(
bdev
);
storage
_put
(
bdev
);
if
(
rest
&&
lxcapi_is_defined
(
rest
))
b
=
true
;
if
(
rest
)
...
...
src/lxc/start.c
View file @
10bc1861
...
...
@@ -1767,10 +1767,12 @@ static int lxc_rmdir_onedev_wrapper(void *data)
static
bool
do_destroy_container
(
struct
lxc_conf
*
conf
)
{
if
(
am_unpriv
())
{
if
(
userns_exec_1
(
conf
,
bdev
_destroy_wrapper
,
conf
,
"
bdev
_destroy_wrapper"
)
<
0
)
if
(
userns_exec_1
(
conf
,
storage
_destroy_wrapper
,
conf
,
"
storage
_destroy_wrapper"
)
<
0
)
return
false
;
return
true
;
}
return
bdev_destroy
(
conf
);
return
storage_destroy
(
conf
);
}
src/lxc/storage/aufs.c
View file @
10bc1861
...
...
@@ -34,15 +34,16 @@
#include "storage.h"
#include "utils.h"
lxc_log_define
(
lxc
aufs
,
lxc
);
lxc_log_define
(
aufs
,
lxc
);
/* the bulk of this needs to become a common helper */
extern
char
*
dir_new_path
(
char
*
src
,
const
char
*
oldname
,
const
char
*
name
,
const
char
*
oldpath
,
const
char
*
lxcpath
);
int
aufs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
aufs_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
if
(
!
snap
)
{
ERROR
(
"aufs is only for snapshot clones"
);
...
...
@@ -172,7 +173,7 @@ int aufs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
* changes after starting the container are written to
* $lxcpath/$lxcname/delta0
*/
int
aufs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
aufs_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
char
*
delta
;
...
...
@@ -214,7 +215,7 @@ int aufs_create(struct bdev *bdev, const char *dest, const char *n,
return
0
;
}
int
aufs_destroy
(
struct
bdev
*
orig
)
int
aufs_destroy
(
struct
lxc_storage
*
orig
)
{
char
*
upper
;
...
...
@@ -235,7 +236,7 @@ bool aufs_detect(const char *path)
return
false
;
}
int
aufs_mount
(
struct
bdev
*
bdev
)
int
aufs_mount
(
struct
lxc_storage
*
bdev
)
{
char
*
tmp
,
*
options
,
*
dup
,
*
lower
,
*
upper
;
int
len
;
...
...
@@ -307,7 +308,7 @@ int aufs_mount(struct bdev *bdev)
return
ret
;
}
int
aufs_umount
(
struct
bdev
*
bdev
)
int
aufs_umount
(
struct
lxc_storage
*
bdev
)
{
if
(
strcmp
(
bdev
->
type
,
"aufs"
))
return
-
22
;
...
...
src/lxc/storage/aufs.h
View file @
10bc1861
...
...
@@ -34,34 +34,27 @@
#include <mntent.h>
#endif
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
/* defined in conf.h */
struct
lxc_rootfs
;
/*
* Functions associated with an aufs bdev struct.
*/
int
aufs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
aufs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
aufs_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
aufs_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
int
aufs_destroy
(
struct
bdev
*
orig
);
int
aufs_destroy
(
struct
lxc_storage
*
orig
);
bool
aufs_detect
(
const
char
*
path
);
int
aufs_mount
(
struct
bdev
*
bdev
);
int
aufs_umount
(
struct
bdev
*
bdev
);
int
aufs_mount
(
struct
lxc_storage
*
bdev
);
int
aufs_umount
(
struct
lxc_storage
*
bdev
);
/*
* Get rootfs path for aufs backed containers. Allocated memory must be freed
* by caller.
/* Get rootfs path for aufs backed containers. Allocated memory must be freed by
* caller.
*/
char
*
aufs_get_rootfs
(
const
char
*
rootfs_path
,
size_t
*
rootfslen
);
...
...
src/lxc/storage/btrfs.c
View file @
10bc1861
...
...
@@ -42,7 +42,7 @@
#include "storage.h"
#include "utils.h"
lxc_log_define
(
lxc
btrfs
,
lxc
);
lxc_log_define
(
btrfs
,
lxc
);
/*
* Return the full path of objid under dirid. Let's say dirid is
...
...
@@ -188,7 +188,7 @@ bool btrfs_detect(const char *path)
return
false
;
}
int
btrfs_mount
(
struct
bdev
*
bdev
)
int
btrfs_mount
(
struct
lxc_storage
*
bdev
)
{
unsigned
long
mntflags
;
char
*
mntdata
,
*
src
;
...
...
@@ -212,7 +212,7 @@ int btrfs_mount(struct bdev *bdev)
return
ret
;
}
int
btrfs_umount
(
struct
bdev
*
bdev
)
int
btrfs_umount
(
struct
lxc_storage
*
bdev
)
{
if
(
strcmp
(
bdev
->
type
,
"btrfs"
))
return
-
22
;
...
...
@@ -371,10 +371,10 @@ int btrfs_snapshot_wrapper(void *data)
return
btrfs_snapshot
(
src
,
arg
->
dest
);
}
int
btrfs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
btrfs_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
char
*
src
;
...
...
@@ -417,8 +417,8 @@ int btrfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
return
0
;
}
bool
btrfs_create_clone
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
)
bool
btrfs_create_clone
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
)
{
int
ret
;
struct
rsync_data
data
=
{
0
,
0
};
...
...
@@ -460,8 +460,8 @@ bool btrfs_create_clone(struct lxc_conf *conf, struct bdev *orig,
return
true
;
}
bool
btrfs_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
)
bool
btrfs_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
)
{
int
ret
;
...
...
@@ -823,7 +823,7 @@ bool btrfs_try_remove_subvol(const char *path)
return
btrfs_recursive_destroy
(
path
)
==
0
;
}
int
btrfs_destroy
(
struct
bdev
*
orig
)
int
btrfs_destroy
(
struct
lxc_storage
*
orig
)
{
char
*
src
;
...
...
@@ -832,7 +832,7 @@ int btrfs_destroy(struct bdev *orig)
return
btrfs_recursive_destroy
(
src
);
}
int
btrfs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
btrfs_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
int
ret
;
...
...
src/lxc/storage/btrfs.h
View file @
10bc1861
...
...
@@ -366,13 +366,10 @@ BTRFS_SETGET_STACK_FUNCS(stack_root_ref_sequence, struct btrfs_root_ref, sequenc
/* defined as btrfs_stack_root_ref_name_len */
BTRFS_SETGET_STACK_FUNCS
(
stack_root_ref_name_len
,
struct
btrfs_root_ref
,
name_len
,
16
);
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
struct
mytree_node
{
...
...
@@ -387,35 +384,30 @@ struct my_btrfs_tree {
int
num
;
};
/*
* Functions associated with a btrfs bdev struct.
*/
int
btrfs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
btrfs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
int
btrfs_destroy
(
struct
bdev
*
orig
);
bool
btrfs_detect
(
const
char
*
path
);
int
btrfs_mount
(
struct
bdev
*
bdev
);
int
btrfs_umount
(
struct
bdev
*
bdev
);
/*
* Helper functions
*/
char
*
get_btrfs_subvol_path
(
int
fd
,
u64
dir_id
,
u64
objid
,
char
*
name
,
int
name_len
);
int
btrfs_list_get_path_rootid
(
int
fd
,
u64
*
treeid
);
bool
is_btrfs_fs
(
const
char
*
path
);
int
is_btrfs_subvol
(
const
char
*
path
);
bool
btrfs_try_remove_subvol
(
const
char
*
path
);
int
btrfs_same_fs
(
const
char
*
orig
,
const
char
*
new
);
int
btrfs_snapshot
(
const
char
*
orig
,
const
char
*
new
);
int
btrfs_snapshot_wrapper
(
void
*
data
);
bool
btrfs_create_clone
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
bool
btrfs_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
#endif // __LXC_BTRFS_H
extern
int
btrfs_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
btrfs_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
int
btrfs_destroy
(
struct
lxc_storage
*
orig
);
extern
bool
btrfs_detect
(
const
char
*
path
);
extern
int
btrfs_mount
(
struct
lxc_storage
*
bdev
);
extern
int
btrfs_umount
(
struct
lxc_storage
*
bdev
);
extern
char
*
get_btrfs_subvol_path
(
int
fd
,
u64
dir_id
,
u64
objid
,
char
*
name
,
int
name_len
);
extern
int
btrfs_list_get_path_rootid
(
int
fd
,
u64
*
treeid
);
extern
bool
is_btrfs_fs
(
const
char
*
path
);
extern
int
is_btrfs_subvol
(
const
char
*
path
);
extern
bool
btrfs_try_remove_subvol
(
const
char
*
path
);
extern
int
btrfs_same_fs
(
const
char
*
orig
,
const
char
*
new
);
extern
int
btrfs_snapshot
(
const
char
*
orig
,
const
char
*
new
);
extern
int
btrfs_snapshot_wrapper
(
void
*
data
);
extern
bool
btrfs_create_clone
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
extern
bool
btrfs_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
#endif
/* __LXC_BTRFS_H */
src/lxc/storage/dir.c
View file @
10bc1861
...
...
@@ -29,15 +29,15 @@
#include "storage.h"
#include "utils.h"
lxc_log_define
(
lxc
dir
,
lxc
);
lxc_log_define
(
dir
,
lxc
);
/*
* for a simple directory bind mount, we substitute the old container
* name and paths for the new
/* For a simple directory bind mount, we substitute the old container name and
* paths for the new.
*/
int
dir_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
dir_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
char
*
src_no_prefix
;
int
ret
;
...
...
@@ -75,7 +75,7 @@ int dir_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
return
0
;
}
int
dir_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
dir_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
int
ret
;
...
...
@@ -118,7 +118,7 @@ int dir_create(struct bdev *bdev, const char *dest, const char *n,
return
0
;
}
int
dir_destroy
(
struct
bdev
*
orig
)
int
dir_destroy
(
struct
lxc_storage
*
orig
)
{
int
ret
;
char
*
src
;
...
...
@@ -145,7 +145,7 @@ bool dir_detect(const char *path)
return
false
;
}
int
dir_mount
(
struct
bdev
*
bdev
)
int
dir_mount
(
struct
lxc_storage
*
bdev
)
{
int
ret
;
unsigned
long
mflags
,
mntflags
;
...
...
@@ -186,7 +186,7 @@ int dir_mount(struct bdev *bdev)
return
ret
;
}
int
dir_umount
(
struct
bdev
*
bdev
)
int
dir_umount
(
struct
lxc_storage
*
bdev
)
{
if
(
strcmp
(
bdev
->
type
,
"dir"
))
return
-
22
;
...
...
src/lxc/storage/dir.h
View file @
10bc1861
...
...
@@ -28,26 +28,21 @@
#include <stdbool.h>
#include <stdint.h>
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
/*
* Functions associated with a dir bdev struct.
*/
int
dir_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
dir_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
int
dir_destroy
(
struct
bdev
*
orig
);
bool
dir_detect
(
const
char
*
path
);
int
dir_mount
(
struct
bdev
*
bdev
);
int
dir_umount
(
struct
bdev
*
bdev
);
extern
int
dir_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
dir_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
int
dir_destroy
(
struct
lxc_storage
*
orig
);
extern
bool
dir_detect
(
const
char
*
path
);
extern
int
dir_mount
(
struct
lxc_storage
*
bdev
);
extern
int
dir_umount
(
struct
lxc_storage
*
bdev
);
#endif
/* __LXC_DIR_H */
src/lxc/storage/loop.c
View file @
10bc1861
...
...
@@ -40,7 +40,7 @@
#include "storage_utils.h"
#include "utils.h"
lxc_log_define
(
l
xcl
oop
,
lxc
);
lxc_log_define
(
loop
,
lxc
);
static
int
do_loop_create
(
const
char
*
path
,
uint64_t
size
,
const
char
*
fstype
);
...
...
@@ -48,9 +48,10 @@ static int do_loop_create(const char *path, uint64_t size, const char *fstype);
* No idea what the original blockdev will be called, but the copy will be
* called $lxcpath/$lxcname/rootdev
*/
int
loop_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
loop_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
uint64_t
size
=
newsize
;
int
len
,
ret
;
...
...
@@ -129,7 +130,7 @@ int loop_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
return
0
;
}
int
loop_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
loop_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
const
char
*
fstype
;
...
...
@@ -202,7 +203,7 @@ int loop_create(struct bdev *bdev, const char *dest, const char *n,
return
0
;
}
int
loop_destroy
(
struct
bdev
*
orig
)
{
int
loop_destroy
(
struct
lxc_storage
*
orig
)
{
return
unlink
(
orig
->
src
+
5
);
}
...
...
@@ -224,7 +225,7 @@ bool loop_detect(const char *path)
return
false
;
}
int
loop_mount
(
struct
bdev
*
bdev
)
int
loop_mount
(
struct
lxc_storage
*
bdev
)
{
int
ret
,
loopfd
;
char
loname
[
MAXPATHLEN
];
...
...
@@ -261,7 +262,7 @@ int loop_mount(struct bdev *bdev)
return
0
;
}
int
loop_umount
(
struct
bdev
*
bdev
)
int
loop_umount
(
struct
lxc_storage
*
bdev
)
{
int
ret
,
saved_errno
;
...
...
src/lxc/storage/loop.h
View file @
10bc1861
...
...
@@ -28,26 +28,21 @@
#include <stdbool.h>
#include <stdint.h>
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
/*
* functions associated with a loop bdev struct
*/
int
loop_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
loop_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
int
loop_destroy
(
struct
bdev
*
orig
);
bool
loop_detect
(
const
char
*
path
);
int
loop_mount
(
struct
bdev
*
bdev
);
int
loop_umount
(
struct
bdev
*
bdev
);
extern
int
loop_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
loop_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
int
loop_destroy
(
struct
lxc_storage
*
orig
);
extern
bool
loop_detect
(
const
char
*
path
);
extern
int
loop_mount
(
struct
lxc_storage
*
bdev
);
extern
int
loop_umount
(
struct
lxc_storage
*
bdev
);
#endif
/* __LXC_LOOP_H */
src/lxc/storage/lvm.c
View file @
10bc1861
...
...
@@ -44,7 +44,7 @@
#include <sys/mkdev.h>
#endif
lxc_log_define
(
l
xcl
vm
,
lxc
);
lxc_log_define
(
lvm
,
lxc
);
struct
lvcreate_args
{
const
char
*
size
;
...
...
@@ -232,7 +232,7 @@ bool lvm_detect(const char *path)
return
true
;
}
int
lvm_mount
(
struct
bdev
*
bdev
)
int
lvm_mount
(
struct
lxc_storage
*
bdev
)
{
char
*
src
;
...
...
@@ -250,7 +250,7 @@ int lvm_mount(struct bdev *bdev)
return
mount_unknown_fs
(
src
,
bdev
->
dest
,
bdev
->
mntopts
);
}
int
lvm_umount
(
struct
bdev
*
bdev
)
int
lvm_umount
(
struct
lxc_storage
*
bdev
)
{
if
(
strcmp
(
bdev
->
type
,
"lvm"
))
return
-
22
;
...
...
@@ -371,9 +371,10 @@ int lvm_snapshot(const char *orig, const char *path, uint64_t size)
return
0
;
}
int
lvm_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
lvm_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
int
len
,
ret
;
const
char
*
vg
;
...
...
@@ -455,8 +456,8 @@ int lvm_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
return
0
;
}
bool
lvm_create_clone
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
)
bool
lvm_create_clone
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
)
{
char
*
src
;
const
char
*
thinpool
;
...
...
@@ -516,8 +517,8 @@ bool lvm_create_clone(struct lxc_conf *conf, struct bdev *orig,
return
true
;
}
bool
lvm_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
)
bool
lvm_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
)
{
int
ret
;
char
*
newsrc
,
*
origsrc
;
...
...
@@ -547,7 +548,7 @@ bool lvm_create_snapshot(struct lxc_conf *conf, struct bdev *orig,
return
true
;
}
int
lvm_destroy
(
struct
bdev
*
orig
)
int
lvm_destroy
(
struct
lxc_storage
*
orig
)
{
int
ret
;
char
cmd_output
[
MAXPATHLEN
];
...
...
@@ -566,7 +567,7 @@ int lvm_destroy(struct bdev *orig)
return
0
;
}
int
lvm_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
lvm_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
const
char
*
vg
,
*
thinpool
,
*
fstype
,
*
lv
=
n
;
...
...
src/lxc/storage/lvm.h
View file @
10bc1861
...
...
@@ -28,34 +28,29 @@
#include <stdbool.h>
#include <stdint.h>
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
/*
* Functions associated with an lvm bdev struct.
*/
bool
lvm_detect
(
const
char
*
path
);
int
lvm_mount
(
struct
bdev
*
bdev
);
int
lvm_umount
(
struct
bdev
*
bdev
);
int
lvm_compare_lv_attr
(
const
char
*
path
,
int
pos
,
const
char
expected
);
int
lvm_is_thin_volume
(
const
char
*
path
);
int
lvm_is_thin_pool
(
const
char
*
path
);
int
lvm_snapshot
(
const
char
*
orig
,
const
char
*
path
,
uint64_t
size
);
int
lvm_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
lvm_destroy
(
struct
bdev
*
orig
);
int
lvm_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
bool
lvm_create_clone
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
bool
lvm_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
extern
bool
lvm_detect
(
const
char
*
path
);
extern
int
lvm_mount
(
struct
lxc_storage
*
bdev
);
extern
int
lvm_umount
(
struct
lxc_storage
*
bdev
);
extern
int
lvm_compare_lv_attr
(
const
char
*
path
,
int
pos
,
const
char
expected
);
extern
int
lvm_is_thin_volume
(
const
char
*
path
);
extern
int
lvm_is_thin_pool
(
const
char
*
path
);
extern
int
lvm_snapshot
(
const
char
*
orig
,
const
char
*
path
,
uint64_t
size
);
extern
int
lvm_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
lvm_destroy
(
struct
lxc_storage
*
orig
);
extern
int
lvm_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
bool
lvm_create_clone
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
extern
bool
lvm_create_snapshot
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
#endif
/* __LXC_LVM_H */
src/lxc/storage/nbd.c
View file @
10bc1861
...
...
@@ -37,7 +37,7 @@
#include "storage_utils.h"
#include "utils.h"
lxc_log_define
(
lxc
nbd
,
lxc
);
lxc_log_define
(
nbd
,
lxc
);
struct
nbd_attach_data
{
const
char
*
nbd
;
...
...
@@ -88,20 +88,21 @@ void detach_nbd_idx(int idx)
nbd_detach
(
path
);
}
int
nbd_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
nbd_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
return
-
ENOSYS
;
}
int
nbd_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
int
nbd_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
return
-
ENOSYS
;
}
int
nbd_destroy
(
struct
bdev
*
orig
)
int
nbd_destroy
(
struct
lxc_storage
*
orig
)
{
return
-
ENOSYS
;
}
...
...
@@ -114,7 +115,7 @@ bool nbd_detect(const char *path)
return
false
;
}
int
nbd_mount
(
struct
bdev
*
bdev
)
int
nbd_mount
(
struct
lxc_storage
*
bdev
)
{
int
ret
=
-
1
,
partition
;
char
*
src
;
...
...
@@ -154,7 +155,7 @@ int nbd_mount(struct bdev *bdev)
return
ret
;
}
int
nbd_umount
(
struct
bdev
*
bdev
)
int
nbd_umount
(
struct
lxc_storage
*
bdev
)
{
if
(
strcmp
(
bdev
->
type
,
"nbd"
))
return
-
22
;
...
...
src/lxc/storage/nbd.h
View file @
10bc1861
...
...
@@ -28,31 +28,25 @@
#include <stdbool.h>
#include <stdint.h>
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
/*
* Functions associated with an nbd bdev struct.
*/
int
nbd_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
nbd_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
int
nbd_destroy
(
struct
bdev
*
orig
);
bool
nbd_detect
(
const
char
*
path
);
int
nbd_mount
(
struct
bdev
*
bdev
);
int
nbd_umount
(
struct
bdev
*
bdev
);
/* helpers */
bool
attach_nbd
(
char
*
src
,
struct
lxc_conf
*
conf
);
void
detach_nbd_idx
(
int
idx
);
bool
requires_nbd
(
const
char
*
path
);
extern
int
nbd_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
nbd_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
int
nbd_destroy
(
struct
lxc_storage
*
orig
);
extern
bool
nbd_detect
(
const
char
*
path
);
extern
int
nbd_mount
(
struct
lxc_storage
*
bdev
);
extern
int
nbd_umount
(
struct
lxc_storage
*
bdev
);
extern
bool
attach_nbd
(
char
*
src
,
struct
lxc_conf
*
conf
);
extern
void
detach_nbd_idx
(
int
idx
);
extern
bool
requires_nbd
(
const
char
*
path
);
#endif
/* __LXC_NBD_H */
src/lxc/storage/overlay.c
View file @
10bc1861
...
...
@@ -37,19 +37,19 @@
#include "storage_utils.h"
#include "utils.h"
lxc_log_define
(
lxc
overlay
,
lxc
);
lxc_log_define
(
overlay
,
lxc
);
static
char
*
ovl_name
;
static
char
*
ovl_version
[]
=
{
"overlay"
,
"overlayfs"
};
static
char
*
ovl_detect_name
(
void
);
static
int
ovl_do_rsync
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
static
int
ovl_do_rsync
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
struct
lxc_conf
*
conf
);
static
int
ovl_remount_on_enodev
(
const
char
*
lower
,
const
char
*
target
,
const
char
*
name
,
unsigned
long
mountflags
,
const
void
*
options
);
int
ovl_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
int
ovl_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
...
...
@@ -315,7 +315,7 @@ int ovl_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
* "<lxcpath>/<lxcname>/rootfs" to have the created container, while all changes
* after starting the container are written to "<lxcpath>/<lxcname>/delta0".
*/
int
ovl_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
ovl_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
char
*
delta
;
...
...
@@ -378,7 +378,7 @@ int ovl_create(struct bdev *bdev, const char *dest, const char *n,
return
0
;
}
int
ovl_destroy
(
struct
bdev
*
orig
)
int
ovl_destroy
(
struct
lxc_storage
*
orig
)
{
bool
ovl
;
char
*
upper
=
orig
->
src
;
...
...
@@ -411,7 +411,7 @@ bool ovl_detect(const char *path)
return
false
;
}
int
ovl_mount
(
struct
bdev
*
bdev
)
int
ovl_mount
(
struct
lxc_storage
*
bdev
)
{
char
*
tmp
,
*
options
,
*
dup
,
*
lower
,
*
upper
;
char
*
options_work
,
*
work
,
*
lastslash
;
...
...
@@ -586,7 +586,7 @@ int ovl_mount(struct bdev *bdev)
return
ret
;
}
int
ovl_umount
(
struct
bdev
*
bdev
)
int
ovl_umount
(
struct
lxc_storage
*
bdev
)
{
int
ret
;
...
...
@@ -878,7 +878,7 @@ static char *ovl_detect_name(void)
return
v
;
}
static
int
ovl_do_rsync
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
static
int
ovl_do_rsync
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
struct
lxc_conf
*
conf
)
{
int
ret
=
-
1
;
...
...
src/lxc/storage/overlay.h
View file @
10bc1861
...
...
@@ -36,59 +36,50 @@
#include <mntent.h>
#endif
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
/* defined in conf.h */
struct
lxc_rootfs
;
/*
* Functions associated with an overlay bdev struct.
*/
int
ovl_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
ovl_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
int
ovl_destroy
(
struct
bdev
*
orig
);
bool
ovl_detect
(
const
char
*
path
);
int
ovl_mount
(
struct
bdev
*
bdev
);
int
ovl_umount
(
struct
bdev
*
bdev
);
extern
int
ovl_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
ovl_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
int
ovl_destroy
(
struct
lxc_storage
*
orig
);
extern
bool
ovl_detect
(
const
char
*
path
);
extern
int
ovl_mount
(
struct
lxc_storage
*
bdev
);
extern
int
ovl_umount
(
struct
lxc_storage
*
bdev
);
/*
* To be called from lxcapi_clone() in lxccontainer.c: When we clone a container
/* To be called from lxcapi_clone() in lxccontainer.c: When we clone a container
* with overlay lxc.mount.entry entries we need to update absolute paths for
* upper- and workdir. This update is done in two locations:
* lxc_conf->unexpanded_config and lxc_conf->mount_list. Both updates are done
* independent of each other since lxc_conf->mountlist may container more mount
* entries (e.g. from other included files) than lxc_conf->unexpanded_config .
*/
int
ovl_update_abs_paths
(
struct
lxc_conf
*
lxc_conf
,
const
char
*
lxc_path
,
const
char
*
lxc_name
,
const
char
*
newpath
,
const
char
*
newname
);
extern
int
ovl_update_abs_paths
(
struct
lxc_conf
*
lxc_conf
,
const
char
*
lxc_path
,
const
char
*
lxc_name
,
const
char
*
newpath
,
const
char
*
newname
);
/*
* To be called from functions in lxccontainer.c: Get lower directory for
/* To be called from functions in lxccontainer.c: Get lower directory for
* overlay rootfs.
*/
char
*
ovl_get_lower
(
const
char
*
rootfs_path
);
extern
char
*
ovl_get_lower
(
const
char
*
rootfs_path
);
/*
* Get rootfs path for overlay backed containers. Allocated memory must be freed
/* Get rootfs path for overlay backed containers. Allocated memory must be freed
* by caller.
*/
char
*
ovl_get_rootfs
(
const
char
*
rootfs_path
,
size_t
*
rootfslen
);
extern
char
*
ovl_get_rootfs
(
const
char
*
rootfs_path
,
size_t
*
rootfslen
);
/*
* Create upper- and workdirs for overlay mounts.
/* Create upper- and workdirs for overlay mounts.
*/
int
ovl_mkdir
(
const
struct
mntent
*
mntent
,
const
struct
lxc_rootfs
*
rootfs
,
const
char
*
lxc_name
,
const
char
*
lxc_path
);
extern
int
ovl_mkdir
(
const
struct
mntent
*
mntent
,
const
struct
lxc_rootfs
*
rootfs
,
const
char
*
lxc_name
,
const
char
*
lxc_path
);
#endif
/* __LXC_OVERLAY_H */
src/lxc/storage/rbd.c
View file @
10bc1861
...
...
@@ -34,7 +34,7 @@
#include "storage_utils.h"
#include "utils.h"
lxc_log_define
(
lxc
rbd
,
lxc
);
lxc_log_define
(
rbd
,
lxc
);
struct
rbd_args
{
const
char
*
osd_pool_name
;
...
...
@@ -80,15 +80,16 @@ int rbd_delete_wrapper(void *data)
return
-
1
;
}
int
rbd_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
rbd_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
ERROR
(
"rbd clonepaths not implemented"
);
return
-
1
;
}
int
rbd_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
rbd_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
const
char
*
rbdpool
,
*
fstype
;
...
...
@@ -185,7 +186,7 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
return
0
;
}
int
rbd_destroy
(
struct
bdev
*
orig
)
int
rbd_destroy
(
struct
lxc_storage
*
orig
)
{
int
ret
;
char
*
src
;
...
...
@@ -230,7 +231,7 @@ bool rbd_detect(const char *path)
return
false
;
}
int
rbd_mount
(
struct
bdev
*
bdev
)
int
rbd_mount
(
struct
lxc_storage
*
bdev
)
{
char
*
src
;
...
...
@@ -252,7 +253,7 @@ int rbd_mount(struct bdev *bdev)
return
mount_unknown_fs
(
src
,
bdev
->
dest
,
bdev
->
mntopts
);
}
int
rbd_umount
(
struct
bdev
*
bdev
)
int
rbd_umount
(
struct
lxc_storage
*
bdev
)
{
if
(
strcmp
(
bdev
->
type
,
"rbd"
))
return
-
22
;
...
...
src/lxc/storage/rbd.h
View file @
10bc1861
...
...
@@ -28,26 +28,21 @@
#include <stdbool.h>
#include <stdint.h>
/* defined in bdev.h */
struct
bdev
;
struct
lxc_storage
;
/* defined in lxccontainer.h */
struct
bdev_specs
;
/* defined conf.h */
struct
lxc_conf
;
/*
* Functions associated with an rdb bdev struct.
*/
int
rbd_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
int
rbd_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
int
rbd_destroy
(
struct
bdev
*
orig
);
bool
rbd_detect
(
const
char
*
path
);
int
rbd_mount
(
struct
bdev
*
bdev
);
int
rbd_umount
(
struct
bdev
*
bdev
);
extern
int
rbd_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
rbd_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
int
rbd_destroy
(
struct
lxc_storage
*
orig
);
extern
bool
rbd_detect
(
const
char
*
path
);
extern
int
rbd_mount
(
struct
lxc_storage
*
bdev
);
extern
int
rbd_umount
(
struct
lxc_storage
*
bdev
);
#endif
/* __LXC_RDB_H */
src/lxc/storage/rsync.c
View file @
10bc1861
...
...
@@ -37,7 +37,7 @@
#include "storage.h"
#include "utils.h"
lxc_log_define
(
lxc
rsync
,
lxc
);
lxc_log_define
(
rsync
,
lxc
);
/* the bulk of this needs to become a common helper */
int
do_rsync
(
const
char
*
src
,
const
char
*
dest
)
...
...
@@ -93,8 +93,7 @@ int rsync_delta_wrapper(void *data)
int
rsync_rootfs
(
struct
rsync_data
*
data
)
{
struct
bdev
*
orig
=
data
->
orig
,
*
new
=
data
->
new
;
struct
lxc_storage
*
orig
=
data
->
orig
,
*
new
=
data
->
new
;
if
(
unshare
(
CLONE_NEWNS
)
<
0
)
{
SYSERROR
(
"unshare CLONE_NEWNS"
);
...
...
@@ -172,7 +171,7 @@ int lxc_rsync_exec(const char *src, const char *dest)
int
lxc_rsync
(
struct
rsync_data
*
data
)
{
int
ret
;
struct
bdev
*
orig
=
data
->
orig
,
*
new
=
data
->
new
;
struct
lxc_storage
*
orig
=
data
->
orig
,
*
new
=
data
->
new
;
char
*
dest
,
*
src
;
ret
=
unshare
(
CLONE_NEWNS
);
...
...
src/lxc/storage/rsync.h
View file @
10bc1861
...
...
@@ -28,8 +28,8 @@
#include <stdio.h>
struct
rsync_data
{
struct
bdev
*
orig
;
struct
bdev
*
new
;
struct
lxc_storage
*
orig
;
struct
lxc_storage
*
new
;
};
struct
rsync_data_char
{
...
...
src/lxc/storage/storage.c
View file @
10bc1861
This diff is collapsed.
Click to expand it.
src/lxc/storage/storage.h
View file @
10bc1861
...
...
@@ -57,39 +57,37 @@
#define DEFAULT_FS_SIZE 1073741824
#define DEFAULT_FSTYPE "ext3"
struct
bdev
;
struct
lxc_storage
;
struct
bdev
_ops
{
struct
lxc_storage
_ops
{
/* detect whether path is of this bdev type */
bool
(
*
detect
)(
const
char
*
path
);
// mount requires src and dest to be set.
int
(
*
mount
)(
struct
bdev
*
bdev
);
int
(
*
umount
)(
struct
bdev
*
bdev
);
int
(
*
destroy
)(
struct
bdev
*
bdev
);
int
(
*
create
)(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
(
*
mount
)(
struct
lxc_storage
*
bdev
);
int
(
*
umount
)(
struct
lxc_storage
*
bdev
);
int
(
*
destroy
)(
struct
lxc_storage
*
bdev
);
int
(
*
create
)(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
/* given original mount, rename the paths for cloned container */
int
(
*
clone_paths
)(
struct
bdev
*
orig
,
struct
bdev
*
new
,
int
(
*
clone_paths
)(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
bool
(
*
copy
)(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
bool
(
*
snapshot
)(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
bool
(
*
copy
)(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
bool
(
*
snapshot
)(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
bool
can_snapshot
;
bool
can_backup
;
};
/*
* When lxc-start is mounting a rootfs, then src will be the "lxc.rootfs" value,
* dest will be mount dir (i.e. $libdir/lxc) When clone or create is doing so,
* then dest will be $lxcpath/$lxcname/rootfs, since we may need to rsync from
* one to the other.
* data is so far unused.
/* When lxc is mounting a rootfs, then src will be the "lxc.rootfs.path" value,
* dest will be the mount dir (i.e. "<libdir>/lxc") When clone or create is
* doing so, then dest will be "<lxcpath>/<lxcname>/rootfs", since we may need
* to rsync from one to the other.
*/
struct
bdev
{
const
struct
bdev
_ops
*
ops
;
struct
lxc_storage
{
const
struct
lxc_storage
_ops
*
ops
;
const
char
*
type
;
char
*
src
;
char
*
dest
;
...
...
@@ -101,33 +99,35 @@ struct bdev {
int
nbd_idx
;
};
bool
bdev
_is_dir
(
struct
lxc_conf
*
conf
,
const
char
*
path
);
bool
bdev
_can_backup
(
struct
lxc_conf
*
conf
);
extern
bool
storage
_is_dir
(
struct
lxc_conf
*
conf
,
const
char
*
path
);
extern
bool
storage
_can_backup
(
struct
lxc_conf
*
conf
);
/*
* Instantiate a bdev object. The src is used to determine which blockdev type
* this should be. The dst and data are optional, and will be used in case of
* mount/umount.
/* Instantiate a lxc_storage object. The src is used to determine which blockdev
* type this should be. The dst and data are optional, and will be used in case
* of mount/umount.
*
*
Optionally, src can be 'dir:/var/lib/lxc/c1' or 'lvm:/dev/lxc/c1'. Fo
r
*
other
backing stores, this will allow additional options. In particular,
* "overlayfs:/var/lib/lxc/canonical/rootfs:/var/lib/lxc/c1/delta" will mean
*
use /var/lib/lxc/canonical/rootfs as lower dir, and /var/lib/lxc/c1/delta
*
as the
upper, writeable layer.
*
The source will be "dir:/var/lib/lxc/c1" or "lvm:/dev/lxc/c1". For othe
r
* backing stores, this will allow additional options. In particular,
* "overlayfs:/var/lib/lxc/canonical/rootfs:/var/lib/lxc/c1/delta" will mean
use
*
/var/lib/lxc/canonical/rootfs as lower dir, and /var/lib/lxc/c1/delta as the
* upper, writeable layer.
*/
struct
bdev
*
bdev_init
(
struct
lxc_conf
*
conf
,
const
char
*
src
,
const
char
*
dst
,
const
char
*
data
);
struct
bdev
*
bdev_copy
(
struct
lxc_container
*
c0
,
const
char
*
cname
,
const
char
*
lxcpath
,
const
char
*
bdevtype
,
int
flags
,
const
char
*
bdevdata
,
uint64_t
newsize
,
int
*
needs_rdep
);
struct
bdev
*
bdev_create
(
const
char
*
dest
,
const
char
*
type
,
const
char
*
cname
,
struct
bdev_specs
*
specs
);
void
bdev_put
(
struct
bdev
*
bdev
);
bool
bdev_destroy
(
struct
lxc_conf
*
conf
);
extern
struct
lxc_storage
*
storage_init
(
struct
lxc_conf
*
conf
,
const
char
*
src
,
const
char
*
dst
,
const
char
*
data
);
extern
struct
lxc_storage
*
storage_copy
(
struct
lxc_container
*
c0
,
const
char
*
cname
,
const
char
*
lxcpath
,
const
char
*
bdevtype
,
int
flags
,
const
char
*
bdevdata
,
uint64_t
newsize
,
int
*
needs_rdep
);
extern
struct
lxc_storage
*
storage_create
(
const
char
*
dest
,
const
char
*
type
,
const
char
*
cname
,
struct
bdev_specs
*
specs
);
extern
void
storage_put
(
struct
lxc_storage
*
bdev
);
extern
bool
storage_destroy
(
struct
lxc_conf
*
conf
);
/* callback function to be used with userns_exec_1() */
int
bdev
_destroy_wrapper
(
void
*
data
);
extern
int
storage
_destroy_wrapper
(
void
*
data
);
extern
bool
rootfs_is_blockdev
(
struct
lxc_conf
*
conf
);
extern
char
*
lxc_storage_get_path
(
char
*
src
,
const
char
*
prefix
);
...
...
src/lxc/storage/storage_utils.c
View file @
10bc1861
...
...
@@ -126,7 +126,7 @@ bool attach_block_device(struct lxc_conf *conf)
/*
* return block size of dev->src in units of bytes
*/
int
blk_getsize
(
struct
bdev
*
bdev
,
uint64_t
*
size
)
int
blk_getsize
(
struct
lxc_storage
*
bdev
,
uint64_t
*
size
)
{
int
fd
,
ret
;
char
*
src
;
...
...
@@ -148,14 +148,14 @@ void detach_block_device(struct lxc_conf *conf)
}
/*
* Given a
bdev
(presumably blockdev-based), detect the fstype
* Given a
lxc_storage
(presumably blockdev-based), detect the fstype
* by trying mounting (in a private mntns) it.
* @
bdev
: bdev to investigate
* @
lxc_storage
: bdev to investigate
* @type: preallocated char* in which to write the fstype
* @len: length of passed in char*
* Returns length of fstype, of -1 on error
*/
int
detect_fs
(
struct
bdev
*
bdev
,
char
*
type
,
int
len
)
int
detect_fs
(
struct
lxc_storage
*
bdev
,
char
*
type
,
int
len
)
{
int
p
[
2
],
ret
;
size_t
linelen
;
...
...
@@ -280,7 +280,7 @@ int do_mkfs_exec_wrapper(void *args)
* This will return 1 for physical disks, qemu-nbd, loop, etc right now only lvm
* is a block device.
*/
int
is_blktype
(
struct
bdev
*
b
)
int
is_blktype
(
struct
lxc_storage
*
b
)
{
if
(
strcmp
(
b
->
type
,
"lvm"
)
==
0
)
return
1
;
...
...
@@ -406,7 +406,7 @@ char *linkderef(char *path, char *dest)
/*
* is an unprivileged user allowed to make this kind of snapshot
*/
bool
unpriv_snap_allowed
(
struct
bdev
*
b
,
const
char
*
t
,
bool
snap
,
bool
unpriv_snap_allowed
(
struct
lxc_storage
*
b
,
const
char
*
t
,
bool
snap
,
bool
maybesnap
)
{
if
(
!
t
)
{
...
...
@@ -437,7 +437,7 @@ bool unpriv_snap_allowed(struct bdev *b, const char *t, bool snap,
return
false
;
}
bool
is_valid_
bdev
_type
(
const
char
*
type
)
bool
is_valid_
storage
_type
(
const
char
*
type
)
{
if
(
strcmp
(
type
,
"dir"
)
==
0
||
strcmp
(
type
,
"btrfs"
)
==
0
||
...
...
@@ -453,7 +453,7 @@ bool is_valid_bdev_type(const char *type)
return
false
;
}
int
bdev
_destroy_wrapper
(
void
*
data
)
int
storage
_destroy_wrapper
(
void
*
data
)
{
struct
lxc_conf
*
conf
=
data
;
...
...
@@ -470,7 +470,7 @@ int bdev_destroy_wrapper(void *data)
return
-
1
;
}
if
(
!
bdev
_destroy
(
conf
))
if
(
!
storage
_destroy
(
conf
))
return
-
1
;
return
0
;
...
...
src/lxc/storage/storage_utils.h
View file @
10bc1861
...
...
@@ -31,24 +31,24 @@
#include "conf.h"
struct
bdev
;
struct
lxc_storage
;
struct
lxc_conf
;
extern
char
*
dir_new_path
(
char
*
src
,
const
char
*
oldname
,
const
char
*
name
,
const
char
*
oldpath
,
const
char
*
lxcpath
);
extern
bool
attach_block_device
(
struct
lxc_conf
*
conf
);
extern
void
detach_block_device
(
struct
lxc_conf
*
conf
);
extern
int
blk_getsize
(
struct
bdev
*
bdev
,
uint64_t
*
size
);
extern
int
detect_fs
(
struct
bdev
*
bdev
,
char
*
type
,
int
len
);
extern
int
blk_getsize
(
struct
lxc_storage
*
bdev
,
uint64_t
*
size
);
extern
int
detect_fs
(
struct
lxc_storage
*
bdev
,
char
*
type
,
int
len
);
extern
int
do_mkfs_exec_wrapper
(
void
*
args
);
extern
int
is_blktype
(
struct
bdev
*
b
);
extern
int
is_blktype
(
struct
lxc_storage
*
b
);
extern
int
mount_unknown_fs
(
const
char
*
rootfs
,
const
char
*
target
,
const
char
*
options
);
extern
int
find_fstype_cb
(
char
*
buffer
,
void
*
data
);
extern
char
*
linkderef
(
char
*
path
,
char
*
dest
);
extern
bool
unpriv_snap_allowed
(
struct
bdev
*
b
,
const
char
*
t
,
bool
snap
,
extern
bool
unpriv_snap_allowed
(
struct
lxc_storage
*
b
,
const
char
*
t
,
bool
snap
,
bool
maybesnap
);
extern
bool
is_valid_
bdev
_type
(
const
char
*
type
);
extern
int
bdev
_destroy_wrapper
(
void
*
data
);
extern
bool
is_valid_
storage
_type
(
const
char
*
type
);
extern
int
storage
_destroy_wrapper
(
void
*
data
);
#endif /
/ __LXC_STORAGE_UTILS_H
#endif
/
* __LXC_STORAGE_UTILS_H */
src/lxc/storage/zfs.c
View file @
10bc1861
...
...
@@ -38,7 +38,7 @@
#include "utils.h"
#include "zfs.h"
lxc_log_define
(
lxc
zfs
,
lxc
);
lxc_log_define
(
zfs
,
lxc
);
struct
zfs_args
{
const
char
*
dataset
;
...
...
@@ -176,7 +176,7 @@ bool zfs_detect(const char *path)
return
true
;
}
int
zfs_mount
(
struct
bdev
*
bdev
)
int
zfs_mount
(
struct
lxc_storage
*
bdev
)
{
int
ret
;
size_t
oldlen
,
newlen
,
totallen
;
...
...
@@ -261,7 +261,7 @@ int zfs_mount(struct bdev *bdev)
return
0
;
}
int
zfs_umount
(
struct
bdev
*
bdev
)
int
zfs_umount
(
struct
lxc_storage
*
bdev
)
{
int
ret
;
...
...
@@ -280,8 +280,8 @@ int zfs_umount(struct bdev *bdev)
return
ret
;
}
bool
zfs_copy
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
)
bool
zfs_copy
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
)
{
int
ret
;
char
cmd_output
[
MAXPATHLEN
],
option
[
MAXPATHLEN
];
...
...
@@ -337,8 +337,8 @@ bool zfs_copy(struct lxc_conf *conf, struct bdev *orig, struct bdev *new,
}
/* create read-only snapshot and create a clone from it */
bool
zfs_snapshot
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
)
bool
zfs_snapshot
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
)
{
int
ret
;
size_t
snapshot_len
,
len
;
...
...
@@ -442,9 +442,10 @@ bool zfs_snapshot(struct lxc_conf *conf, struct bdev *orig, struct bdev *new,
return
true
;
}
int
zfs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
int
zfs_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
{
char
*
dataset
,
*
orig_src
,
*
tmp
;
int
ret
;
...
...
@@ -572,7 +573,7 @@ int zfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
return
0
;
}
int
zfs_destroy
(
struct
bdev
*
orig
)
int
zfs_destroy
(
struct
lxc_storage
*
orig
)
{
int
ret
;
char
*
dataset
,
*
src
,
*
tmp
;
...
...
@@ -700,7 +701,7 @@ int zfs_destroy(struct bdev *orig)
return
ret
;
}
int
zfs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
zfs_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
{
const
char
*
zfsroot
;
...
...
src/lxc/storage/zfs.h
View file @
10bc1861
...
...
@@ -29,26 +29,26 @@
#include <stdio.h>
#include <stdint.h>
struct
bdev
;
struct
lxc_storage
;
struct
bdev_specs
;
struct
lxc_conf
;
extern
int
zfs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
extern
int
zfs_clonepaths
(
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
const
char
*
oldname
,
const
char
*
cname
,
const
char
*
oldpath
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
);
extern
int
zfs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
extern
int
zfs_create
(
struct
lxc_storage
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
);
extern
int
zfs_destroy
(
struct
bdev
*
orig
);
extern
int
zfs_destroy
(
struct
lxc_storage
*
orig
);
extern
bool
zfs_detect
(
const
char
*
path
);
extern
int
zfs_mount
(
struct
bdev
*
bdev
);
extern
int
zfs_umount
(
struct
bdev
*
bdev
);
extern
int
zfs_mount
(
struct
lxc_storage
*
bdev
);
extern
int
zfs_umount
(
struct
lxc_storage
*
bdev
);
extern
bool
zfs_copy
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
extern
bool
zfs_snapshot
(
struct
lxc_conf
*
conf
,
struct
bdev
*
orig
,
struct
bdev
*
new
,
uint64_t
newsize
);
extern
bool
zfs_copy
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
extern
bool
zfs_snapshot
(
struct
lxc_conf
*
conf
,
struct
lxc_storage
*
orig
,
struct
lxc_storage
*
new
,
uint64_t
newsize
);
#endif
/* __LXC_ZFS_H */
src/lxc/tools/lxc_create.c
View file @
10bc1861
...
...
@@ -251,7 +251,7 @@ int main(int argc, char *argv[])
// Final check whether the user gave use a valid bdev type.
if
(
strcmp
(
my_args
.
bdevtype
,
"best"
)
&&
strcmp
(
my_args
.
bdevtype
,
"_unset"
)
&&
!
is_valid_
bdev
_type
(
my_args
.
bdevtype
))
{
!
is_valid_
storage
_type
(
my_args
.
bdevtype
))
{
fprintf
(
stderr
,
"%s is not a valid backing storage type.
\n
"
,
my_args
.
bdevtype
);
exit
(
EXIT_FAILURE
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment