diff --git a/lustre/mds/mds_open.c b/lustre/mds/mds_open.c
index 28bc8e9ac8aa5a7edc55198bbeac141025cbe73b..51efdeaec8e25b9637d1a27cd593533b04974da8 100644
--- a/lustre/mds/mds_open.c
+++ b/lustre/mds/mds_open.c
@@ -747,6 +747,7 @@ static int mds_open_by_id(struct ptlrpc_request *req,
                 RETURN(rc);
         }
 
+        up(&pending_dir->i_sem);
         if (dchild->d_inode != NULL) {
                 mds_inode_set_orphan(dchild->d_inode);
                 mds_pack_inode2body(req2obd(req), body,