Author: areq                         Date: Mon Jun  7 12:14:25 2010 GMT
Module: packages                      Tag: HEAD
---- Log message:
- add patches from fedora

---- Files affected:
packages/btrfs-progs:
   btrfs-progs.spec (1.3 -> 1.4) , btrfs-progs-build-everything.patch (NONE -> 
1.1)  (NEW), btrfs-progs-build-fixes.patch (NONE -> 1.1)  (NEW), 
btrfs-progs-fix-labels.patch (NONE -> 1.1)  (NEW), 
btrfs-progs-fix-return-value.patch (NONE -> 1.1)  (NEW), 
btrfs-progs-upstream.patch (NONE -> 1.1)  (NEW), btrfs-progs-valgrind.patch 
(NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/btrfs-progs/btrfs-progs.spec
diff -u packages/btrfs-progs/btrfs-progs.spec:1.3 
packages/btrfs-progs/btrfs-progs.spec:1.4
--- packages/btrfs-progs/btrfs-progs.spec:1.3   Sun Nov  8 00:14:09 2009
+++ packages/btrfs-progs/btrfs-progs.spec       Mon Jun  7 14:14:19 2010
@@ -2,11 +2,17 @@
 Summary:       Utilities belonging to the btrfs filesystem
 Name:          btrfs-progs
 Version:       0.19
-Release:       1
+Release:       2
 License:       GPL v2
 Group:         Applications/System
 Source0:       
http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/%{name}-%{version}.tar.bz2
 # Source0-md5: 5854728d080cc76f21a83bdc99b6ddaa
+Patch0:                %{name}-fix-labels.patch
+Patch1:                %{name}-build-everything.patch
+Patch2:                %{name}-valgrind.patch
+Patch3:                %{name}-fix-return-value.patch
+Patch4:                %{name}-build-fixes.patch
+Patch5:                %{name}-upstream.patch
 URL:           http://btrfs.wiki.kernel.org/
 BuildRequires: autoconf >= 2.50
 BuildRequires: automake
@@ -22,6 +28,12 @@
 
 %prep
 %setup -q
+%patch0 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch1 -p1
 
 sed -i -e 's#gcc#$(CC)#g' Makefile
 
@@ -57,6 +69,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.4  2010/06/07 12:14:19  areq
+- add patches from fedora
+
 Revision 1.3  2009/11/07 23:14:09  adamg
 - updated to 0.19
 

================================================================
Index: packages/btrfs-progs/btrfs-progs-build-everything.patch
diff -u /dev/null packages/btrfs-progs/btrfs-progs-build-everything.patch:1.1
--- /dev/null   Mon Jun  7 14:14:25 2010
+++ packages/btrfs-progs/btrfs-progs-build-everything.patch     Mon Jun  7 
14:14:19 2010
@@ -0,0 +1,12 @@
+--- btrfs-progs-0.19/Makefile.orig     2010-03-24 14:45:18.001490900 -0400
++++ btrfs-progs-0.19/Makefile  2010-03-24 14:45:35.745491310 -0400
+@@ -17,8 +17,7 @@
+ LIBS=-luuid
+ 
+ progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck \
+-      btrfs \
+-      btrfs-map-logical
++      btrfs btrfs-map-logical btrfstune btrfs-image
+ 
+ # make C=1 to enable sparse
+ ifdef C

================================================================
Index: packages/btrfs-progs/btrfs-progs-build-fixes.patch
diff -u /dev/null packages/btrfs-progs/btrfs-progs-build-fixes.patch:1.1
--- /dev/null   Mon Jun  7 14:14:25 2010
+++ packages/btrfs-progs/btrfs-progs-build-fixes.patch  Mon Jun  7 14:14:19 2010
@@ -0,0 +1,32 @@
+--- btrfs-progs-0.19/btrfsck.c 
++++ btrfs-progs-0.19/btrfsck.c 
+@@ -21,6 +21,9 @@ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <unistd.h>
+ #include "kerncompat.h"
+ #include "ctree.h"
+ #include "disk-io.h"
+--- btrfs-progs-0.19/mkfs.c    
++++ btrfs-progs-0.19/mkfs.c    
+@@ -341,7 +341,7 @@ int main(int ac, char **av)
+       u64 alloc_start = 0;
+       u64 metadata_profile = BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_DUP;
+       u64 data_profile = BTRFS_BLOCK_GROUP_RAID0;
+-      u32 leafsize = getpagesize();
++      u32 leafsize = sysconf(_SC_PAGESIZE);
+       u32 sectorsize = 4096;
+       u32 nodesize = leafsize;
+       u32 stripesize = 4096;
+@@ -398,7 +398,7 @@ int main(int ac, char **av)
+                               print_usage();
+               }
+       }
+-      sectorsize = max(sectorsize, (u32)getpagesize());
++      sectorsize = max(sectorsize, (u32)sysconf(_SC_PAGESIZE));
+       if (leafsize < sectorsize || (leafsize & (sectorsize - 1))) {
+               fprintf(stderr, "Illegal leafsize %u\n", leafsize);
+               exit(1);

================================================================
Index: packages/btrfs-progs/btrfs-progs-fix-labels.patch
diff -u /dev/null packages/btrfs-progs/btrfs-progs-fix-labels.patch:1.1
--- /dev/null   Mon Jun  7 14:14:25 2010
+++ packages/btrfs-progs/btrfs-progs-fix-labels.patch   Mon Jun  7 14:14:19 2010
@@ -0,0 +1,25 @@
+diff --git a/mkfs.c b/mkfs.c
+index d664254..138bcc9 100644
+--- a/mkfs.c
++++ b/mkfs.c
+@@ -294,7 +294,6 @@ static u64 parse_profile(char *s)
+ 
+ static char *parse_label(char *input)
+ {
+-      int i;
+       int len = strlen(input);
+ 
+       if (len > BTRFS_LABEL_SIZE) {
+@@ -302,12 +301,6 @@ static char *parse_label(char *input)
+                       BTRFS_LABEL_SIZE);
+               exit(1);
+       }
+-      for (i = 0; i < len; i++) {
+-              if (input[i] == '/' || input[i] == '\\') {
+-                      fprintf(stderr, "invalid label %s\n", input);
+-                      exit(1);
+-              }
+-      }
+       return strdup(input);
+ }
+ 

================================================================
Index: packages/btrfs-progs/btrfs-progs-fix-return-value.patch
diff -u /dev/null packages/btrfs-progs/btrfs-progs-fix-return-value.patch:1.1
--- /dev/null   Mon Jun  7 14:14:25 2010
+++ packages/btrfs-progs/btrfs-progs-fix-return-value.patch     Mon Jun  7 
14:14:19 2010
@@ -0,0 +1,32 @@
+From 8b6be4c65eda396e0c42182f4ebf2794c62b442c Mon Sep 17 00:00:00 2001
+From: Josef Bacik <[email protected]>
+Date: Tue, 2 Feb 2010 09:51:15 -0500
+Subject: [PATCH] Btrfs-progs: make btrfsctl return values like everybody else
+
+This patch makes btrfsctl return 0 for success and 1 for failure, which is the
+behavior of all other userspace applications.  Thanks,
+
+Signed-off-by: Josef Bacik <[email protected]>
+---
+ btrfsctl.c |    6 ++----
+ 1 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/btrfsctl.c b/btrfsctl.c
+index 66c4e89..73d9c30 100644
+--- a/btrfsctl.c
++++ b/btrfsctl.c
+@@ -231,9 +231,7 @@ int main(int ac, char **av)
+               printf("ioctl failed with error %d\n", ret);
+       }
+       printf("%s\n", BTRFS_BUILD_VERSION);
+-      if (ret)
+-              exit(0);
+-      else
+-              exit(1);
++
++      return ret ? 1 : 0;
+ }
+ 
+-- 
+1.6.6
+

================================================================
Index: packages/btrfs-progs/btrfs-progs-upstream.patch
diff -u /dev/null packages/btrfs-progs/btrfs-progs-upstream.patch:1.1
--- /dev/null   Mon Jun  7 14:14:25 2010
+++ packages/btrfs-progs/btrfs-progs-upstream.patch     Mon Jun  7 14:14:19 2010
@@ -0,0 +1,3752 @@
+diff --git a/Makefile b/Makefile
+index 8097b5a..525676e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -4,7 +4,7 @@ CFLAGS = -g -Werror -Os
+ objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \
+         root-tree.o dir-item.o file-item.o inode-item.o \
+         inode-map.o crc32c.o rbtree.o extent-cache.o extent_io.o \
+-        volumes.o utils.o
++        volumes.o utils.o btrfs-list.o
+ 
+ #
+ CHECKFLAGS=-D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise \
+@@ -16,7 +16,9 @@ prefix ?= /usr/local
+ bindir = $(prefix)/bin
+ LIBS=-luuid
+ 
+-progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck
++progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck \
++      btrfs \
++      btrfs-map-logical
+ 
+ # make C=1 to enable sparse
+ ifdef C
+@@ -35,6 +37,10 @@ all: version $(progs) manpages
+ version:
+       bash version.sh
+ 
++btrfs: $(objects) btrfs.o btrfs_cmds.o
++      gcc $(CFLAGS) -o btrfs btrfs.o btrfs_cmds.o \
++              $(objects) $(LDFLAGS) $(LIBS)
++
+ btrfsctl: $(objects) btrfsctl.o
+       gcc $(CFLAGS) -o btrfsctl btrfsctl.o $(objects) $(LDFLAGS) $(LIBS)
+ 
+@@ -56,6 +62,9 @@ btrfs-debug-tree: $(objects) debug-tree.o
+ btrfstune: $(objects) btrfstune.o
+       gcc $(CFLAGS) -o btrfstune $(objects) btrfstune.o $(LDFLAGS) $(LIBS)
+ 
++btrfs-map-logical: $(objects) btrfs-map-logical.o
++      gcc $(CFLAGS) -o btrfs-map-logical $(objects) btrfs-map-logical.o 
$(LDFLAGS) $(LIBS)
++
+ btrfs-image: $(objects) btrfs-image.o
+       gcc $(CFLAGS) -o btrfs-image $(objects) btrfs-image.o -lpthread -lz 
$(LDFLAGS) $(LIBS)
+ 
+@@ -68,6 +77,9 @@ quick-test: $(objects) quick-test.o
+ convert: $(objects) convert.o
+       gcc $(CFLAGS) -o btrfs-convert $(objects) convert.o -lext2fs $(LDFLAGS) 
$(LIBS)
+ 
++ioctl-test: $(objects) ioctl-test.o
++      gcc $(CFLAGS) -o ioctl-test $(objects) ioctl-test.o $(LDFLAGS) $(LIBS)
++
+ manpages:
+       cd man; make
+ 
+diff --git a/btrfs-defrag.c b/btrfs-defrag.c
+new file mode 100644
+index 0000000..8f1525a
+--- /dev/null
++++ b/btrfs-defrag.c
+@@ -0,0 +1,39 @@
++/*
++ * Copyright (C) 2010 Oracle.  All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public
++ * License v2 as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public
++ * License along with this program; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 021110-1307, USA.
++ */
++
++#ifndef __CHECKER__
++#include <sys/ioctl.h>
++#include <sys/mount.h>
++#include "ioctl.h"
++#endif
++#include <stdio.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <ctype.h>
++#include <unistd.h>
++#include <dirent.h>
++#include <libgen.h>
++#include <getopt.h>
++#include "kerncompat.h"
++#include "ctree.h"
++#include "transaction.h"
++#include "utils.h"
++#include "version.h"
++
+diff --git a/btrfs-list.c b/btrfs-list.c
+new file mode 100644
+index 0000000..7741705
+--- /dev/null
++++ b/btrfs-list.c
+@@ -0,0 +1,825 @@
++/*
++ * Copyright (C) 2010 Oracle.  All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public
++ * License v2 as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public
++ * License along with this program; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 021110-1307, USA.
++ */
++
++#ifndef __CHECKER__
++#include <sys/ioctl.h>
++#include <sys/mount.h>
++#include "ioctl.h"
++#endif
++#include <stdio.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <dirent.h>
++#include <libgen.h>
++#include "kerncompat.h"
++#include "ctree.h"
++#include "transaction.h"
++#include "utils.h"
++#include "version.h"
++
++/* we store all the roots we find in an rbtree so that we can
++ * search for them later.
++ */
++struct root_lookup {
++      struct rb_root root;
++};
++
++/*
++ * one of these for each root we find.
++ */
++struct root_info {
++      struct rb_node rb_node;
++
++      /* this root's id */
++      u64 root_id;
++
++      /* the id of the root that references this one */
++      u64 ref_tree;
++
++      /* the dir id we're in from ref_tree */
++      u64 dir_id;
++
++      /* path from the subvol we live in to this root, including the
++       * root's name.  This is null until we do the extra lookup ioctl.
++       */
++      char *path;
++
++      /* the name of this root in the directory it lives in */
++      char name[];
++};
++
++static void root_lookup_init(struct root_lookup *tree)
++{
++      tree->root.rb_node = NULL;
++}
++
++static int comp_entry(struct root_info *entry, u64 root_id, u64 ref_tree)
++{
++      if (entry->root_id > root_id)
++              return 1;
++      if (entry->root_id < root_id)
++              return -1;
++      if (entry->ref_tree > ref_tree)
++              return 1;
++      if (entry->ref_tree < ref_tree)
++              return -1;
++      return 0;
++}
++
++/*
++ * insert a new root into the tree.  returns the existing root entry
++ * if one is already there.  Both root_id and ref_tree are used
++ * as the key
++ */
++static struct rb_node *tree_insert(struct rb_root *root, u64 root_id,
++                                 u64 ref_tree, struct rb_node *node)
++{
++      struct rb_node ** p = &root->rb_node;
++      struct rb_node * parent = NULL;
++      struct root_info *entry;
++      int comp;
++
++      while(*p) {
++              parent = *p;
++              entry = rb_entry(parent, struct root_info, rb_node);
++
++              comp = comp_entry(entry, root_id, ref_tree);
++
++              if (comp < 0)
++                      p = &(*p)->rb_left;
++              else if (comp > 0)
++                      p = &(*p)->rb_right;
++              else
++                      return parent;
++      }
++
++      entry = rb_entry(parent, struct root_info, rb_node);
++      rb_link_node(node, parent, p);
++      rb_insert_color(node, root);
++      return NULL;
++}
++
++/*
++ * find a given root id in the tree.  We return the smallest one,
++ * rb_next can be used to move forward looking for more if required
++ */
++static struct root_info *tree_search(struct rb_root *root, u64 root_id)
++{
++      struct rb_node * n = root->rb_node;
++      struct root_info *entry;
++
++      while(n) {
++              entry = rb_entry(n, struct root_info, rb_node);
++
++              if (entry->root_id < root_id)
++                      n = n->rb_left;
++              else if (entry->root_id > root_id)
++                      n = n->rb_right;
++              else {
++                      struct root_info *prev;
++                      struct rb_node *prev_n;
++                      while (1) {
++                              prev_n = rb_prev(n);
++                              if (!prev_n)
++                                      break;
++                              prev = rb_entry(prev_n, struct root_info,
++                                                    rb_node);
++                              if (prev->root_id != root_id)
++                                      break;
++                              entry = prev;
++                              n = prev_n;
++                      }
++                      return entry;
++              }
++      }
++      return NULL;
++}
++
++/*
++ * this allocates a new root in the lookup tree.
++ *
++ * root_id should be the object id of the root
++ *
++ * ref_tree is the objectid of the referring root.
++ *
++ * dir_id is the directory in ref_tree where this root_id can be found.
++ *
++ * name is the name of root_id in that directory
++ *
++ * name_len is the length of name
++ */
++static int add_root(struct root_lookup *root_lookup,
++                  u64 root_id, u64 ref_tree, u64 dir_id, char *name,
++                  int name_len)
++{
++      struct root_info *ri;
++      struct rb_node *ret;
++      ri = malloc(sizeof(*ri) + name_len + 1);
++      if (!ri) {
++              printf("memory allocation failed\n");
++              exit(1);
++      }
++      memset(ri, 0, sizeof(*ri) + name_len + 1);
++      ri->path = NULL;
++      ri->dir_id = dir_id;
++      ri->root_id = root_id;
++      ri->ref_tree = ref_tree;
++      strncpy(ri->name, name, name_len);
++
++      ret = tree_insert(&root_lookup->root, root_id, ref_tree, &ri->rb_node);
++      if (ret) {
++              printf("failed to insert tree %llu\n", (unsigned long 
long)root_id);
++              exit(1);
++      }
++      return 0;
++}
++
++/*
++ * for a given root_info, search through the root_lookup tree to construct
++ * the full path name to it.
++ *
++ * This can't be called until all the root_info->path fields are filled
++ * in by lookup_ino_path
++ */
++static int resolve_root(struct root_lookup *rl, struct root_info *ri)
++{
++      u64 top_id;
++      char *full_path = NULL;
++      int len = 0;
++      struct root_info *found;
++
++      /*
++       * we go backwards from the root_info object and add pathnames
++       * from parent directories as we go.
++       */
++      found = ri;
++      while (1) {
++              char *tmp;
++              u64 next;
++              int add_len = strlen(found->path);
++
++              /* room for / and for null */
++              tmp = malloc(add_len + 2 + len);
++              if (full_path) {
++                      memcpy(tmp + add_len + 1, full_path, len);
++                      tmp[add_len] = '/';
++                      memcpy(tmp, found->path, add_len);
++                      tmp [add_len + len + 1] = '\0';
++                      free(full_path);
++                      full_path = tmp;
++                      len += add_len + 1;
++              } else {
++                      full_path = strdup(found->path);
++                      len = add_len;
++              }
++
++              next = found->ref_tree;
++              /* if the ref_tree refers to ourselves, we're at the top */
++              if (next == found->root_id) {
++                      top_id = next;
++                      break;
++              }
++
++              /*
++               * if the ref_tree wasn't in our tree of roots, we're
++               * at the top
++               */
++              found = tree_search(&rl->root, next);
++              if (!found) {
++                      top_id = next;
++                      break;
++              }
++      }
++      printf("ID %llu top level %llu path %s\n", ri->root_id, top_id,
++             full_path);
++      free(full_path);
++      return 0;
++}
++
++/*
++ * for a single root_info, ask the kernel to give us a path name
++ * inside it's ref_root for the dir_id where it lives.
++ *
++ * This fills in root_info->path with the path to the directory and and
++ * appends this root's name.
++ */
++static int lookup_ino_path(int fd, struct root_info *ri)
++{
++      struct btrfs_ioctl_ino_lookup_args args;
++      int ret;
++
++      if (ri->path)
++              return 0;
++
++      memset(&args, 0, sizeof(args));
++      args.treeid = ri->ref_tree;
++      args.objectid = ri->dir_id;
++
++      ret = ioctl(fd, BTRFS_IOC_INO_LOOKUP, &args);
++      if (ret) {
++              fprintf(stderr, "ERROR: Failed to lookup path for root %llu\n",
++                      (unsigned long long)ri->ref_tree);
++              return ret;
++      }
++
++      if (args.name[0]) {
++              /*
++               * we're in a subdirectory of ref_tree, the kernel ioctl
++               * puts a / in there for us
++               */
++              ri->path = malloc(strlen(ri->name) + strlen(args.name) + 1);
++              if (!ri->path) {
++                      perror("malloc failed");
++                      exit(1);
++              }
++              strcpy(ri->path, args.name);
++              strcat(ri->path, ri->name);
++      } else {
++              /* we're at the root of ref_tree */
++              ri->path = strdup(ri->name);
++              if (!ri->path) {
++                      perror("strdup failed");
++                      exit(1);
++              }
++      }
++      return 0;
++}
++
++/* finding the generation for a given path is a two step process.
++ * First we use the inode loookup routine to find out the root id
++ *
++ * Then we use the tree search ioctl to scan all the root items for a
++ * given root id and spit out the latest generation we can find
++ */
++static u64 find_root_gen(int fd)
++{
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/btrfs-progs/btrfs-progs.spec?r1=1.3&r2=1.4&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to