Whamcloud - gitweb
LU-2924 Make quota namespace refcounting consistent
authorOleg Drokin <green@whamcloud.com>
Thu, 2 May 2013 04:50:24 +0000 (00:50 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 7 Jun 2013 03:55:52 +0000 (23:55 -0400)
It seems quota namespace is needlessly referenced on connect,
but that's not necessary as it could not go away until entire
obd goes away.
On the other hand this extra reference disturbs other logic
depending on empty namespace having zero refcount, so this patch
drops such extra referencing.

Change-Id: I62e04ef01a3673e4ffadc4204f3e1768e44fed18
Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
Reviewed-on: http://review.whamcloud.com/6234
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Niu Yawei <yawei.niu@intel.com>
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
lustre/ldlm/ldlm_internal.h
lustre/ldlm/ldlm_resource.c
lustre/quota/qsd_lib.c

index 36ce175..cb46c31 100644 (file)
@@ -84,8 +84,7 @@ static inline struct mutex *ldlm_namespace_lock(ldlm_side_t client)
                 &ldlm_srv_namespace_lock : &ldlm_cli_namespace_lock;
 }
 
-/* ns_bref is the number of resources in this namespace with the notable
- * exception of quota namespaces which have their empty refcount at 1 */
+/* ns_bref is the number of resources in this namespace */
 static inline int ldlm_ns_empty(struct ldlm_namespace *ns)
 {
        return cfs_atomic_read(&ns->ns_bref) == 0;
index d4a2bed..aba0903 100644 (file)
@@ -1210,11 +1210,7 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent,
        /* Let's see if we happened to be the very first resource in this
         * namespace. If so, and this is a client namespace, we need to move
         * the namespace into the active namespaces list to be patrolled by
-        * the ldlm_poold.
-        * A notable exception, for quota namespaces qsd_lib.c already took a
-        * namespace reference, so it won't be participating in all of this,
-        * but I guess that's ok since we have no business cancelling quota
-        * locks anyway */
+        * the ldlm_poold. */
        if (ns_is_client(ns) && ns_refcount == 1) {
                mutex_lock(ldlm_namespace_lock(LDLM_NAMESPACE_CLIENT));
                ldlm_namespace_move_to_active_locked(ns, LDLM_NAMESPACE_CLIENT);
index b1a29b1..7623aa7 100644 (file)
@@ -235,8 +235,6 @@ static int qsd_conn_callback(void *data)
        /* qsd_exp should now be valid */
        LASSERT(qsd->qsd_exp);
 
-       /* grab reference on namespace */
-       ldlm_namespace_get(class_exp2obd(qsd->qsd_exp)->obd_namespace);
        qsd->qsd_ns = class_exp2obd(qsd->qsd_exp)->obd_namespace;
 
        write_lock(&qsd->qsd_lock);
@@ -475,9 +473,7 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd)
                qsd_stop_reint_thread(qsd->qsd_type_array[qtype]);
        }
 
-       /* release reference on namespace */
        if (qsd->qsd_ns != NULL) {
-               ldlm_namespace_put(qsd->qsd_ns);
                qsd->qsd_ns = NULL;
        }