Hi Fillipe, I see you have another fix for btrfs send (attached below), as ell as your other patch on Jan 21st (neither are in my 3.12.7).
>From my error below, > ERROR: rmdir o1845158-142-0 failed. No such file or directory can you tell if I'm having a different problem than the two patches you sent? More generally, could you hint how I can tell what this rmdir o1845158-142-0 refers to, considering that it looks like a made up filename by btrfs send/receive? I'm happy to go to 3.13.3 and apply both patches if you think it'll help. Thanks, Marc On Wed, Feb 12, 2014 at 06:22:07AM -0800, Marc MERLIN wrote: > So, I've veen running this for a few weeks, and soon should have > something half decent to share for others to use. > > Unfortunately, one of my backups is now failing like so: > > btrfs send -p "$src_snap" "$src_newsnap" | btrfs receive "$dest_pool/" > + btrfs send -p /mnt/btrfs_pool1/home_ro.20140209_12:00:01 > home_ro.20140212_05:37:49 > + btrfs receive /mnt/btrfs_pool2// > At subvol home_ro.20140212_05:37:49 > At snapshot home_ro.20140212_05:37:49 > ERROR: rmdir o1845158-142-0 failed. No such file or directory > > This looks like it got in an unfinished state it can't recover from. > > This was with kernel 3.12.7. > > Can I self fix this somehow, I know I can use rsync to make both sides > the sames, but incremental send/receive will not work anymore after > that, correct? > > Except, not really. Now I'm confused. > legolas:/mnt/btrfs_pool1# rsync -avSH --delete --dry-run > /mnt/btrfs_pool1/home_ro.20140209_12:00:01/. > /mnt/btrfs_pool2/home_ro.20140209_12\:00\:01/. > sending incremental file list > ./ > > sent 116867233 bytes received 265427 bytes 92194.14 bytes/sec > total size is 129135042766 speedup is 1102.47 (DRY RUN) > legolas:/mnt/btrfs_pool1# > > (I know I start the entire backup over from scratch, but for obvious > reasons, restarting an entire backup from scratch each time I get an > error isn't great since it could take hours or days to backup that much > data) > > Suggestions welcome :) > > Thanks, > Marc On Sun, Feb 16, 2014 at 01:43:11PM +0000, Filipe David Borba Manana wrote: > This fixes yet one more case not caught by the commit titled: > > Btrfs: fix infinite path build loops in incremental send > > In this case, even before the initial full send, we have a directory > which is a child of a directory with a higher inode number. Then we > perform the initial send, and after we rename both the child and the > parent, without moving them around. After doing these 2 renames, an > incremental send sent a rename instruction for the child directory > which contained an invalid "from" path (referenced the parent's old > name, not the new one), which made the btrfs receive command fail. > > Steps to reproduce: > > $ mkfs.btrfs -f /dev/sdb3 > $ mount /dev/sdb3 /mnt/btrfs > $ mkdir -p /mnt/btrfs/a/b > $ mkdir /mnt/btrfs/d > $ mkdir /mnt/btrfs/a/b/c > $ mv /mnt/btrfs/d /mnt/btrfs/a/b/c > $ btrfs subvolume snapshot -r /mnt/btrfs /mnt/btrfs/snap1 > $ btrfs send /mnt/btrfs/snap1 -f /tmp/base.send > $ mv /mnt/btrfs/a/b/c /mnt/btrfs/a/b/x > $ mv /mnt/btrfs/a/b/x/d /mnt/btrfs/a/b/x/y > $ btrfs subvolume snapshot -r /mnt/btrfs /mnt/btrfs/snap2 > $ btrfs send -p /mnt/btrfs/snap1 /mnt/btrfs/snap2 -f /tmp/incremental.send > > $ umout /mnt/btrfs > $ mkfs.btrfs -f /dev/sdb3 > $ mount /dev/sdb3 /mnt/btrfs > $ btrfs receive /mnt/btrfs -f /tmp/base.send > $ btrfs receive /mnt/btrfs -f /tmp/incremental.send > > The second btrfs receive command failed with: > "ERROR: rename a/b/c/d -> a/b/x/y failed. No such file or directory" > > A test case for xfstests follows. > > Signed-off-by: Filipe David Borba Manana <fdman...@gmail.com> > --- > fs/btrfs/send.c | 41 ++++++++++++++++++++++++++++++++++------- > 1 file changed, 34 insertions(+), 7 deletions(-) > > diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c > index b6d416c..7dbed58 100644 > --- a/fs/btrfs/send.c > +++ b/fs/btrfs/send.c > @@ -2847,19 +2847,48 @@ static int apply_dir_move(struct send_ctx *sctx, > struct pending_dir_move *pm) > { > struct fs_path *from_path = NULL; > struct fs_path *to_path = NULL; > + struct fs_path *name = NULL; > u64 orig_progress = sctx->send_progress; > struct recorded_ref *cur; > + u64 parent_ino, parent_gen; > int ret; > > + name = fs_path_alloc(); > from_path = fs_path_alloc(); > - if (!from_path) > - return -ENOMEM; > + if (!name || !from_path) { > + ret = -ENOMEM; > + goto out; > + } > > - sctx->send_progress = pm->ino; > - ret = get_cur_path(sctx, pm->ino, pm->gen, from_path); > + ret = del_waiting_dir_move(sctx, pm->ino); > + ASSERT(ret == 0); > + > + ret = get_first_ref(sctx->parent_root, pm->ino, > + &parent_ino, &parent_gen, name); > if (ret < 0) > goto out; > > + if (parent_ino == sctx->cur_ino) { > + /* child only renamed, not moved */ > + ASSERT(parent_gen == sctx->cur_inode_gen); > + ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, > + from_path); > + if (ret < 0) > + goto out; > + ret = fs_path_add_path(from_path, name); > + if (ret < 0) > + goto out; > + } else { > + /* child moved and maybe renamed too */ > + sctx->send_progress = pm->ino; > + ret = get_cur_path(sctx, pm->ino, pm->gen, from_path); > + if (ret < 0) > + goto out; > + } > + > + fs_path_free(name); > + name = NULL; > + > to_path = fs_path_alloc(); > if (!to_path) { > ret = -ENOMEM; > @@ -2867,9 +2896,6 @@ static int apply_dir_move(struct send_ctx *sctx, struct > pending_dir_move *pm) > } > > sctx->send_progress = sctx->cur_ino + 1; > - ret = del_waiting_dir_move(sctx, pm->ino); > - ASSERT(ret == 0); > - > ret = get_cur_path(sctx, pm->ino, pm->gen, to_path); > if (ret < 0) > goto out; > @@ -2893,6 +2919,7 @@ static int apply_dir_move(struct send_ctx *sctx, struct > pending_dir_move *pm) > } > > out: > + fs_path_free(name); > fs_path_free(from_path); > fs_path_free(to_path); > sctx->send_progress = orig_progress; > -- > 1.7.9.5 > > -- > 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 > -- "A mouse is a device used to point at the xterm you want to type in" - A.S.R. Microsoft is to operating systems .... .... what McDonalds is to gourmet cooking Home page: http://marc.merlins.org/ | PGP 1024R/763BE901 -- 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