diff --git a/lustre/mds/mds_open.c b/lustre/mds/mds_open.c
index 220a8b505f684055e300d7ff2d4c186492c83db7..7823d522b874218bb8976211e6d2d4cd160c6a31 100644
--- a/lustre/mds/mds_open.c
+++ b/lustre/mds/mds_open.c
@@ -420,7 +420,7 @@ static int mds_create_objects(struct ptlrpc_request *req, int offset,
                         if (rc)
                                 GOTO(out_oa, rc);
                 }
-                rc = obd_create(mds->mds_osc_exp, oinfo.oi_oa, 
+                rc = obd_create(mds->mds_osc_exp, oinfo.oi_oa,
                                 &oinfo.oi_md, &oti);
                 if (rc) {
                         int level = D_ERROR;
@@ -543,7 +543,7 @@ static void reconstruct_open(struct mds_update_record *rec, int offset,
         parent = mds_fid2dentry(mds, rec->ur_fid1, NULL);
         if (IS_ERR(parent)) {
                 rc = PTR_ERR(parent);
-                LCONSOLE_WARN("Parent "LPU64"/%u lookup error %d." 
+                LCONSOLE_WARN("Parent "LPU64"/%u lookup error %d."
                               " Evicting client %s with export %s.\n",
                               rec->ur_fid1->id, rec->ur_fid1->generation, rc,
                               obd_uuid2str(&exp->exp_client_uuid),
@@ -556,7 +556,7 @@ static void reconstruct_open(struct mds_update_record *rec, int offset,
         dchild = ll_lookup_one_len(rec->ur_name, parent, rec->ur_namelen - 1);
         if (IS_ERR(dchild)) {
                 rc = PTR_ERR(dchild);
-                LCONSOLE_WARN("Child "LPU64"/%u lookup error %d." 
+                LCONSOLE_WARN("Child "LPU64"/%u lookup error %d."
                               " Evicting client %s with export %s.\n",
                               rec->ur_fid1->id, rec->ur_fid1->generation, rc,
                               obd_uuid2str(&exp->exp_client_uuid),
@@ -648,9 +648,16 @@ static void reconstruct_open(struct mds_update_record *rec, int offset,
          * to detect a re-open */
         if (mfd == NULL) {
                 if (rec->ur_flags & MDS_OPEN_JOIN_FILE) {
+#if LUSTRE_FIX >= 50
+                        /* Allow file join in beta builds to allow debugging */
                         rc = mds_join_file(rec, req, dchild, NULL);
                         if (rc)
                                 GOTO(out_dput, rc);
+#else
+                        CWARN("file join is not supported in this version of "
+                              "Lustre\n");
+                        GOTO(out_dput, req->rq_status = rc = -EOPNOTSUPP);
+#endif
                 }
                 mntget(mds->mds_vfsmnt);
                 CERROR("Re-opened file \n");
@@ -734,11 +741,18 @@ static int mds_finish_open(struct ptlrpc_request *req, struct dentry *dchild,
                         RETURN(-EEXIST);
                 }
                 if (rec->ur_flags & MDS_OPEN_JOIN_FILE) {
+#if LUSTRE_FIX >= 50
+                        /* Allow file join in beta builds to allow debugging */
                         UNLOCK_INODE_MUTEX(dchild->d_inode);
                         rc = mds_join_file(rec, req, dchild, lockh);
                         if (rc)
                                 RETURN(rc);
                         LOCK_INODE_MUTEX(dchild->d_inode);
+#else
+                        CWARN("file join is not supported in this version of "
+                              "Lustre\n");
+                        RETURN(-EOPNOTSUPP);
+#endif
                 }
                 if (!(body->valid & OBD_MD_FLEASIZE) &&
                     !(body->valid & OBD_MD_FLMODEASIZE)) {
@@ -1024,14 +1038,14 @@ int mds_open(struct mds_update_record *rec, int offset,
         }
 
         /* Step 2: Lookup the child */
-      
+
         if (!(lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) &&
             (rec->ur_flags & MDS_OPEN_LOCK) && (rec->ur_namelen == 1)) {
                 /* hack for nfsd with no_subtree_check, it will use anon
                  * dentry w/o filename to open the file. the anon dentry's
                  * parent was set to itself, so rec->ur_fid1 is the file.
                  * And in MDC it cannot derive the dentry's parent dentry,
-                 * hence the file's name, so we hack here in MDS, 
+                 * hence the file's name, so we hack here in MDS,
                  * refer to bug 13030. */
                 dchild = mds_fid2dentry(mds, rec->ur_fid1, NULL);
         } else {
@@ -1211,7 +1225,7 @@ found_child:
         else
                 child_mode = LCK_CR;
 
-        if (!(lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) && 
+        if (!(lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) &&
              (rec->ur_flags & MDS_OPEN_LOCK)) {
                 /* In case of replay we do not get a lock assuming that the
                    caller has it already */
@@ -1219,8 +1233,8 @@ found_child:
                 child_res_id.name[1] = dchild->d_inode->i_generation;
 
                 rc = ldlm_cli_enqueue_local(obd->obd_namespace, &child_res_id,
-                                            LDLM_IBITS, &policy, child_mode, 
-                                            &lock_flags, ldlm_blocking_ast, 
+                                            LDLM_IBITS, &policy, child_mode,
+                                            &lock_flags, ldlm_blocking_ast,
                                             ldlm_completion_ast, NULL, NULL,
                                             0, NULL, child_lockh);
                 if (rc != ELDLM_OK)
@@ -1342,7 +1356,7 @@ int mds_mfd_close(struct ptlrpc_request *req, int offset,
         } else if (mfd->mfd_mode & MDS_FMODE_EXEC) {
                 mds_allow_write_access(inode);
         }
-        /* here writecount change also needs protection from orphan write sem. 
+        /* here writecount change also needs protection from orphan write sem.
          * so drop orphan write sem after mds_put_write_access, bz 12888. */
         MDS_UP_WRITE_ORPHAN_SEM(inode);
 
@@ -1373,7 +1387,7 @@ int mds_mfd_close(struct ptlrpc_request *req, int offset,
 
                 cleanup_phase = 2; /* dput(pending_child) when finished */
                 if (S_ISDIR(pending_child->d_inode->i_mode)) {
-                        rc = ll_vfs_rmdir(pending_dir, pending_child, 
+                        rc = ll_vfs_rmdir(pending_dir, pending_child,
                                           mds->mds_vfsmnt);
                         if (rc)
                                 CERROR("error unlinking orphan dir %s: rc %d\n",