continue;
/* See if we have an NSM handle for this client */
- if (!nsm && (nsm = host->h_nsmhandle) != 0)
- atomic_inc(&nsm->sm_count);
+ if (!nsm)
+ nsm = host->h_nsmhandle;
if (host->h_proto != proto)
continue;
nlm_get_host(host);
goto out;
}
+ if (nsm)
+ atomic_inc(&nsm->sm_count);
host = NULL;
* Manage NSM handles
*/
static LIST_HEAD(nsm_handles);
-static DECLARE_MUTEX(nsm_sema);
+static DEFINE_MUTEX(nsm_mutex);
static struct nsm_handle *
__nsm_find(const struct sockaddr_in *sin,
return NULL;
}
- down(&nsm_sema);
+ mutex_lock(&nsm_mutex);
list_for_each(pos, &nsm_handles) {
nsm = list_entry(pos, struct nsm_handle, sm_link);
list_add(&nsm->sm_link, &nsm_handles);
}
-out: up(&nsm_sema);
+out:
+ mutex_unlock(&nsm_mutex);
return nsm;
}
if (!nsm)
return;
if (atomic_dec_and_test(&nsm->sm_count)) {
- down(&nsm_sema);
+ mutex_lock(&nsm_mutex);
if (atomic_read(&nsm->sm_count) == 0) {
list_del(&nsm->sm_link);
kfree(nsm);
}
- up(&nsm_sema);
+ mutex_unlock(&nsm_mutex);
}
}