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
f405c0c5
Unverified
Commit
f405c0c5
authored
Jul 01, 2017
by
Christian Brauner
Committed by
Stéphane Graber
Aug 14, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
storage: prefix all btrfs paths
Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
276fb978
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
12 deletions
+47
-12
lxcbtrfs.c
src/lxc/bdev/lxcbtrfs.c
+47
-12
No files found.
src/lxc/bdev/lxcbtrfs.c
View file @
f405c0c5
...
@@ -191,11 +191,12 @@ int btrfs_detect(const char *path)
...
@@ -191,11 +191,12 @@ int btrfs_detect(const char *path)
int
btrfs_mount
(
struct
bdev
*
bdev
)
int
btrfs_mount
(
struct
bdev
*
bdev
)
{
{
unsigned
long
mntflags
;
unsigned
long
mntflags
;
char
*
mntdata
;
char
*
mntdata
,
*
src
;
int
ret
;
int
ret
;
if
(
strcmp
(
bdev
->
type
,
"btrfs"
))
if
(
strcmp
(
bdev
->
type
,
"btrfs"
))
return
-
22
;
return
-
22
;
if
(
!
bdev
->
src
||
!
bdev
->
dest
)
if
(
!
bdev
->
src
||
!
bdev
->
dest
)
return
-
22
;
return
-
22
;
...
@@ -204,7 +205,9 @@ int btrfs_mount(struct bdev *bdev)
...
@@ -204,7 +205,9 @@ int btrfs_mount(struct bdev *bdev)
return
-
22
;
return
-
22
;
}
}
ret
=
mount
(
bdev
->
src
,
bdev
->
dest
,
"bind"
,
MS_BIND
|
MS_REC
|
mntflags
,
mntdata
);
src
=
lxc_storage_get_path
(
bdev
->
src
,
"btrfs"
);
ret
=
mount
(
src
,
bdev
->
dest
,
"bind"
,
MS_BIND
|
MS_REC
|
mntflags
,
mntdata
);
free
(
mntdata
);
free
(
mntdata
);
return
ret
;
return
ret
;
}
}
...
@@ -213,8 +216,10 @@ int btrfs_umount(struct bdev *bdev)
...
@@ -213,8 +216,10 @@ int btrfs_umount(struct bdev *bdev)
{
{
if
(
strcmp
(
bdev
->
type
,
"btrfs"
))
if
(
strcmp
(
bdev
->
type
,
"btrfs"
))
return
-
22
;
return
-
22
;
if
(
!
bdev
->
src
||
!
bdev
->
dest
)
if
(
!
bdev
->
src
||
!
bdev
->
dest
)
return
-
22
;
return
-
22
;
return
umount
(
bdev
->
dest
);
return
umount
(
bdev
->
dest
);
}
}
...
@@ -343,7 +348,9 @@ out:
...
@@ -343,7 +348,9 @@ out:
static
int
btrfs_snapshot_wrapper
(
void
*
data
)
static
int
btrfs_snapshot_wrapper
(
void
*
data
)
{
{
char
*
src
;
struct
rsync_data_char
*
arg
=
data
;
struct
rsync_data_char
*
arg
=
data
;
if
(
setgid
(
0
)
<
0
)
{
if
(
setgid
(
0
)
<
0
)
{
ERROR
(
"Failed to setgid to 0"
);
ERROR
(
"Failed to setgid to 0"
);
return
-
1
;
return
-
1
;
...
@@ -354,7 +361,10 @@ static int btrfs_snapshot_wrapper(void *data)
...
@@ -354,7 +361,10 @@ static int btrfs_snapshot_wrapper(void *data)
ERROR
(
"Failed to setuid to 0"
);
ERROR
(
"Failed to setuid to 0"
);
return
-
1
;
return
-
1
;
}
}
return
btrfs_snapshot
(
arg
->
src
,
arg
->
dest
);
src
=
lxc_storage_get_path
(
arg
->
src
,
"btrfs"
);
return
btrfs_snapshot
(
src
,
arg
->
dest
);
}
}
int
btrfs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
int
btrfs_clonepaths
(
struct
bdev
*
orig
,
struct
bdev
*
new
,
const
char
*
oldname
,
...
@@ -362,6 +372,8 @@ int btrfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
...
@@ -362,6 +372,8 @@ int btrfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
const
char
*
lxcpath
,
int
snap
,
uint64_t
newsize
,
struct
lxc_conf
*
conf
)
struct
lxc_conf
*
conf
)
{
{
char
*
src
;
if
(
!
orig
->
dest
||
!
orig
->
src
)
if
(
!
orig
->
dest
||
!
orig
->
src
)
return
-
1
;
return
-
1
;
...
@@ -372,21 +384,26 @@ int btrfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
...
@@ -372,21 +384,26 @@ int btrfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
orig
->
type
);
orig
->
type
);
return
-
1
;
return
-
1
;
}
}
len
=
strlen
(
lxcpath
)
+
strlen
(
cname
)
+
strlen
(
"rootfs"
)
+
3
;
len
=
strlen
(
lxcpath
)
+
strlen
(
cname
)
+
strlen
(
"rootfs"
)
+
6
+
3
;
new
->
src
=
malloc
(
len
);
new
->
src
=
malloc
(
len
);
if
(
!
new
->
src
)
if
(
!
new
->
src
)
return
-
1
;
return
-
1
;
ret
=
snprintf
(
new
->
src
,
len
,
"%s/%s/rootfs"
,
lxcpath
,
cname
);
ret
=
snprintf
(
new
->
src
,
len
,
"btrfs:%s/%s/rootfs"
,
lxcpath
,
cname
);
if
(
ret
<
0
||
ret
>=
len
)
if
(
ret
<
0
||
ret
>=
len
)
return
-
1
;
return
-
1
;
}
else
{
}
else
{
// in case rootfs is in custom path, reuse it
/* In case rootfs is in custom path, reuse it. */
if
((
new
->
src
=
dir_new_path
(
orig
->
src
,
oldname
,
cname
,
oldpath
,
lxcpath
))
==
NULL
)
new
->
src
=
dir_new_path
(
orig
->
src
,
oldname
,
cname
,
oldpath
,
lxcpath
);
if
(
!
new
->
src
)
return
-
1
;
return
-
1
;
}
}
if
((
new
->
dest
=
strdup
(
new
->
src
))
==
NULL
)
src
=
lxc_storage_get_path
(
new
->
src
,
"btrfs"
);
new
->
dest
=
strdup
(
src
);
if
(
!
new
->
dest
)
return
-
1
;
return
-
1
;
if
(
orig
->
mntopts
&&
(
new
->
mntopts
=
strdup
(
orig
->
mntopts
))
==
NULL
)
if
(
orig
->
mntopts
&&
(
new
->
mntopts
=
strdup
(
orig
->
mntopts
))
==
NULL
)
...
@@ -731,21 +748,39 @@ bool btrfs_try_remove_subvol(const char *path)
...
@@ -731,21 +748,39 @@ bool btrfs_try_remove_subvol(const char *path)
{
{
if
(
!
btrfs_detect
(
path
))
if
(
!
btrfs_detect
(
path
))
return
false
;
return
false
;
return
btrfs_recursive_destroy
(
path
)
==
0
;
return
btrfs_recursive_destroy
(
path
)
==
0
;
}
}
int
btrfs_destroy
(
struct
bdev
*
orig
)
int
btrfs_destroy
(
struct
bdev
*
orig
)
{
{
return
btrfs_recursive_destroy
(
orig
->
src
);
char
*
src
;
src
=
lxc_storage_get_path
(
orig
->
src
,
"btrfs"
);
return
btrfs_recursive_destroy
(
src
);
}
}
int
btrfs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
int
btrfs_create
(
struct
bdev
*
bdev
,
const
char
*
dest
,
const
char
*
n
,
struct
bdev_specs
*
specs
)
struct
bdev_specs
*
specs
)
{
{
bdev
->
src
=
strdup
(
dest
);
int
ret
;
size_t
len
;
len
=
strlen
(
dest
)
+
1
;
/* strlen("btrfs:") */
len
+=
6
;
bdev
->
src
=
malloc
(
len
);
if
(
!
bdev
->
src
)
return
-
1
;
ret
=
snprintf
(
bdev
->
src
,
len
,
"btrfs:%s"
,
dest
);
if
(
ret
<
0
||
(
size_t
)
ret
>=
len
)
return
-
1
;
bdev
->
dest
=
strdup
(
dest
);
bdev
->
dest
=
strdup
(
dest
);
if
(
!
bdev
->
src
||
!
bdev
->
dest
)
if
(
!
bdev
->
dest
)
return
-
1
;
return
-
1
;
return
btrfs_subvolume_create
(
bdev
->
dest
);
return
btrfs_subvolume_create
(
bdev
->
dest
);
}
}
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