+const struct lu_fid *get_dirent_fid(struct ext2_dir_entry *dirent)
+{
+ unsigned char *data = (unsigned char *)dirent->name +
+ (dirent->name_len & EXT2_NAME_LEN) + 1;
+ __u8 file_type = dirent->name_len >> 8;
+ struct lu_fid *fid = NULL;
+ __u8 dirdata_mask;
+
+ for (dirdata_mask = EXT2_FT_MASK + 1;
+ dirdata_mask != 0; dirdata_mask <<= 1) {
+ int dlen;
+
+ if ((dirdata_mask & file_type) == 0)
+ continue;
+
+ dlen = data[0];
+ if (dirdata_mask == EXT2_DIRENT_LUFID) {
+ fid = (struct lu_fid *)(data + 1);
+ fid_be_to_cpu(fid, fid);
+ break;
+ }
+ data += dlen;
+ }
+
+ return fid;
+}
+