fprintf(out, "%02x ", (unsigned char)str[i]);
}
+#ifdef HAVE_LFSCK
+#include "ext2fs/lfsck.h"
+
+static void print_fidstr(FILE *out, ext2_ino_t inode_num, void *data, int len)
+{
+ struct filter_fid *ff = data;
+ struct lu_fid parent_fid = ff->ff_parent;
+ int stripe;
+
+ if (len < sizeof(*ff)) {
+ fprintf(stderr, "%s: error: fid for inode %u smaller than "
+ "expected (%d bytes).\n",
+ debug_prog_name, inode_num, len);
+ return;
+ }
+ lfsck_swab_fid(&parent_fid);
+ stripe = parent_fid.f_ver; /* stripe is stored in f_ver */
+ parent_fid.f_ver = 0;
+ fprintf(out, " fid: objid=%llu seq=%llu parent="DFID" stripe=%u\n",
+ ext2fs_le64_to_cpu(ff->ff_objid),
+ ext2fs_le64_to_cpu(ff->ff_seq), PFID(&parent_fid), stripe);
+}
+
+static void print_lmastr(FILE *out, ext2_ino_t inode_num, void *data, int len)
+{
+ struct lustre_mdt_attrs *lma = data;
+
+ if (len < sizeof(*lma)) {
+ fprintf(stderr, "%s: error: lma for inode %u smaller than "
+ "expected (%d bytes).\n",
+ debug_prog_name, inode_num, len);
+ return;
+ }
+ lfsck_swab_fid(&lma->lma_self_fid);
+ fprintf(out, " lma: fid="DFID"\n", PFID(&lma->lma_self_fid));
+}
+#endif /* HAVE_LFSCK */
+
static void internal_dump_inode_extra(FILE *out,
const char *prefix EXT2FS_ATTR((unused)),
- ext2_ino_t inode_num EXT2FS_ATTR((unused)),
+ ext2_ino_t inode_num,
struct ext2_inode_large *inode)
{
struct ext2_ext_attr_entry *entry;
start + entry->e_value_offs,
entry->e_value_size);
fprintf(out, "\" (%u)\n", entry->e_value_size);
+#ifdef HAVE_LFSCK
+ /* Special decoding for Lustre filter-fid */
+ if ((entry->e_name_index == EXT2_ATTR_INDEX_TRUSTED ||
+ entry->e_name_index == EXT2_ATTR_INDEX_LUSTRE) &&
+ !strncmp(EXT2_EXT_ATTR_NAME(entry),
+ "fid", entry->e_name_len))
+ print_fidstr(out, inode_num,
+ start + entry->e_value_offs,
+ entry->e_value_size);
+ /* Special decoding for Lustre lma */
+ if ((entry->e_name_index == EXT2_ATTR_INDEX_TRUSTED ||
+ entry->e_name_index == EXT2_ATTR_INDEX_LUSTRE) &&
+ !strncmp(EXT2_EXT_ATTR_NAME(entry),
+ "lma", entry->e_name_len))
+ print_lmastr(out, inode_num,
+ start + entry->e_value_offs,
+ entry->e_value_size);
+#endif
entry = next;
}
}
#ifndef IDENTITY_DOWNCALL_MAGIC
#define l_object_seq l_object_gr /* for lov_ost_data_v1 */
#define lmm_object_seq lmm_object_gr /* for lov_mds_md_v1/3 */
+#define ff_seq ff_group /* for filter_fid */
+#define ff_parent (struct lu_fid *)ff_fid /* for filter_fid */
#endif /* IDENTITY_DOWNCALL_MAGIC */
/* Unfortunately, neither the 1.8 or 2.x lustre_idl.h file is suitable
};
#endif
+static inline void lfsck_swab_fid(struct lu_fid *fid)
+{
+ fid->f_seq = ext2fs_le64_to_cpu(fid->f_seq);
+ fid->f_oid = ext2fs_le32_to_cpu(fid->f_oid);
+ fid->f_ver = ext2fs_le32_to_cpu(fid->f_ver);
+}
+
#define OBD_CONNECT_FID 0x40000000ULL
+#ifndef LMA_INCOMPAT_SUPP
struct lustre_mdt_attrs {
__u32 lma_compat;
__u32 lma_incompat;
__u64 lma_som_blocks;
__u64 lma_som_mountid;
};
+#endif
struct ost_id {
__u64 oi_id;