diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
index 08eb34fa36e1a0bb7ee85acca582a2e2871f0db5..3fa5fc803b81964253ee126c2ce68250d95b97a6 100644
--- a/lustre/llite/llite_lib.c
+++ b/lustre/llite/llite_lib.c
@@ -1815,7 +1815,8 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)
         if (body->valid & OBD_MD_FLGID)
                 inode->i_gid = body->gid;
         if (body->valid & OBD_MD_FLFLAGS)
-                inode->i_flags = ll_ext_to_inode_flags(body->flags);
+                inode->i_flags = ll_ext_to_inode_flags(body->flags |
+                                                       MDS_BFLAG_EXT_FLAGS);
         if (body->valid & OBD_MD_FLNLINK)
                 inode->i_nlink = body->nlink;
         if (body->valid & OBD_MD_FLGENER)
diff --git a/lustre/mds/mds_lib.c b/lustre/mds/mds_lib.c
index 78b5d1027334242b541d940a437b4ec4cd6eff53..4aa3864ab5f414d9fabfec6b66076650269f7814 100644
--- a/lustre/mds/mds_lib.c
+++ b/lustre/mds/mds_lib.c
@@ -93,9 +93,7 @@ void mds_pack_inode2body(struct mds_body *b, struct inode *inode)
         b->blocks = inode->i_blocks;
         b->uid = inode->i_uid;
         b->gid = inode->i_gid;
-        b->flags = (b->flags & MDS_BFLAG_EXT_FLAGS) |
-                   ll_inode_to_ext_flags(inode->i_flags,
-                                         !(b->flags & MDS_BFLAG_EXT_FLAGS));
+        b->flags = ll_inode_to_ext_flags(inode->i_flags, MDS_BFLAG_EXT_FLAGS);
         b->rdev = inode->i_rdev;
         /* Return the correct link count for orphan inodes */
         b->nlink = mds_inode_is_orphan(inode) ? 0 : inode->i_nlink;