Re: btrfs-progs: add arg_strtou64 break library btrfs

2014-05-20 Thread Arvin Schnell
On Tue, May 20, 2014 at 06:15:49PM +0800, Dennis Lan (dlan) wrote:
 progs # cat btrfs_mini_tst.c
  /*
   * gcc -o btrfs_mini_tst btrfs_mini_tst.c -lbtrfs
   */
 
   char btrfs_read_and_process_send_stream ();
  int
  main ()
  {
  return btrfs_read_and_process_send_stream ();
  }
 
 progs # gcc -o btrfs_mini_tst btrfs_mini_tst.c -lbtrfs
 /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/../../../../lib64/libbtrfs.so:
 undefined reference to `arg_strtou64'
 collect2: error: ld returned 1 exit status

Hi,

that problem was already found. A fix can be found here:

http://www.spinics.net/lists/linux-btrfs/msg33434.html

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Snapper on Ubuntu

2014-03-16 Thread Arvin Schnell
On Sat, Mar 15, 2014 at 03:05:22PM +0100, Hendrik Friedel wrote:

 When I install snapper I configure it like this
 snapper -c rt create-config /
 snapper -c home create-config /home
 snapper -c root create-config /root
 snapper -c Video create-config /mnt/BTRFS/Video/

Just a recommendation about the config names. At least on
openSUSE root is used for /. I would suggest to use home_root
for /root like the pam-snapper module does.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


patch for ioctl.h

2014-03-05 Thread Arvin Schnell

Hi,

u64 is not known when just including btrfs/ioctl.h. I assume it
should be __u64 as everywhere else in the file.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
diff --git a/ioctl.h b/ioctl.h
index a589cd7..7577862 100644
--- a/ioctl.h
+++ b/ioctl.h
@@ -539,7 +539,7 @@ struct btrfs_ioctl_clone_range_args {
    struct btrfs_ioctl_search_args)
 #define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
    struct btrfs_ioctl_ino_lookup_args)
-#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, u64)
+#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
 #define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
 struct btrfs_ioctl_space_args)
 #define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \


library version defines?

2013-06-03 Thread Arvin Schnell

Hi,

commit 46de1a6ec3dbb0db203baa6c46cb64ba9b000ea2 changed the
parameters of btrfs_read_and_process_send_stream().  This breaks
snapper compilation so I wonder whether we can include version
defines usable for the C preprocessor.  Surely it won't help in
this case anymore but might in the future.

Please find my proposal attached.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
diff --git a/Makefile b/Makefile
index da7438e..8ee372f 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@ cmds_objects = cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o \
 libbtrfs_objects = send-stream.o send-utils.o rbtree.o btrfs-list.o crc32c.o
 libbtrfs_headers = send-stream.h send-utils.h send.h rbtree.h btrfs-list.h \
 	   crc32c.h list.h kerncompat.h radix-tree.h extent-cache.h \
-	   extent_io.h ioctl.h ctree.h
+	   extent_io.h ioctl.h ctree.h version.h
 
 CHECKFLAGS= -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise \
 	-Wuninitialized -Wshadow -Wundef
diff --git a/version.sh b/version.sh
index b81040e..1d9fe9f 100644
--- a/version.sh
+++ b/version.sh
@@ -8,6 +8,10 @@
 
 v=v0.20-rc1
 
+lib_major=0
+lib_minor=1
+lib_patchlevel=0
+
 which git  /dev/null
 if [ $? == 0 -a -d .git ]; then
 if head=`git rev-parse --verify HEAD 2/dev/null`; then
@@ -46,7 +50,17 @@ fi
 
 echo #ifndef __BUILD_VERSION  .build-version.h
 echo #define __BUILD_VERSION  .build-version.h
+echo  .build-version.h
 echo #define BTRFS_BUILD_VERSION \Btrfs $v\  .build-version.h
+echo  .build-version.h
+echo #define BTRFS_LIB_MAJOR $lib_major  .build-version.h
+echo #define BTRFS_LIB_MINOR $lib_minor  .build-version.h
+echo #define BTRFS_LIB_PATCHLEVEL $lib_patchlevel  .build-version.h
+echo  .build-version.h
+echo #define BTRFS_LIB_VERSION ( BTRFS_LIB_MAJOR * 1 + \\  .build-version.h
+echo BTRFS_LIB_MINOR * 100 + \\  .build-version.h
+echo BTRFS_LIB_PATCHLEVEL )  .build-version.h
+echo  .build-version.h
 echo #endif  .build-version.h
 
 diff -q version.h .build-version.h  /dev/null


Re: Diff using send-receive code / RFC

2013-02-10 Thread Arvin Schnell
On Sun, Feb 10, 2013 at 10:21:31PM +0530, nafisa mandliwala wrote:
 Hello,
 We're a team of 4 final year computer science students and are
 working on generating a diff between file system snapshots using the
 send receive code.

This was just implemented in snapper. Unfortunately I was in a
hurry so the code doesn't look so good. Instead of improving the
code in snapper (C++) I thought about implementing it in C so
that it can be included in btrfsprogs (and libbtrfs).

Here is an example:

# btrfs send -a -p /testsuite/.snapshots/1/snapshot 
/testsuite/.snapshots/2/snapshot | cat
At subvol /testsuite/.snapshots/2/snapshot
Comparing testsuite/.snapshots/1/snapshot and testsuite/.snapshots/2/snapshot.
+ /foo
+ /foo/bar
+ /foo/bar/world

Attached you can find my current state. It's completely
unfinished and only works from some test-cases. To get it
compiled you either need some patches posted here earlier
(e.g. NO_FILE_DATA) or must make minor modifications.

But I would like to get feedback about this feature on the list.

Kind Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
/*
 * Copyright (c) 2013 Arvin Schnell aschn...@suse.de
 *
 * All Rights Reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License 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.
 */


#define _GNU_SOURCE

#include fcntl.h
#include sys/stat.h
#include string.h
#include dirent.h
#include unistd.h

#include btrfs/send.h
#include btrfs/send-stream.h
#include btrfs/rbtree.h
#include btrfs/send-analyser.h


struct tree_root {
	struct rb_root rb_root;
};


struct tree_node {
	struct rb_node rb_node;
	char *name;
	unsigned int status;
	struct tree_root children;
};


static void tree_root_init(struct tree_root *root)
{
	root-rb_root = RB_ROOT;
}


static struct tree_node *tree_node_init(const char *name)
{
	struct tree_node *node = malloc(sizeof(struct tree_node));
	node-name = strdup(name);
	node-status = 0;
	tree_root_init(node-children);
	return node;
}


static struct tree_node *tree_find(struct tree_root *root, const char *name)
{
	struct rb_node *rb_node = root-rb_root.rb_node;

	while (rb_node)
	{
		struct tree_node *data = rb_entry(rb_node, struct tree_node, rb_node);

		int result = strcmp(name, data-name);
		if (result  0)
			rb_node = rb_node-rb_left;
		else if (result  0)
			rb_node = rb_node-rb_right;
		else
			return data;
	}

	return NULL;
}


static int tree_insert(struct tree_root *root, struct tree_node *node)
{
	struct rb_node **new = (root-rb_root.rb_node);
	struct rb_node *parent = NULL;

	while (*new)
	{
		struct tree_node *this = rb_entry(*new, struct tree_node, rb_node);
		parent = *new;

		int result = strcmp(node-name, this-name);
		if (result  0)
			new = (*new)-rb_left;
		else if (result  0)
			new = (*new)-rb_right;
		else
			return 0;
	}

	rb_link_node(node-rb_node, parent, new);
	rb_insert_color(node-rb_node, root-rb_root);

	return 1;
}


/* find node or create new one, return 1 if already existing */
static int tree_find_or_insert(struct tree_root *root, const char *name,
			   struct tree_node **node)
{
	struct rb_node **new = (root-rb_root.rb_node);
	struct rb_node *parent = NULL;

	while (*new)
	{
		struct tree_node *this = rb_entry(*new, struct tree_node, rb_node);
		parent = *new;

		int result = strcmp(name, this-name);
		if (result  0)
			new = (*new)-rb_left;
		else if (result  0)
			new = (*new)-rb_right;
		else
		{
			*node = this;
			return 1;
		}
	}

	*node = tree_node_init(name);

	rb_link_node((*node)-rb_node, parent, new);
	rb_insert_color((*node)-rb_node, root-rb_root);

	return 0;
}


static void tree_remove(struct tree_root *root, struct tree_node *node)
{
	rb_erase(node-rb_node, root-rb_root);
	free(node-name);
	free(node);
}


static void tree_cut(struct tree_root *root, struct tree_node *node)
{
	rb_erase(node-rb_node, root-rb_root);
}


static struct tree_node *tree_node_first(struct tree_root *root)
{
	struct rb_node *rb_node = rb_first(root-rb_root);
	if (!rb_node)
		return NULL;
	return rb_entry(rb_node, struct tree_node, rb_node);
}


static struct tree_node *tree_node_next(struct tree_node *node)
{
	struct rb_node *rb_node = rb_next(node-rb_node);
	if (!rb_node)
		return NULL;
	return rb_entry(rb_node, struct tree_node

Re: [PATCH 2/3] btrfs-progs: libify some parts of btrfs-progs

2013-01-14 Thread Arvin Schnell

Hi,

please find attached a patch to make the new libbtrfs usable from
C++ (at least for the parts snapper will likely need).

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
diff --git a/cmds-send.c b/cmds-send.c
index 9b47e70..c51310a 100644
--- a/cmds-send.c
+++ b/cmds-send.c
@@ -40,6 +40,10 @@
 #include send.h
 #include send-utils.h
 
+#ifdef __cplusplus
+extern C {
+#endif
+
 static int g_verbose = 0;
 
 struct btrfs_send {
@@ -654,3 +658,7 @@ int cmd_send(int argc, char **argv)
 {
 	return cmd_send_start(argc, argv);
 }
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extent_io.c b/extent_io.c
index ebb35b2..70ecc48 100644
--- a/extent_io.c
+++ b/extent_io.c
@@ -48,7 +48,7 @@ static struct extent_state *alloc_extent_state(void)
 		return NULL;
 	state-refs = 1;
 	state-state = 0;
-	state-private = 0;
+	state-xprivate = 0;
 	return state;
 }
 
@@ -509,7 +509,7 @@ int set_state_private(struct extent_io_tree *tree, u64 start, u64 private)
 		ret = -ENOENT;
 		goto out;
 	}
-	state-private = private;
+	state-xprivate = private;
 out:
 	return ret;
 }
@@ -530,7 +530,7 @@ int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private)
 		ret = -ENOENT;
 		goto out;
 	}
-	*private = state-private;
+	*private = state-xprivate;
 out:
 	return ret;
 }
diff --git a/extent_io.h b/extent_io.h
index 4553859..6d8404d 100644
--- a/extent_io.h
+++ b/extent_io.h
@@ -54,7 +54,7 @@ struct extent_state {
 	u64 end;
 	int refs;
 	unsigned long state;
-	u64 private;
+	u64 xprivate;
 };
 
 struct extent_buffer {
@@ -93,8 +93,8 @@ int extent_buffer_uptodate(struct extent_buffer *eb);
 int set_extent_buffer_uptodate(struct extent_buffer *eb);
 int clear_extent_buffer_uptodate(struct extent_io_tree *tree,
 struct extent_buffer *eb);
-int set_state_private(struct extent_io_tree *tree, u64 start, u64 private);
-int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private);
+int set_state_private(struct extent_io_tree *tree, u64 start, u64 xprivate);
+int get_state_private(struct extent_io_tree *tree, u64 start, u64 *xprivate);
 struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree,
 	 u64 bytenr, u32 blocksize);
 struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree,
diff --git a/ioctl.h b/ioctl.h
index b7f1ce3..56de39f 100644
--- a/ioctl.h
+++ b/ioctl.h
@@ -22,6 +22,10 @@
 #include linux/ioctl.h
 #include time.h
 
+#ifdef __cplusplus
+extern C {
+#endif
+
 #define BTRFS_IOCTL_MAGIC 0x94
 #define BTRFS_VOL_NAME_MAX 255
 
@@ -439,4 +443,9 @@ struct btrfs_ioctl_clone_range_args {
 	struct btrfs_ioctl_qgroup_create_args)
 #define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
 	struct btrfs_ioctl_qgroup_limit_args)
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/list.h b/list.h
index d31090c..50f4619 100644
--- a/list.h
+++ b/list.h
@@ -19,8 +19,8 @@
 #ifndef _LINUX_LIST_H
 #define _LINUX_LIST_H
 
-#define LIST_POISON1  ((void *) 0x00100100)
-#define LIST_POISON2  ((void *) 0x00200200)
+#define LIST_POISON1  ((struct list_head *) 0x00100100)
+#define LIST_POISON2  ((struct list_head *) 0x00200200)
 
 /*
  * Simple doubly linked list implementation.
@@ -54,17 +54,17 @@ static inline void INIT_LIST_HEAD(struct list_head *list)
  * the prev/next entries already!
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void __list_add(struct list_head *new,
+static inline void __list_add(struct list_head *xnew,
 			  struct list_head *prev,
 			  struct list_head *next)
 {
-	next-prev = new;
-	new-next = next;
-	new-prev = prev;
-	prev-next = new;
+	next-prev = xnew;
+	xnew-next = next;
+	xnew-prev = prev;
+	prev-next = xnew;
 }
 #else
-extern void __list_add(struct list_head *new,
+extern void __list_add(struct list_head *xnew,
 			  struct list_head *prev,
 			  struct list_head *next);
 #endif
@@ -78,12 +78,12 @@ extern void __list_add(struct list_head *new,
  * This is good for implementing stacks.
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void list_add(struct list_head *new, struct list_head *head)
+static inline void list_add(struct list_head *xnew, struct list_head *head)
 {
-	__list_add(new, head, head-next);
+	__list_add(xnew, head, head-next);
 }
 #else
-extern void list_add(struct list_head *new, struct list_head *head);
+extern void list_add(struct list_head *xnew, struct list_head *head);
 #endif
 
 
@@ -95,9 +95,9 @@ extern void list_add(struct list_head *new, struct list_head *head);
  * Insert a new entry before the specified head.
  * This is useful for implementing queues.
  */
-static inline void list_add_tail(struct list_head *new, struct list_head *head)
+static inline void list_add_tail(struct list_head *xnew, struct list_head *head)
 {
-	__list_add(new, head-prev, head);
+	__list_add(xnew, head-prev, head

Re: [PATCH 2/3] btrfs-progs: libify some parts of btrfs-progs

2013-01-14 Thread Arvin Schnell
On Mon, Jan 14, 2013 at 10:14:03AM -0800, Mark Fasheh wrote:
 Hi Arvin!
 
 On Mon, Jan 14, 2013 at 03:18:14PM +0100, Arvin Schnell wrote:
  please find attached a patch to make the new libbtrfs usable from
  C++ (at least for the parts snapper will likely need).
 
 Thanks, that looks great. I'll integrate it into my stack of patches and
 send it out with the next set.
 
 Can I put:
 
 Signed-off-by: Arvin Schnell aschn...@suse.de
 
 at the bottom of the patch to indicate that started with you?

Sure.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Snapper snapshot comparison algorithm - send/receive questions

2012-12-03 Thread Arvin Schnell
On Sat, Dec 01, 2012 at 01:24:20PM +0530, nafisa mandliwala wrote:

 I needed help with understanding the snapshot comparison algorithm
 that snapper uses and its shortcomings. From reading the code, what I
 understood is that it does a block by block compare. I'm not very sure
 if that's the best way to go about it. Also, since the send receive
 code is still in development stages, is there a scope to add more
 functionality to it?

Mainly snapper does a directory traversal and a block-by-block
comparison of files which is indeed a inefficient comparison
algorithm.

I already had a look at using the new send/receive ioctl to
improve the comparison and have a few question:

1. snapper only needs to know that a file has changed but the
   send stream also contains the new content which might has to
   be read from disk.

   Mark Fasheh has made a patch for a flag for the send ioctl to
   not include the content (don't know if he posted it here since
   I was kicked of the list twice). With no write commands in the
   stream how can I detect a file content change? Currently there
   seems to be a truncate after the write but is that guaranteed?

   Btw: There are many apparently useless truncates, e.g. after a
   chmod. What are these good for?

2. Is it possible to add a ioctl for send that takes open
   file-descriptors for parent_root and clone_sources? Otherwise
   it's insecure to use from snapper (which has root privileges
   and sometimes operates in directories users can modify). Such
   a ioctl would also reduce the number of btrfs related
   functions needed.

3. Overall lots of functions are needed to use the
   send/receive. Are there any plans to create a btrfs-library
   that contains the required functions
   e.g. btrfs_read_and_process_send_stream, subvol_uuid_search
   and tree_search?

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: snapper for Ubuntu? (WAS: btrfs auto snapshot)

2012-04-11 Thread Arvin Schnell
On Tue, Apr 10, 2012 at 09:50:32PM +0700, Fajar A. Nugraha wrote:
 On Tue, Apr 10, 2012 at 9:35 PM, Matthias G. Eckermann m...@suse.com wrote:
  On 2012-04-10 T 20:48 +0700 Fajar A. Nugraha wrote:
  How can I create config for /data or other directories (other than
  manually creating the config file and .snapshots directory)?
 
  This should do it:
 
  sudo snapper -c home create-config /home
  sudo snapper -c data create-config /data
 
  The reasons for the extra -c name is that you have to
  tell snapper, which name to choose for the configuration
  you want to create. This name is the one you can reference
  in future actions such as create/modify/delete.
 
 Great! That works, thanks.
 
 Is there an oposite of create-config, i.e. delete for just one subvolume?
 delete-config seems to delete everything (configs for all subvolume
 and all snapshots).

delete-config only deletes one config. Otherwise that is a bug.

 Also, one minor detail, I noticed that the cron configuration file is
 /etc/sysconfig/snapper. It should be /etc/default/snapper in
 ubuntu/debian.

Thanks for the hint.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: snapper for Ubuntu? (WAS: btrfs auto snapshot)

2012-04-10 Thread Arvin Schnell
On Mon, Apr 09, 2012 at 08:18:45AM +0700, Fajar A. Nugraha wrote:
 On Thu, Mar 1, 2012 at 8:48 PM, Arvin Schnell aschn...@suse.de wrote:
  We have now created a project in the openSUSE buildservice were
  we provide snapper packages for various distributions, e.g. RHEL6
  and Fedora 16. Please find the downloads at:
 
   http://download.opensuse.org/repositories/filesystems:/snapper/
 
  I'll also add a link from the snapper home page:
 
   http://en.opensuse.org/Portal:Snapper.
 
  I have tested snapper on Fedora 16 and found no problems.
 
 Hi Arvin,
 
 I noticed that openSUSE buildservice now provides debs for ubuntu as
 well. I can't seem to find a way to add it to apt source list though,
 using the usual line
 
 deb uri distribution [component1] 

You can use these commands:

echo 'deb 
http://download.opensuse.org/repositories/filesystems:/snapper/Debian_6.0/ /' 
 /etc/apt/sources.list

apt-get update
apt-get install snapper

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Snapper packages for Ubuntu

2012-04-10 Thread Arvin Schnell
On Tue, Apr 10, 2012 at 05:37:38PM +0700, Fajar A. Nugraha wrote:
 Hi,
 
 I've created snapper packages for Ubuntu, available on
 https://launchpad.net/~snapper/+archive/stable. For those new to
 snapper, it's a tool for managing btrfs snapshots
 (http://en.opensuse.org/Portal:Snapper). It depends on libblocxx
 available from https://launchpad.net/~bjoern-esser-n/+archive/blocxx ,
 and currently uses git source up to commit 50dec40. I've done some
 limited testing and it seems to to work correctly so far.

libblocxx is not required for snapper anymore since about a
month. It's checked during configure.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Snapper packages for Ubuntu

2012-04-10 Thread Arvin Schnell
On Tue, Apr 10, 2012 at 08:08:15PM +0700, Fajar A. Nugraha wrote:
 On Tue, Apr 10, 2012 at 6:50 PM, Arvin Schnell aschn...@suse.de wrote:

  libblocxx is not required for snapper anymore since about a
  month. It's checked during configure.
 
 You're right. I just tested it, and not having libblocxx during
 compilation results in less dependencies (namely libblocxx itself,
 plus libssl, libcrypto, and libpcre).
 
 What functionality, if any, is not available when not using libblocxx?
 Since it's still used when present during configure, I assume it's
 good for something.

It's just used for logging. With blocxx an application linking
libsnapper can use blocxx functions to control and redirect
logging.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] [RFC] Add btrfs autosnap feature

2012-03-02 Thread Arvin Schnell
On Thu, Mar 01, 2012 at 05:54:40AM -0600, cwillu wrote:

 There doesn't appear to be any reason for the scratch file to exist at
 all (one can build up the hash while reading the directories), and
 keeping a scratch file in /etc/ is poor practice in the first place
 (that's what /tmp and/or /var/run is for).  It's also a lot of io to
 stat every file in the subvolume every time you make a snapshot, and
 I'm not convinced that the walk is actually correctly implemented:
 what stops an autosnap of / from including all of /proc and /sys in
 the hash?
 
 Perhaps all that is unnecessary:  rather than doing the walk, why not
 make use of btrfs subvolume find-new (or rather, the syscalls it
 uses)?

While developing snapper I faced similar problems and looked at
find-new but unfortunately it is not sufficient. E.g. when a file
is deleted find-new does not report anything, see the reply to my
mail here one year ago [1]. Also for newly created empty files
find-new reports nothing, the same with metadata changes.

If I'm wrong or find-new gets extended I happy to implement it in
snapper.

Regards,
  Arvin

[1] http://www.spinics.net/lists/linux-btrfs/msg08683.html

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC] btrfs auto snapshot

2012-03-01 Thread Arvin Schnell
On Thu, Feb 23, 2012 at 04:54:06PM +0700, Fajar A. Nugraha wrote:
 On Thu, Aug 18, 2011 at 12:38 AM, Matthias G. Eckermann m...@suse.com wrote:

  are available in the openSUSE buildservice at:
 
         http://download.opensuse.org/repositories/home:/mge1512:/snapper/
 
 
 Hi Matthias,
 
 I'm testing your packages on top of RHEL6 + kernel 3.2.7. A small
 suggestion, you should include /etc/sysconfig/snapper in the package
 (at least for RHEL6, haven't tested the other ones). Even if it just
 contains
 
 SNAPPER_CONFIGS=

Hi Fajar,

thanks for reporting that issue, I have fixed it now.

We have now created a project in the openSUSE buildservice were
we provide snapper packages for various distributions, e.g. RHEL6
and Fedora 16. Please find the downloads at:

  http://download.opensuse.org/repositories/filesystems:/snapper/

I'll also add a link from the snapper home page:

  http://en.opensuse.org/Portal:Snapper.

I have tested snapper on Fedora 16 and found no problems.

Regards,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 
16746 (AG Nürnberg)
Maxfeldstraße 5
90409 Nürnberg
Germany
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Comparing snapshots?

2011-02-25 Thread Arvin Schnell
Hi,

for a backup program I have to find all differing files
(including metadata) in two snapshots taken from the same
subvolume.

Having looked at the find-new command I thought about this
process:

1. Get the two transids when the two snapshots were created.

2. Query modifications to the original subvolume between the two
   transids.

Is the general process corrent or have I overseen something?

AFAIS the btrfs tool does not provide the required
information/commands. Would it be possible to add those?

Thanks in advance,
  Arvin

-- 
Arvin Schnell, aschn...@suse.de
Senior Software Engineer, Research  Development
SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html