diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 769981c17323a5b35a6d6cc4791350bc38b9488b..eb552ca6102a82c6ed66f7374f793b9d984b1a4b 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -170,6 +170,15 @@ Bugzilla   : 13532
 Description: rewrite ext2-derived code in llite/dir.c and obdclass/uuid.c
 Details    : rewrite inherited code (uuid parsing code from ext2 utils and
              readdir code from ext3) from scratch preserving functionality.
+
+Severity   : normal 
+Bugzilla   : 13436
+Description: Only those disconnect error should be returned by rq_status.
+Details    : In open/enqueue processs, Some errors, which will cause client 
+	     disconnected, should be returned by rq_status, while other 
+	     errors should still be returned by intent, then mdc or llite will
+	     detect them.
+
 --------------------------------------------------------------------------------
 
 2007-08-27         Cluster File Systems, Inc. <info@clusterfs.com>
diff --git a/lustre/mds/handler.c b/lustre/mds/handler.c
index e7a1fc64d4b18e1edc011ebb010a2bece64c732d..4b235027821ac26c02e306c95512cf545ff7f8b5 100644
--- a/lustre/mds/handler.c
+++ b/lustre/mds/handler.c
@@ -2333,6 +2333,9 @@ void intent_set_disposition(struct ldlm_reply *rep, int flag)
         rep->lock_policy_res1 |= flag;
 }
 
+#define IS_CLIENT_DISCONNECT_ERROR(error) \
+                (error == -ENOTCONN || error == -ENODEV)
+
 static int mds_intent_policy(struct ldlm_namespace *ns,
                              struct ldlm_lock **lockp, void *req_cookie,
                              ldlm_mode_t mode, int flags, void *data)
@@ -2407,10 +2410,18 @@ static int mds_intent_policy(struct ldlm_namespace *ns,
 
                 /* If there was an error of some sort or if we are not
                  * returning any locks */
-                if (rep->lock_policy_res2)
-                        RETURN(rep->lock_policy_res2);
-                if (!intent_disposition(rep, DISP_OPEN_LOCK))
-                        RETURN(ELDLM_LOCK_ABORTED);
+                 if (rep->lock_policy_res2 ||
+                     !intent_disposition(rep, DISP_OPEN_LOCK)) {
+                        /* If it is the disconnect error (ENODEV & ENOCONN)
+                         * ptlrpc layer should know this imediately, it should
+                         * be replied by rq_stats, otherwise, return it by 
+                         * intent here
+                         */
+                        if (IS_CLIENT_DISCONNECT_ERROR(rep->lock_policy_res2))
+                                RETURN(rep->lock_policy_res2);
+                        else
+                                RETURN(ELDLM_LOCK_ABORTED);
+                 }
                 break;
         case IT_LOOKUP:
                         getattr_part = MDS_INODELOCK_LOOKUP;