Re: [PATCH 1/5] Add support for read-only subvolumes.

2011-04-26 Thread Li Zefan
 +subvol = argv[optind+1];
 +dst = argv[optind+2];
 +struct btrfs_ioctl_vol_args_v2  args;
 
 Does the standard C allow to define a variable in the middle in a
 function instead of in the begin ?
 Anyway, even not required, I suggest to fill args by zero.
 
 + memset(args, 0, sizeog(args));
 

It's necessary, otherwise args.unused[4] and args.transid will have
arbitrary value.
--
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 v2 0/5] Add user-space support for read-only snapshot creation.

2011-04-26 Thread Andreas Philipp
Changelog v2:
  - Fixed uninitialized variable (args).
  - Corrected order of patches to make everything compile.
  - Fixed some style errors.

There is kernel side support for the creation of read-only snapshots
for some time now, but I did not find any patches for the userspace
btrfs utilites. Thus I created this patchset which is tested and
working with kernel version 2.6.39-rc2.

Andreas Philipp (5):
  Added support for an additional ioctl.
  Add support for read-only subvolumes.
  Support the new parameters in do_clone(int argc, char** argv).
  Test the additional ioctl.
  Updated manpage for btrfs subvolume snapshot.

 btrfs.c|6 +++---
 btrfs_cmds.c   |   48 
 ioctl-test.c   |1 +
 ioctl.h|   14 ++
 man/btrfs.8.in |   11 ++-
 5 files changed, 64 insertions(+), 16 deletions(-)

-- 
1.7.4.1

--
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 1/5] Added support for an additional ioctl.

2011-04-26 Thread Andreas Philipp
Added BTRFS_IOC_SNAP_CREATE_V2 and struct btrfs_ioctl_vol_args_v2 as
defined in fs/btrfs/ioctl.h in the kernel sources.

Signed-off-by: Andreas Philipp philipp.andr...@gmail.com
---
 ioctl.h |   14 ++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/ioctl.h b/ioctl.h
index 776d7a9..358f814 100644
--- a/ioctl.h
+++ b/ioctl.h
@@ -30,6 +30,17 @@ struct btrfs_ioctl_vol_args {
char name[BTRFS_PATH_NAME_MAX + 1];
 };
 
+#define BTRFS_SUBVOL_RDONLY(1ULL  1)
+#define BTRFS_SUBVOL_NAME_MAX 4039
+
+struct btrfs_ioctl_vol_args_v2 {
+   __s64 fd;
+   __u64 transid;
+   __u64 flags;
+   __u64 unused[4];
+   char name[BTRFS_SUBVOL_NAME_MAX + 1];
+};
+
 struct btrfs_ioctl_search_key {
/* which root are we searching.  0 is the tree of tree roots */
__u64 tree_id;
@@ -132,6 +143,7 @@ struct btrfs_ioctl_space_args {
struct btrfs_ioctl_space_info spaces[0];
 };
 
+/* BTRFS_IOC_SNAP_CREATE is no longer used by the btrfs command */
 #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
   struct btrfs_ioctl_vol_args)
 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
@@ -169,4 +181,6 @@ struct btrfs_ioctl_space_args {
 #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, \
+  struct btrfs_ioctl_vol_args_v2)
 #endif
-- 
1.7.4.1

--
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 5/5] Updated manpage for btrfs subvolume snapshot.

2011-04-26 Thread Andreas Philipp

Signed-off-by: Andreas Philipp philipp.andr...@gmail.com
---
 man/btrfs.8.in |   11 ++-
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/man/btrfs.8.in b/man/btrfs.8.in
index 26ef982..b59bc6f 100644
--- a/man/btrfs.8.in
+++ b/man/btrfs.8.in
@@ -5,7 +5,7 @@
 .SH NAME
 btrfs \- control a btrfs filesystem
 .SH SYNOPSIS
-\fBbtrfs\fP \fBsubvolume snapshot\fP\fI source [dest/]name\fP
+\fBbtrfs\fP \fBsubvolume snapshot\fP\fI [-r] source [dest/]name\fP
 .PP
 \fBbtrfs\fP \fBsubvolume delete\fP\fI subvolume\fP
 .PP
@@ -70,10 +70,11 @@ command.
 .SH COMMANDS
 .TP
 
-\fBsubvolume snapshot\fR\fI source [dest/]name\fR
-Create a writable snapshot of the subvolume \fIsource\fR with the name
-\fIname\fR in the \fIdest\fR directory. If \fIsource\fR is not a
-subvolume, \fBbtrfs\fR returns an error.
+\fBsubvolume snapshot\fR\fI [-r] source [dest/]name\fR
+Create a writable/readonly snapshot of the subvolume \fIsource\fR with the
+name \fIname\fR in the \fIdest\fR directory. If \fIsource\fR is not a
+subvolume, \fBbtrfs\fR returns an error. If \fI-r\fR is given, the snapshot
+will be readonly.
 .TP
 
 \fBsubvolume delete\fR\fI subvolume\fR
-- 
1.7.4.1

--
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 3/5] Support the new parameters in do_clone(int argc, char** argv).

2011-04-26 Thread Andreas Philipp
Now 'btrfs subvolume snapshot' takes not two but only at least two
parameters. Additionally, the help message is updated accordingly.

Signed-off-by: Andreas Philipp philipp.andr...@gmail.com
---
 btrfs.c |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/btrfs.c b/btrfs.c
index 46314cf..f70d64b 100644
--- a/btrfs.c
+++ b/btrfs.c
@@ -44,9 +44,9 @@ static struct Command commands[] = {
/*
avoid short commands different for the case only
*/
-   { do_clone, 2,
- subvolume snapshot, source [dest/]name\n
-   Create a writable snapshot of the subvolume source with\n
+   { do_clone, -2,
+ subvolume snapshot, [-r] source [dest/]name\n
+   Create a writable/readonly snapshot of the subvolume source 
with\n
the name name in the dest directory.
},
{ do_delete_subvolume, 1,
-- 
1.7.4.1

--
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 2/5] Add support for read-only subvolumes.

2011-04-26 Thread Andreas Philipp
Use BTRFS_IOC_CREATE_SNAP_V2 instead of BTRFS_IOC_CREATE_SNAP and add
an option for the creation of a readonly snapshot.

Signed-off-by: Andreas Philipp philipp.andr...@gmail.com
---
 btrfs_cmds.c |   48 
 1 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/btrfs_cmds.c b/btrfs_cmds.c
index 8031c58..9367bac 100644
--- a/btrfs_cmds.c
+++ b/btrfs_cmds.c
@@ -43,7 +43,7 @@
 
 #ifdef __CHECKER__
 #define BLKGETSIZE64 0
-#define BTRFS_IOC_SNAP_CREATE 0
+#define BTRFS_IOC_SNAP_CREATE_V2 0
 #define BTRFS_VOL_NAME_MAX 255
 struct btrfs_ioctl_vol_args { char name[BTRFS_VOL_NAME_MAX]; };
 static inline int ioctl(int fd, int define, void *arg) { return 0; }
@@ -310,13 +310,38 @@ int do_subvol_list(int argc, char **argv)
 int do_clone(int argc, char **argv)
 {
char*subvol, *dst;
-   int res, fd, fddst, len;
+   int res, fd, fddst, len, optind = 0, readonly = 0;
char*newname;
char*dstdir;
+   struct btrfs_ioctl_vol_args_v2  args;
 
-   subvol = argv[1];
-   dst = argv[2];
-   struct btrfs_ioctl_vol_args args;
+   memset(args, 0, sizeof(args));
+
+   while (1) {
+   int c = getopt(argc, argv, r);
+
+   if (c  0)
+   break;
+   switch (c) {
+   case 'r':
+   optind++;
+   readonly = 1;
+   break;
+   default:
+   fprintf(stderr,
+   Invalid arguments for subvolume snapshot\n);
+   free(argv);
+   return 1;
+   }
+   }
+   if (argc - optind  2) {
+   fprintf(stderr, Invalid arguments for subvolume snapshot\n);
+   free(argv);
+   return 1;
+   }
+
+   subvol = argv[optind+1];
+   dst = argv[optind+2];
 
res = test_issubvolume(subvol);
if(res0){
@@ -372,11 +397,18 @@ int do_clone(int argc, char **argv)
return 12;
}
 
-   printf(Create a snapshot of '%s' in '%s/%s'\n,
-  subvol, dstdir, newname);
+   if (readonly) {
+   args.flags |= BTRFS_SUBVOL_RDONLY;
+   printf(Create a readonly snapshot of '%s' in '%s/%s'\n,
+  subvol, dstdir, newname);
+   } else {
+   printf(Create a snapshot of '%s' in '%s/%s'\n,
+  subvol, dstdir, newname);
+   }
+
args.fd = fd;
strcpy(args.name, newname);
-   res = ioctl(fddst, BTRFS_IOC_SNAP_CREATE, args);
+   res = ioctl(fddst, BTRFS_IOC_SNAP_CREATE_V2, args);
 
close(fd);
close(fddst);
-- 
1.7.4.1

--
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 4/5] Test the additional ioctl.

2011-04-26 Thread Andreas Philipp

Signed-off-by: Andreas Philipp philipp.andr...@gmail.com
---
 ioctl-test.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/ioctl-test.c b/ioctl-test.c
index 7cf3bc2..1c27d61 100644
--- a/ioctl-test.c
+++ b/ioctl-test.c
@@ -22,6 +22,7 @@ unsigned long ioctls[] = {
BTRFS_IOC_INO_LOOKUP,
BTRFS_IOC_DEFAULT_SUBVOL,
BTRFS_IOC_SPACE_INFO,
+   BTRFS_IOC_SNAP_CREATE_V2,
0 };
 
 int main(int ac, char **av)
-- 
1.7.4.1

--
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


[GIT PULL] Btrfs plugging

2011-04-26 Thread Chris Mason
Hi everyone,

The for-linus branch of the btrfs unstable tree:

git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git for-linus

Has a single commit for the btrfs bio submission worker threads.  These
gather up IOs when the checksumming or compression threads are done with
the CPU intensive work.  Since the submission threads go one device at a
time, they want to unplug after finishing off all the bios for one
device.

Jens ripped this code out when he did the plugging work, I had promised
to redo it in the new framework.

Instead of the normal shortlog:

commit 211588ad1902df57beeeadc9b44546540fa4bd81
Author: Chris Mason chris.ma...@oracle.com
Date:   Tue Apr 19 20:12:40 2011 -0400

Btrfs: do some plugging in the submit_bio threads

The Btrfs submit bio threads have a small number of
threads responsible for pushing down bios we've collected
for a large number of devices.

Since we do all the bios for a single device at once,
we want to make sure we unplug and send down the bios
for each device as we're done processing them.

The new plugging API removed the btrfs code to
unplug while processing bios, this adds it back with
the new API.

Signed-off-by: Chris Mason chris.ma...@oracle.com

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 309a57b..c7367ae 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -155,6 +155,15 @@ static noinline int run_scheduled_bios(struct btrfs_device 
*device)
unsigned long limit;
unsigned long last_waited = 0;
int force_reg = 0;
+   struct blk_plug plug;
+
+   /*
+* this function runs all the bios we've collected for
+* a particular device.  We don't want to wander off to
+* another device without first sending all of these down.
+* So, setup a plug here and finish it off before we return
+*/
+   blk_start_plug(plug);
 
bdi = blk_get_backing_dev_info(device-bdev);
fs_info = device-dev_root-fs_info;
@@ -294,6 +303,7 @@ loop_lock:
spin_unlock(device-io_lock);
 
 done:
+   blk_finish_plug(plug);
return 0;
 }
 
--
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


[GIT PULL] Btrfs updates

2011-04-26 Thread Chris Mason
Hi everyone,

The master branch of the btrfs unstable repo:

git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git master

Has a few bug fixes.  Josef fixed up a crash in the free space cache
error handling code, and it should close out the open bugs there.

Li Zefan found a slab corruption in btrfs fitrim support.

Otherwise, these are smaller fixes for corner cases.

This is a separate pull from my plugging fixes because this is against
2.6.38, while the plugging stuff was on top of 2.6.39-rc4.

David Sterba (1) commits (+1/-0):
btrfs: add missing spin_unlock to a rare exit path

Itaru Kitayama (1) commits (+1/-1):
btrfs: fix wrong allocating flag when reading page

Josef Bacik (2) commits (+8/-5):
Btrfs: free bitmaps properly when evicting the cache (+7/-4)
Btrfs: put the right bio if we have an error (+1/-1)

Li Zefan (1) commits (+1/-1):
Btrfs: Free free_space item properly in btrfs_trim_block_group()

Tsutomu Itoh (3) commits (+21/-8):
Btrfs: fix missing mutex_unlock in btrfs_del_dir_entries_in_log() (+5/-2)
Btrfs: cleanup error handling in inode.c (+9/-6)
Btrfs: check return value of kmalloc() (+7/-0)

Total: (8) commits (+32/-15)

 fs/btrfs/disk-io.c  |1 +
 fs/btrfs/extent-tree.c  |4 
 fs/btrfs/extent_io.c|2 +-
 fs/btrfs/free-space-cache.c |   13 -
 fs/btrfs/inode.c|   20 +---
 fs/btrfs/tree-log.c |7 +--
 6 files changed, 32 insertions(+), 15 deletions(-)
--
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 V8 4/8] mm/fs: add hooks to support cleancache

2011-04-26 Thread Dan Magenheimer
 From: Minchan Kim [mailto:minchan@gmail.com]
 On Sat, Apr 16, 2011 at 3:53 AM, Dan Magenheimer
 dan.magenhei...@oracle.com wrote:
  From: OGAWA Hirofumi [mailto:hirof...@mail.parknet.co.jp]
 
  Andrew Morton a...@linux-foundation.org writes:
 
  Andrew, I wonder if you would be so kind as to read the following
  and make a ruling.  If you determine a preferable set of names,
  I will abide by your decision and repost (if necessary).
 
  The problem is this: The English language has a limited number
  of words that can be used to represent data motion and mapping
  and most/all of them are already used in the kernel, often,
  to quote Andrew, in confusing ways.  Complicating this, I
  think the semantics of the cleancache operations are different
  from the semantics of any other kernel operation... intentionally
  so, because the value of cleancache is a direct result of those
  differing semantics.  And the cleancache semantics
  are fairly complex (again intentionally) so a single function
  name can't possibly describe the semantics.
 
  The cleancache operations are:
  - put (page)
  - get (page)
  - flush page
  - flush inode
  - init fs
  - flush fs
 
  I think these names are reasonable representations of the
  semantics of the operations performed... but I'm not a kernel
  expert so there is certainly room for disagreement.  Though I
  absolutely recognize the importance of a name, I am primarily
  interested in merging the semantics of the operations and
  would happily accept any name that kernel developers could
  agree on.  However, I fear that there will be NO name that
  will satisfy all, so would prefer to keep the existing names.
  If some renaming is eventually agreed upon, this could be done
  post-merge.
 
  Here's a brief description of the semantics:
  :
   semantics for other operations elided
  :
  The cleancache operation currently known as get has the
  following semantics:  Derive the filesystem-determined handle
  from this struct page.  If cleancache contains a page matching
  that handle, recreate the page of data from cleancache and
  place the results in the pageframe referred to by the
  struct page.  Then delete in cleancache any record of the
  handle and any data associated with it, so that a
  subsequent get will no longer find a match for the handle;
  any space used for the data can also be freed.
  :
   semantics for other operations elided
  :
 
 At least, I didn't confused your semantics except just flush. That's
 why I suggested only flush but after seeing your explaining, there is
 another thing I want to change. The get/put is common semantic of
 reference counting in kernel but in POV your semantics, it makes sense
 to me but get has a exclusive semantic so I want to represent it with
 API name. Maybe cleancache_get_page_exclusive.
 
 The summary is that I don't want to change all API name. Just two
 thing.
 (I am not sure you and others agree on me. It's just suggestion).
 
 1. cleancache_flush_page - cleancache_[invalidate|remove]_page
 2. cleancache_get_page - cleancache_get_page_exclusive
 

Hi Minchan --

Thanks for continuing to be interested in this and sorry for my
delayed response.

Actually, your comment about get_page_exclusive points out an
incompleteness in my description of the semantics for
cleancache_get_page.

First, I forgot to list cleancache_init_shared_fs, which is
the equivalent of cleancache_init_fs but used for clustered
filesystems.  (Support is included in the patch for ocfs2 but
I haven't played with it in quite some time and my focus has
been on the other filesystems, so it slipped my mind :-}

The cleancache_get_page operation has a slightly different semantics
depending on which of the init_fs calls was used.  However, the
location of the cleancache_get_page hook is the same regardless
of the fs, so the name of the operation must represent both
semantics.  In the case of init_fs (non-shared), the behavior
of cleancache_get_page is that the get is destructive; the page
is removed from cleancache on a successful get.  In the case of
a init_shared_fs, however, the get is non-destructive; the
page is NOT removed from cleancache.  When cleancache contains
pages from multiple kernels (e.g. Xen guests or different machines
in a RAMster cluster), this semantic difference can make a big
performance difference for a clustered filesystem.  Since zcache
only contains pages for a single kernel, the difference is moot.

Because of this, I am hesitant to add exclusive to the
end of the name of the operation.

 BTW, Nice description.
 Please include it in documentation if we can't reach the conclusion.
 It will help others to understand semantic of cleancache.

Thanks!  Nearly all of the description already exists in various
places in the patch but I agree that it would be good if I add
a new section to the Documentation file with the exact semantics.

Dan
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs 

Observed unexpected behavior of BTRFS in d_instantiate

2011-04-26 Thread Casey Schaufler


I have been tracking down an problem that we've been seeing
with Smack on top of btrfs and have narrowed it down to a check
in smack_d_instantiate() that checks to see if the underlying
filesystem supports extended attributes by looking at

inode-i_op-getxattr

If the filesystem has no entry for getxattr it is assumed that
it does not support extended attributes. The Smack code clearly
finds this value to be NULL for btrfs and uses a fallback value.
Clearly something is amiss, as other code paths clearly find the
i_op-getxattr function and use it to effect. The btrfs code
quite obviously includes getxattr functions.

So, what is btrfs up to such that the inode ops does not include
getxattr when security_d_instantiate is called? I am led to
understand that SELinux has worked around this, but looking at
the SELinux code I expect that there is a problem there as well.

Thank you.

--
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


btrfs-convert crashes

2011-04-26 Thread Brian Parma
I have a 1.5 TB (1,475,720,773,632) partition that I wanted to convert 
from ext4 to btrfs.  It is currently used as / for ubuntu 10.10.


I booted into 11.04 beta2 and tried a 'btrfs-convert /dev/sdc1', but 
after about 20 minutes it segfaulted.


I performed a:

sck.ext4 -cDfty -C 0 /dev/sdc1


After everything was clean, I downloaded the debugging symbols for 
btrfs-convert and tried again.  Below is the 'bt full' output.  I don't have 
enough free space to copy all the data off, create a fresh btrfs partition, and 
copy everything back on (I have backups of important stuff).  Is there 
something else I can try to get this to work?

Brian

at: http://pastebin.com/NEwJNzuP


#0  0x77444d05 in raise () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#1  0x77448ab6 in abort () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#2  0x0040502c in btrfs_extend_item (trans=value optimized out, 
root=0x633920, path=value optimized out, data_size=27) at ctree.c:2525
slot =value optimized out
slot_orig =value optimized out
leaf = 0x1955250
nritems = 1
data_end =value optimized out
old_data =value optimized out
i =value optimized out
__PRETTY_FUNCTION__ = btrfs_extend_item
#3  0x0040e32d in btrfs_insert_inode_ref (trans=0xc9ef10, root=0x633920, 
name=0xcfa314 gtfntf.f.svn-base, name_len=17,
inode_objectid=value optimized out, ref_objectid=value optimized out, 
index=150) at inode-item.c:135
old_size = 3945
path = 0x1639aa0
key = {objectid = 37361107, type = 12 '\f', offset = 37359706}
ref =value optimized out
ptr =value optimized out
ret =value optimized out
ins_len = 27
__PRETTY_FUNCTION__ = btrfs_insert_inode_ref
#4  0x00413fff in dir_iterate_proc (dir=value optimized out, entry=value 
optimized out, old=0xcfa30c, offset=value optimized out,
blocksize=value optimized out, buf=value optimized out, 
priv_data=0x7fffe370) at convert.c:289
ret =value optimized out
file_type =value optimized out
objectid = 37361107
dotdot = ..
location = {objectid = 37361107, type = 1 '\001', offset = 0}
dirent = 0xcfa30c
idata = 0x7fffe370
__PRETTY_FUNCTION__ = dir_iterate_proc
#5  0x77bbdc13 in ext2fs_process_dir_block () from 
/lib/x86_64-linux-gnu/libext2fs.so.2
No symbol table info available.
#6  0x77bbac02 in ext2fs_block_iterate2 () from 
/lib/x86_64-linux-gnu/libext2fs.so.2
No symbol table info available.
#7  0x77bbdfb8 in ext2fs_dir_iterate2 () from 
/lib/x86_64-linux-gnu/libext2fs.so.2
No symbol table info available.
#8  0x0041689d in create_dir_entries (devname=0x7fffe897 
/dev/sdc1, datacsum=1, packing=1, noxattr=0) at convert.c:322
err =value optimized out
data = {trans = 0xc9ef10, root = 0x633920, inode = 0x7fffe1c0, 
objectid = 37359706, index_cnt = 150, parent = 37359705, errcode = 0}
ret =value optimized out
#9  copy_single_inode (devname=0x7fffe897 /dev/sdc1, datacsum=1, 
packing=1, noxattr=0) at convert.c:1072
ret =value optimized out
btrfs_inode = {generation = 1, transid = 140737354044640, size = 4994, 
nbytes = 0, block_group = 0, nlink = 1, uid = 1000, gid = 1000, mode = 16877,
  rdev = 0, flags = 0, sequence = 140737351933932, reserved = {0, 
140737354040256, 140733193388033, 0}, atime = {sec = 1303466526, nsec = 0}, 
ctime = {
sec = 1296464377, nsec = 0}, mtime = {sec = 1296464377, nsec = 0}, 
otime = {sec = 0, nsec = 0}}
#10 copy_inodes (devname=0x7fffe897 /dev/sdc1, datacsum=1, packing=1, 
noxattr=0) at convert.c:1154
ret =value optimized out
err =value optimized out
ext2_scan = 0xce2300
ext2_ino = 37359452
objectid = 37359706
ext2_inode = {i_mode = 16877, i_uid = 1000, i_size = 16384, i_atime = 
1303466526, i_ctime = 1296464377, i_mtime = 1296464377, i_dtime = 0, i_gid = 
1000,
  i_links_count = 2, i_blocks = 32, i_flags = 528384, osd1 = {linux1 = 
{l_i_version = 1981}, hurd1 = {h_i_translator = 1981}}, i_block = {193290, 4, 0,
0, 1, 149430439, 1, 3, 149430464, 0, 0, 0, 0, 0, 0}, i_generation = 
2854948622, i_file_acl = 0, i_dir_acl = 0, i_faddr = 0, osd2 = {linux2 = {
  l_i_blocks_hi = 0, l_i_file_acl_high = 0, l_i_uid_high = 0, 
l_i_gid_high = 0, l_i_reserved2 = 0}, hurd2 = {h_i_frag = 0 '\000',
  h_i_fsize = 0 '\000', h_i_mode_high = 0, h_i_uid_high = 0, 
h_i_gid_high = 0, h_i_author = 0}}}
trans = 0xc9ef10
#11 do_convert (devname=0x7fffe897 /dev/sdc1, datacsum=1, packing=1, 
noxattr=0) at convert.c:2411
i =value optimized out
fd = 6
ret =value optimized out
blocksize = 4096
blocks = {9258, 9259, 9260, 9261, 9284, 9285, 9286}
total_bytes =value optimized out