@@ -327,6 +327,13 @@ process_shortform_attr(
NULL, currententry->namelen,
currententry->valuelen);
+ if ((currententry->flags & XFS_ATTR_PARENT) &&
+ !xfs_has_parent(mp)) {
+ do_warn(
+ _("parent pointer found on filesystem that doesn't support parent pointers\n"));
+ junkit |= 1;
+ }
+
remainingspace = remainingspace -
xfs_attr_sf_entsize(currententry);
@@ -527,6 +534,15 @@ process_leaf_attr_local(
return -1;
}
}
+
+ if ((entry->flags & XFS_ATTR_PARENT) && !xfs_has_parent(mp)) {
+ do_warn(
+ _("parent pointer found in attribute entry %d in attr block %u, inode %"
+ PRIu64 " on filesystem that doesn't support parent pointers\n"),
+ i, da_bno, ino);
+ return -1;
+ }
+
return xfs_attr_leaf_entsize_local(local->namelen,
be16_to_cpu(local->valuelen));
}
@@ -562,6 +578,20 @@ process_leaf_attr_remote(
return -1;
}
+ if (entry->flags & XFS_ATTR_PARENT) {
+ if (!xfs_has_parent(mp))
+ do_warn(
+ _("parent pointer found in attribute entry %d in attr block %u, inode %"
+ PRIu64 " on filesystem that doesn't support parent pointers\n"),
+ i, da_bno, ino);
+ else
+ do_warn(
+ _("parent pointer found in attribute entry %d in attr block %u, inode %"
+ PRIu64 " with bogus remote value\n"),
+ i, da_bno, ino);
+ return -1;
+ }
+
value = malloc(be32_to_cpu(remotep->valuelen));
if (value == NULL) {
do_warn(