Matthew Wilcox wrote on Wed, Jul 11, 2018:
> diff --git a/net/9p/client.c b/net/9p/client.c
> index 389a2904b7b3..b89c7298267c 100644
> --- a/net/9p/client.c
> +++ b/net/9p/client.c
> @@ -908,30 +908,29 @@ static struct p9_fid *p9_fid_create(struct p9_client 
> *clnt)
>  {
>       int ret;
>       struct p9_fid *fid;
> -     unsigned long flags;
>  
>       p9_debug(P9_DEBUG_FID, "clnt %p\n", clnt);
>       fid = kmalloc(sizeof(struct p9_fid), GFP_KERNEL);
>       if (!fid)
>               return NULL;
>  
> -     ret = p9_idpool_get(clnt->fidpool);
> -     if (ret < 0)
> -             goto error;
> -     fid->fid = ret;
> -
>       memset(&fid->qid, 0, sizeof(struct p9_qid));

Ah, I had missed that you didn't update this memset as you said in reply
to comment on v1.

Could you resend just this patch and either initialize fid->fid or use
kzalloc for the fid allocation?

>       fid->mode = -1;
>       fid->uid = current_fsuid();
>       fid->clnt = clnt;
>       fid->rdir = NULL;
> -     spin_lock_irqsave(&clnt->lock, flags);
> -     list_add(&fid->flist, &clnt->fidlist);
> -     spin_unlock_irqrestore(&clnt->lock, flags);
> +     fid->fid = 0;
>  
> -     return fid;
> +     idr_preload(GFP_KERNEL);
> +     spin_lock_irq(&clnt->lock);
> +     ret = idr_alloc_u32(&clnt->fids, fid, &fid->fid, P9_NOFID - 1,
> +                     GFP_NOWAIT);

If you do resend, alignment here was wrong.


Thanks,
-- 
Dominique Martinet

Reply via email to