Whamcloud - gitweb
b=21686 revert attach 25564 bug 19557
authorJohann Lombardi <johann@sun.com>
Fri, 22 Jan 2010 15:00:30 +0000 (16:00 +0100)
committerJohann Lombardi <johann@sun.com>
Fri, 22 Jan 2010 15:00:30 +0000 (16:00 +0100)
lustre/include/lustre_dlm.h
lustre/include/lustre_net.h
lustre/ldlm/ldlm_internal.h
lustre/ldlm/ldlm_lib.c
lustre/ldlm/ldlm_lock.c
lustre/ldlm/ldlm_lockd.c
lustre/mds/handler.c
lustre/mgs/mgs_handler.c
lustre/obdecho/echo.c
lustre/obdfilter/filter.c

index 9d0e35e..6701dcf 100644 (file)
@@ -795,6 +795,7 @@ ldlm_mode_t ldlm_lock_match(struct ldlm_namespace *ns, int flags,
 struct ldlm_resource *ldlm_lock_convert(struct ldlm_lock *lock, int new_mode,
                                         __u32 *flags);
 void ldlm_lock_cancel(struct ldlm_lock *lock);
+void ldlm_cancel_locks_for_export(struct obd_export *export);
 void ldlm_reprocess_all(struct ldlm_resource *res);
 void ldlm_reprocess_all_ns(struct ldlm_namespace *ns);
 void ldlm_lock_dump(int level, struct ldlm_lock *lock, int pos);
index 60a96c0..4d90174 100644 (file)
@@ -1137,7 +1137,6 @@ int client_import_add_conn(struct obd_import *imp, struct obd_uuid *uuid,
                            int priority);
 int client_import_del_conn(struct obd_import *imp, struct obd_uuid *uuid);
 int import_set_conn_priority(struct obd_import *imp, struct obd_uuid *uuid);
-int server_disconnect_export(struct obd_export *exp);
 
 /* ptlrpc/pinger.c */
 enum timeout_event {
index d62520a..fbaa94f 100644 (file)
@@ -128,8 +128,6 @@ void ldlm_lock_add_to_lru(struct ldlm_lock *lock);
 void ldlm_lock_touch_in_lru(struct ldlm_lock *lock);
 void ldlm_lock_destroy_nolock(struct ldlm_lock *lock);
 
-void ldlm_cancel_locks_for_export(struct obd_export *export);
-
 /* ldlm_lockd.c */
 int ldlm_bl_to_thread_lock(struct ldlm_namespace *ns, struct ldlm_lock_desc *ld,
                            struct ldlm_lock *lock);
index 1f1c2d4..1aaa7a0 100644 (file)
@@ -522,42 +522,6 @@ int client_disconnect_export(struct obd_export *exp)
         RETURN(rc);
 }
 
-int server_disconnect_export(struct obd_export *exp)
-{
-        int rc;
-        ENTRY;
-
-        /* Disconnect early so that clients can't keep using export */
-        rc = class_disconnect(exp);
-
-        /* close import for avoid sending any requests */
-        if (exp->exp_imp_reverse)
-                ptlrpc_cleanup_imp(exp->exp_imp_reverse);
-
-        if (exp->exp_obd->obd_namespace != NULL)
-                ldlm_cancel_locks_for_export(exp);
-
-        /* complete all outstanding replies */
-        spin_lock(&exp->exp_lock);
-        while (!list_empty(&exp->exp_outstanding_replies)) {
-                struct ptlrpc_reply_state *rs =
-                        list_entry(exp->exp_outstanding_replies.next,
-                                   struct ptlrpc_reply_state, rs_exp_list);
-                struct ptlrpc_service *svc = rs->rs_service;
-
-                spin_lock(&svc->srv_lock);
-                list_del_init(&rs->rs_exp_list);
-                ptlrpc_schedule_difficult_reply(rs);
-                spin_unlock(&svc->srv_lock);
-        }
-        spin_unlock(&exp->exp_lock);
-
-        /* release nid stat refererence */
-        lprocfs_exp_cleanup(exp);
-
-        RETURN(rc);
-}
-
 /* --------------------------------------------------------------------------
  * from old lib/target.c
  * -------------------------------------------------------------------------- */
index bcd7566..15450dd 100644 (file)
@@ -1570,13 +1570,13 @@ void ldlm_lock_cancel(struct ldlm_lock *lock)
         }
 
         ldlm_del_waiting_lock(lock);
+
         /* Releases res lock */
         ldlm_cancel_callback(lock);
 
         /* Yes, second time, just in case it was added again while we were
            running with no res lock in ldlm_cancel_callback */
         ldlm_del_waiting_lock(lock);
-
         ldlm_resource_unlink_lock(lock);
         ldlm_lock_destroy_nolock(lock);
 
index d7c13e6..f195f04 100644 (file)
@@ -2364,6 +2364,7 @@ EXPORT_SYMBOL(ldlm_lock_set_data);
 EXPORT_SYMBOL(ldlm_it2str);
 EXPORT_SYMBOL(ldlm_lock_dump);
 EXPORT_SYMBOL(ldlm_lock_dump_handle);
+EXPORT_SYMBOL(ldlm_cancel_locks_for_export);
 EXPORT_SYMBOL(ldlm_reprocess_all_ns);
 EXPORT_SYMBOL(ldlm_lock_allow_match);
 
@@ -2420,7 +2421,6 @@ EXPORT_SYMBOL(client_obd_setup);
 EXPORT_SYMBOL(client_obd_cleanup);
 EXPORT_SYMBOL(client_connect_import);
 EXPORT_SYMBOL(client_disconnect_export);
-EXPORT_SYMBOL(server_disconnect_export);
 EXPORT_SYMBOL(target_abort_recovery);
 EXPORT_SYMBOL(target_cleanup_recovery);
 EXPORT_SYMBOL(target_handle_connect);
index 5c6ffd0..ac2b974 100644 (file)
@@ -539,7 +539,13 @@ static int mds_disconnect(struct obd_export *exp)
         LASSERT(exp);
         class_export_get(exp);
 
-        rc = server_disconnect_export(exp);
+        /* Disconnect early so that clients can't keep using export */
+        rc = class_disconnect(exp);
+        if (exp->exp_obd->obd_namespace != NULL)
+                ldlm_cancel_locks_for_export(exp);
+
+        /* release nid stat refererence */
+        lprocfs_exp_cleanup(exp);
 
         rc = mds_cleanup_mfd(exp);
 
index f8b7892..33f02ec 100644 (file)
@@ -128,7 +128,26 @@ static int mgs_disconnect(struct obd_export *exp)
         class_export_get(exp);
         mgs_counter_incr(exp, LPROC_MGS_DISCONNECT);
 
-        rc = server_disconnect_export(exp);
+        /* Disconnect early so that clients can't keep using export */
+        rc = class_disconnect(exp);
+        ldlm_cancel_locks_for_export(exp);
+
+        lprocfs_exp_cleanup(exp);
+
+        /* complete all outstanding replies */
+        spin_lock(&exp->exp_lock);
+        while (!list_empty(&exp->exp_outstanding_replies)) {
+                struct ptlrpc_reply_state *rs =
+                        list_entry(exp->exp_outstanding_replies.next,
+                                   struct ptlrpc_reply_state, rs_exp_list);
+                struct ptlrpc_service *svc = rs->rs_service;
+
+                spin_lock(&svc->srv_lock);
+                list_del_init(&rs->rs_exp_list);
+                ptlrpc_schedule_difficult_reply(rs);
+                spin_unlock(&svc->srv_lock);
+        }
+        spin_unlock(&exp->exp_lock);
 
         class_export_put(exp);
         RETURN(rc);
index ec65a08..d70944f 100644 (file)
@@ -76,7 +76,24 @@ static int echo_disconnect(struct obd_export *exp)
 {
         LASSERT (exp != NULL);
 
-        return server_disconnect_export(exp);
+        ldlm_cancel_locks_for_export(exp);
+
+        /* complete all outstanding replies */
+        spin_lock(&exp->exp_lock);
+        while (!list_empty(&exp->exp_outstanding_replies)) {
+                struct ptlrpc_reply_state *rs =
+                        list_entry(exp->exp_outstanding_replies.next,
+                                   struct ptlrpc_reply_state, rs_exp_list);
+                struct ptlrpc_service *svc = rs->rs_service;
+
+                spin_lock(&svc->srv_lock);
+                list_del_init(&rs->rs_exp_list);
+                ptlrpc_schedule_difficult_reply(rs);
+                spin_unlock(&svc->srv_lock);
+        }
+        spin_unlock(&exp->exp_lock);
+
+        return class_disconnect(exp);
 }
 
 static int echo_init_export(struct obd_export *exp)
index 051b931..86a7f5f 100644 (file)
@@ -2653,8 +2653,12 @@ static int filter_disconnect(struct obd_export *exp)
 
         lquota_clearinfo(filter_quota_interface_ref, exp, exp->exp_obd);
 
-        rc = server_disconnect_export(exp);
+        /* Disconnect early so that clients can't keep using export */
+        rc = class_disconnect(exp);
+        if (exp->exp_obd->obd_namespace != NULL)
+                ldlm_cancel_locks_for_export(exp);
 
+        lprocfs_exp_cleanup(exp);
         class_export_put(exp);
         RETURN(rc);
 }