diff --git a/lustre/mdc/mdc_lib.c b/lustre/mdc/mdc_lib.c
index 864f1971f015abe8cc293c12d3e6555d9bf3cd73..40c734312c805dee549694f55b630e3d7bd3832d 100644
--- a/lustre/mdc/mdc_lib.c
+++ b/lustre/mdc/mdc_lib.c
@@ -215,6 +215,9 @@ static inline __u64 attr_pack(unsigned int ia_valid) {
                 sa_valid |= MDS_ATTR_CTIME_SET;
         if (ia_valid & ATTR_FROM_OPEN)
                 sa_valid |= MDS_ATTR_FROM_OPEN;
+        if (ia_valid & MDS_OPEN_OWNEROVERRIDE)
+                /* NFSD hack (see bug 5781) */
+                sa_valid |= MDS_OPEN_OWNEROVERRIDE;
         return sa_valid;
 }
 
diff --git a/lustre/mds/mds_lib.c b/lustre/mds/mds_lib.c
index e0ce2e0fac6e9abfe3b8f3eec56f154e50deacb5..640d11ea966fe2063b47c314345a156a02972925 100644
--- a/lustre/mds/mds_lib.c
+++ b/lustre/mds/mds_lib.c
@@ -125,6 +125,8 @@ static inline unsigned int attr_unpack(__u64 sa_valid) {
                 ia_valid |= ATTR_CTIME_SET;
         if (sa_valid & MDS_ATTR_FROM_OPEN)
                 ia_valid |= ATTR_FROM_OPEN;
+        if (sa_valid & MDS_OPEN_OWNEROVERRIDE)
+                ia_valid |= MDS_OPEN_OWNEROVERRIDE;
         return ia_valid;
 }