The nfs_callback_mutex is sufficient protection.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
struct svc_rqst *rqstp;
int ret = 0;
struct svc_rqst *rqstp;
int ret = 0;
mutex_lock(&nfs_callback_mutex);
if (nfs_callback_info.users++ || nfs_callback_info.task != NULL)
goto out;
mutex_lock(&nfs_callback_mutex);
if (nfs_callback_info.users++ || nfs_callback_info.task != NULL)
goto out;
if (serv)
svc_destroy(serv);
mutex_unlock(&nfs_callback_mutex);
if (serv)
svc_destroy(serv);
mutex_unlock(&nfs_callback_mutex);
return ret;
out_err:
dprintk("Couldn't create callback socket or server thread; err = %d\n",
return ret;
out_err:
dprintk("Couldn't create callback socket or server thread; err = %d\n",
*/
void nfs_callback_down(void)
{
*/
void nfs_callback_down(void)
{
mutex_lock(&nfs_callback_mutex);
nfs_callback_info.users--;
if (nfs_callback_info.users == 0 && nfs_callback_info.task != NULL)
kthread_stop(nfs_callback_info.task);
mutex_unlock(&nfs_callback_mutex);
mutex_lock(&nfs_callback_mutex);
nfs_callback_info.users--;
if (nfs_callback_info.users == 0 && nfs_callback_info.task != NULL)
kthread_stop(nfs_callback_info.task);
mutex_unlock(&nfs_callback_mutex);
}
static int nfs_callback_authenticate(struct svc_rqst *rqstp)
}
static int nfs_callback_authenticate(struct svc_rqst *rqstp)