diff --git a/lustre/fid/fid_lib.c b/lustre/fid/fid_lib.c
index 137868ba5ad8cdc8d248282068f0a9152a5f9b93..f0fdfd4b1a1abbf6343e20f28a266dd869d7255b 100644
--- a/lustre/fid/fid_lib.c
+++ b/lustre/fid/fid_lib.c
@@ -49,9 +49,9 @@
  *
  * Fid namespace:
  * <pre>
- * Normal FID:        seq:64 [2^32,2^64-1]      oid:32          ver:32
- * IGIF      :        0:33, ino:31              gen:32          0:32
- * IDIF      :        0:32, 1:1, ost-index:15,  objd:48         0:32
+ * Normal FID:        seq:64 [2^33,2^64-1]      oid:32          ver:32
+ * IGIF      :        0:32, ino:32              gen:32          0:32
+ * IDIF      :        0:31, 1:1, ost-index:16,  objd:48         0:32
  * </pre>
  *
  * The first 0x400 sequences of normal FID are reserved for special purpose.
diff --git a/lustre/include/lustre/lustre_idl.h b/lustre/include/lustre/lustre_idl.h
index 0c626dd7400ae98872b472499bd9bb33f83eadcc..8f7544df67476243dae456f01cb3c9867f338b8a 100644
--- a/lustre/include/lustre/lustre_idl.h
+++ b/lustre/include/lustre/lustre_idl.h
@@ -219,13 +219,17 @@ static inline __u32 fid_ver(const struct lu_fid *fid)
         return fid->f_ver;
 }
 
-#define FID_SEQ_START 0x100000000ULL
-
 static inline void fid_zero(struct lu_fid *fid)
 {
         memset(fid, 0, sizeof(*fid));
 }
 
+/* Normal FID sequence starts from this value, i.e. 1<<33 */
+#define FID_SEQ_START  0x200000000ULL
+
+/* IDIF sequence starts from this value, i.e. 1<<32 */
+#define IDIF_SEQ_START 0x100000000ULL
+
 /**
  * Check if a fid is igif or not.
  * \param fid the fid to be tested.
@@ -233,7 +237,17 @@ static inline void fid_zero(struct lu_fid *fid)
  */
 static inline int fid_is_igif(const struct lu_fid *fid)
 {
-        return fid_seq(fid) > 0 && fid_seq(fid) < FID_SEQ_START;
+        return fid_seq(fid) > 0 && fid_seq(fid) < IDIF_SEQ_START;
+}
+
+/**
+ * Check if a fid is idif or not.
+ * \param fid the fid to be tested.
+ * \return true if the fid is a idif; otherwise false. 
+ */
+static inline int fid_is_idif(const struct lu_fid *fid)
+{
+        return fid_seq(fid) >= IDIF_SEQ_START  && fid_seq(fid) < FID_SEQ_START;
 }
 
 /**
diff --git a/lustre/llite/llite_fid.c b/lustre/llite/llite_fid.c
index 8a4864cc5af4cf45eac93e1d548143e32859dbd9..46305759b7bb61e09aef5519ed0280889ba4ddbd 100644
--- a/lustre/llite/llite_fid.c
+++ b/lustre/llite/llite_fid.c
@@ -53,7 +53,6 @@ ino_t ll_fid_build_ino(struct ll_sb_info *sbi,
          * based on fid.
          */
         ino = fid_flatten(fid);
-        ino = ino & 0x7fffffff;
 
         if (unlikely(ino == 0))
                 /* the first result ino is 0xFFC001, so this is rarely used */