diff --git a/lustre/mds/mds_open.c b/lustre/mds/mds_open.c
index e879d0e8487a60530b0c8cb5a9929eac48fa7176..d5b8cce3d10c74ace35c32bff2daea2cf1cc8b20 100644
--- a/lustre/mds/mds_open.c
+++ b/lustre/mds/mds_open.c
@@ -439,8 +439,10 @@ static int mds_create_objects(struct ptlrpc_request *req, int offset,
                 oinfo.oi_oa->o_fid = body->fid1.id;
                 oinfo.oi_oa->o_generation = body->fid1.generation;
                 oinfo.oi_oa->o_valid |= OBD_MD_FLFID | OBD_MD_FLGENER;
+                oinfo.oi_policy.l_extent.start = i_size_read(inode);
+                oinfo.oi_policy.l_extent.end = OBD_OBJECT_EOF;
 
-                rc = obd_setattr_rqset(mds->mds_osc_exp, &oinfo, &oti);
+                rc = obd_punch_rqset(mds->mds_osc_exp, &oinfo, &oti);
                 if (rc) {
                         CERROR("error setting attrs for inode %lu: rc %d\n",
                                inode->i_ino, rc);
@@ -1291,7 +1293,9 @@ int mds_mfd_close(struct ptlrpc_request *req, int offset,
 
         if (last_orphan && unlink_orphan) {
                 int stripe_count = 0;
-                LASSERT(rc == 0); /* mds_put_write_access must have succeeded */
+                /* mds_put_write_access must have succeeded */
+                LASSERTF(rc == 0, "inode %lu/%u: rc %d",
+                         inode->i_ino, inode->i_generation, rc);
 
                 CDEBUG(D_INODE, "destroying orphan object %s\n", fidname);