Btrfs-progs: create missing root dirid
authorJosef Bacik <jbacik@fb.com>
Fri, 31 Oct 2014 18:01:28 +0000 (14:01 -0400)
committerDavid Sterba <dsterba@suse.cz>
Fri, 14 Nov 2014 10:01:38 +0000 (11:01 +0100)
If we just don't have the root dirid stuff go ahead and re-create it, since it
is easily recreated.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
cmds-check.c

index 7914983..389674f 100644 (file)
@@ -1987,6 +1987,26 @@ static int check_inode_recs(struct btrfs_root *root,
                        error++;
                }
        } else {
+               if (repair) {
+                       struct btrfs_trans_handle *trans;
+
+                       trans = btrfs_start_transaction(root, 1);
+                       if (IS_ERR(trans)) {
+                               err = PTR_ERR(trans);
+                               return err;
+                       }
+
+                       fprintf(stderr,
+                               "root %llu missing its root dir, recreating\n",
+                               (unsigned long long)root->objectid);
+
+                       ret = btrfs_make_root_dir(trans, root, root_dirid);
+                       BUG_ON(ret);
+
+                       btrfs_commit_transaction(trans, root);
+                       return -EAGAIN;
+               }
+
                fprintf(stderr, "root %llu root dir %llu not found\n",
                        (unsigned long long)root->root_key.objectid,
                        (unsigned long long)root_dirid);