sector_t blocknr)
{
int level, flags, nchildren;
- int ret = 0;
+ __u64 key, prev_key;
+ int i;
level = nilfs_btree_node_get_level(node);
flags = nilfs_btree_node_get_flags(node);
"bad btree node (ino=%llu, blocknr=%llu): level = %d, flags = 0x%x, nchildren = %d",
inode->i_ino, (unsigned long long)blocknr, level,
flags, nchildren);
- ret = 1;
+ return 1;
}
- return ret;
+
+ for (i = 1, prev_key = nilfs_btree_node_get_key(node, 0);
+ i < nchildren; i++, prev_key = key) {
+ key = nilfs_btree_node_get_key(node, i);
+ if (unlikely(key <= prev_key)) {
+ nilfs_crit(inode->i_sb,
+ "bad btree node (ino=%llu, blocknr=%llu): unsorted keys at index %d (%llu) and %d (%llu)",
+ inode->i_ino, (unsigned long long)blocknr,
+ i - 1, prev_key, i, key);
+ return 1;
+ }
+ }
+ return 0;
}
/**