Unverified Commit c48f78ca authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!7089 nilfs2: fix failure to detect DAT corruption in btree and direct mappings

parents 10f01d2c 54b07eda
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -713,7 +713,7 @@ static int nilfs_btree_lookup_contig(const struct nilfs_bmap *btree,
		dat = nilfs_bmap_get_dat(btree);
		ret = nilfs_dat_translate(dat, ptr, &blocknr);
		if (ret < 0)
			goto out;
			goto dat_error;
		ptr = blocknr;
	}
	cnt = 1;
@@ -732,7 +732,7 @@ static int nilfs_btree_lookup_contig(const struct nilfs_bmap *btree,
			if (dat) {
				ret = nilfs_dat_translate(dat, ptr2, &blocknr);
				if (ret < 0)
					goto out;
					goto dat_error;
				ptr2 = blocknr;
			}
			if (ptr2 != ptr + cnt || ++cnt == maxblocks)
@@ -771,6 +771,11 @@ static int nilfs_btree_lookup_contig(const struct nilfs_bmap *btree,
 out:
	nilfs_btree_free_path(path);
	return ret;

 dat_error:
	if (ret == -ENOENT)
		ret = -EINVAL;  /* Notify bmap layer of metadata corruption */
	goto out;
}

static void nilfs_btree_promote_key(struct nilfs_bmap *btree,
+7 −2
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ static int nilfs_direct_lookup_contig(const struct nilfs_bmap *direct,
		dat = nilfs_bmap_get_dat(direct);
		ret = nilfs_dat_translate(dat, ptr, &blocknr);
		if (ret < 0)
			return ret;
			goto dat_error;
		ptr = blocknr;
	}

@@ -79,7 +79,7 @@ static int nilfs_direct_lookup_contig(const struct nilfs_bmap *direct,
		if (dat) {
			ret = nilfs_dat_translate(dat, ptr2, &blocknr);
			if (ret < 0)
				return ret;
				goto dat_error;
			ptr2 = blocknr;
		}
		if (ptr2 != ptr + cnt)
@@ -87,6 +87,11 @@ static int nilfs_direct_lookup_contig(const struct nilfs_bmap *direct,
	}
	*ptrp = ptr;
	return cnt;

 dat_error:
	if (ret == -ENOENT)
		ret = -EINVAL;  /* Notify bmap layer of metadata corruption */
	return ret;
}

static __u64