summaryrefslogtreecommitdiff
path: root/repair.c
diff options
context:
space:
mode:
authorTiago Gomes <tiago.gomes@codethink.co.uk>2013-05-20 15:42:24 +0100
committerTiago Gomes <tiago.gomes@codethink.co.uk>2013-05-20 15:42:24 +0100
commit304f215abb836811e6d78e0a3da53d48aa0e7ca7 (patch)
treeefdecffd52c35757d962965f89805721a47e7fec /repair.c
parentaab0fcb8ae7386475598fd2bef887cf0f9f3b65a (diff)
parentad5f1f2d34cbb2f235ff3c1bc7dd28450759b2c7 (diff)
downloadbtrfs-progs-304f215abb836811e6d78e0a3da53d48aa0e7ca7.tar.gz
Merge branch 'baserock/tiagogomes/btrfs2' into baserock/morphbaserock/morph
Diffstat (limited to 'repair.c')
-rw-r--r--repair.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/repair.c b/repair.c
new file mode 100644
index 0000000..e640465
--- /dev/null
+++ b/repair.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+#include "ctree.h"
+#include "extent-cache.h"
+#include "utils.h"
+#include "repair.h"
+
+int btrfs_add_corrupt_extent_record(struct btrfs_fs_info *info,
+ struct btrfs_key *first_key,
+ u64 start, u64 len, int level)
+
+{
+ int ret = 0;
+ struct btrfs_corrupt_block *corrupt;
+
+ if (!info->corrupt_blocks)
+ return 0;
+
+ corrupt = malloc(sizeof(*corrupt));
+ if (!corrupt)
+ return -ENOMEM;
+
+ memcpy(&corrupt->key, first_key, sizeof(*first_key));
+ corrupt->cache.start = start;
+ corrupt->cache.size = len;
+ corrupt->level = level;
+
+ ret = insert_existing_cache_extent(info->corrupt_blocks, &corrupt->cache);
+ if (ret)
+ free(corrupt);
+ BUG_ON(ret && ret != -EEXIST);
+ return ret;
+}
+