diff options
author | 2013-11-30 20:55:15 +0000 | |
---|---|---|
committer | 2013-11-30 20:55:15 +0000 | |
commit | 08aed22cad0c96c8bd81e160ac1152026276042c (patch) | |
tree | 024a79266339b4be3418483fc81e27828a829c44 /sys-fs | |
parent | Port to KDE_HANDBOOK wrt bug #492862. (diff) | |
download | gentoo-2-08aed22cad0c96c8bd81e160ac1152026276042c.tar.gz gentoo-2-08aed22cad0c96c8bd81e160ac1152026276042c.tar.bz2 gentoo-2-08aed22cad0c96c8bd81e160ac1152026276042c.zip |
Fix 'btrfs send' on funky subvol paths (bug #492776 by Thomas Scheiblauer).
(Portage version: 2.2.7_p18/cvs/Linux x86_64, signed Manifest commit with key 611FF3AA)
Diffstat (limited to 'sys-fs')
-rw-r--r-- | sys-fs/btrfs-progs/ChangeLog | 9 | ||||
-rw-r--r-- | sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild | 58 | ||||
-rw-r--r-- | sys-fs/btrfs-progs/btrfs-progs-9999.ebuild | 3 | ||||
-rw-r--r-- | sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch | 111 |
4 files changed, 179 insertions, 2 deletions
diff --git a/sys-fs/btrfs-progs/ChangeLog b/sys-fs/btrfs-progs/ChangeLog index 6e4a8de59a0e..0b04b15607c6 100644 --- a/sys-fs/btrfs-progs/ChangeLog +++ b/sys-fs/btrfs-progs/ChangeLog @@ -1,6 +1,13 @@ # ChangeLog for sys-fs/btrfs-progs # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/ChangeLog,v 1.68 2013/11/30 08:40:40 slyfox Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/ChangeLog,v 1.69 2013/11/30 20:55:15 slyfox Exp $ + +*btrfs-progs-3.12-r1 (30 Nov 2013) + + 30 Nov 2013; Sergei Trofimovich <slyfox@gentoo.org> + +btrfs-progs-3.12-r1.ebuild, + +files/btrfs-progs-3.12-fix-send-subvol-492776.patch, btrfs-progs-9999.ebuild: + Fix 'btrfs send' on funky subvol paths (bug #492776 by Thomas Scheiblauer). 30 Nov 2013; Sergei Trofimovich <slyfox@gentoo.org> btrfs-progs-3.12.ebuild, btrfs-progs-9999.ebuild: diff --git a/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild b/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild new file mode 100644 index 000000000000..2c2a9072aa3d --- /dev/null +++ b/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild @@ -0,0 +1,58 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild,v 1.1 2013/11/30 20:55:15 slyfox Exp $ + +EAPI=5 + +inherit eutils multilib toolchain-funcs + +libbtrfs_soname=0 + +if [[ ${PV} != 9999 ]]; then + MY_PV=v${PV} + KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86" + SRC_URI="https://www.kernel.org/pub/linux/kernel/people/mason/${PN}/${PN}-${MY_PV}.tar.xz" + S="${WORKDIR}"/${PN}-${MY_PV} +else + inherit git-2 + EGIT_REPO_URI="git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs.git + https://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs.git" +fi + +DESCRIPTION="Btrfs filesystem utilities" +HOMEPAGE="https://btrfs.wiki.kernel.org" + +LICENSE="GPL-2" +SLOT="0/${libbtrfs_soname}" +IUSE="" + +DEPEND=" + dev-libs/lzo + sys-libs/zlib + sys-apps/acl + sys-fs/e2fsprogs +" +RDEPEND="${DEPEND}" + +src_prepare() { + epatch "${FILESDIR}"/${P}-fix-send-subvol-492776.patch + epatch_user +} + +src_compile() { + emake \ + AR="$(tc-getAR)" \ + CC="$(tc-getCC)" \ + CFLAGS="${CFLAGS}" \ + LDFLAGS="${LDFLAGS}" \ + BUILD_VERBOSE=1 +} + +src_install() { + emake install \ + DESTDIR="${D}" \ + prefix=/usr \ + bindir=/sbin \ + libdir=/usr/$(get_libdir) \ + mandir=/usr/share/man +} diff --git a/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild b/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild index 1c898b835cfe..9b6c844193d9 100644 --- a/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild +++ b/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild,v 1.30 2013/11/30 08:40:40 slyfox Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild,v 1.31 2013/11/30 20:55:15 slyfox Exp $ EAPI=5 @@ -35,6 +35,7 @@ DEPEND=" RDEPEND="${DEPEND}" src_prepare() { + epatch "${FILESDIR}"/${PN}-3.12-fix-send-subvol-492776.patch epatch_user } diff --git a/sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch b/sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch new file mode 100644 index 000000000000..8a2cc7883a14 --- /dev/null +++ b/sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch @@ -0,0 +1,111 @@ +Gentoo-bug: http://bugs.gentoo.org/492776 + +From: Wang Shilong <wangsl.fnst@cn.fujitsu.com> + +Steps to reproduce: + # mkfs.btrfs -f /dev/sda + # mount /dev/sda /mnt + # btrfs subvolume create /mnt/foo + # umount /mnt + # mount -o subvol=foo /dev/sda /mnt + # btrfs sub snapshot -r /mnt /mnt/snap + # btrfs send /mnt/snap > /dev/null + +We will fail to send '/mnt/snap',this is because btrfs send try to +open '/mnt/snap' by btrfs internal subvolume path 'foo/snap' rather +than relative path based on mounted point, this will return us 'no +such file or directory',this is not right, fix it. + +Reported-by: Thomas Scheiblauer <tom@sharkbay.at> +Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com> +--- +v1->v2: + code cleanups(thanks to Stefan) +--- + cmds-send.c | 34 ++++++---------------------------- + 1 file changed, 6 insertions(+), 28 deletions(-) + +diff --git a/cmds-send.c b/cmds-send.c +index 53e9a53..6fdfd7f 100644 +--- a/cmds-send.c ++++ b/cmds-send.c +@@ -282,31 +282,21 @@ out: + return ERR_PTR(ret); + } + +-static int do_send(struct btrfs_send *send, u64 root_id, u64 parent_root_id, +- int is_first_subvol, int is_last_subvol) ++static int do_send(struct btrfs_send *send, u64 parent_root_id, ++ int is_first_subvol, int is_last_subvol, char *subvol) + { + int ret; + pthread_t t_read; + pthread_attr_t t_attr; + struct btrfs_ioctl_send_args io_send; +- struct subvol_info *si; + void *t_err = NULL; + int subvol_fd = -1; + int pipefd[2] = {-1, -1}; + +- si = subvol_uuid_search(&send->sus, root_id, NULL, 0, NULL, +- subvol_search_by_root_id); +- if (!si) { +- ret = -ENOENT; +- fprintf(stderr, "ERROR: could not find subvol info for %llu", +- root_id); +- goto out; +- } +- +- subvol_fd = openat(send->mnt_fd, si->path, O_RDONLY | O_NOATIME); ++ subvol_fd = openat(send->mnt_fd, subvol, O_RDONLY | O_NOATIME); + if (subvol_fd < 0) { + ret = -errno; +- fprintf(stderr, "ERROR: open %s failed. %s\n", si->path, ++ fprintf(stderr, "ERROR: open %s failed. %s\n", subvol, + strerror(-ret)); + goto out; + } +@@ -385,10 +375,6 @@ out: + close(pipefd[0]); + if (pipefd[1] != -1) + close(pipefd[1]); +- if (si) { +- free(si->path); +- free(si); +- } + return ret; + } + +@@ -664,14 +650,6 @@ int cmd_send(int argc, char **argv) + goto out; + } + +- ret = get_root_id(&send, get_subvol_name(send.root_path, subvol), +- &root_id); +- if (ret < 0) { +- fprintf(stderr, "ERROR: could not resolve root_id " +- "for %s\n", subvol); +- goto out; +- } +- + if (!full_send && !parent_root_id) { + ret = find_good_parent(&send, root_id, &parent_root_id); + if (ret < 0) { +@@ -700,8 +678,8 @@ int cmd_send(int argc, char **argv) + is_first_subvol = 1; + is_last_subvol = 1; + } +- ret = do_send(&send, root_id, parent_root_id, +- is_first_subvol, is_last_subvol); ++ ret = do_send(&send, parent_root_id, is_first_subvol, ++ is_last_subvol, subvol); + if (ret < 0) + goto out; + +-- +1.8.4 + +-- +To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html |