Re: decode_device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 8, 2014 at 2:41 PM, Marc Eshel <eshel@xxxxxxxxxx> wrote:
> It looks like the problem is in the following line in decode_device()    p
> = xdr_inline_decode(&stream, cnt << 2);
> p is set to NULL
> is there a limitation in xdr to decode a stream that is bigger than 4096?
Here's the limitation in decode_device():
 78         /* set up xdr stream */
 79         scratch = alloc_page(gfp_flags);
 80         if (!scratch)
 81                 goto out_err;
 82
 83         xdr_init_decode_pages(&stream, &buf, pdev->pages, pdev->pglen);
 84         xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE);

> it works fine for cnt of 1024 but not 1512
>
> Marc.
>
>
>
>
> From:   Marc Eshel/Almaden/IBM
> To:     Tom Haynes <thomas.haynes@xxxxxxxxxxxxxxx>,
> Cc:     linux-nfs@xxxxxxxxxxxxxxx, linux-nfs-owner@xxxxxxxxxxxxxxx, Marc
> Eshel/Almaden/IBM@IBMUS, Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> Date:   10/08/2014 08:05 AM
> Subject:        Re: decode_device
>
>
>
>
> linux-nfs-owner@xxxxxxxxxxxxxxx wrote on 10/08/2014 05:46:24 AM:
>
>> From: Tom Haynes <thomas.haynes@xxxxxxxxxxxxxxx>
>> To: Marc Eshel/Almaden/IBM@IBMUS,
>> Cc: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>, linux-
>> nfs@xxxxxxxxxxxxxxx
>> Date: 10/08/2014 05:46 AM
>> Subject: Re: decode_device
>> Sent by: linux-nfs-owner@xxxxxxxxxxxxxxx
>>
>>
>> On Oct 7, 2014, at 9:33 PM, Marc Eshel <eshel@xxxxxxxxxx> wrote:
>>
>> > I see that NFS4_PNFS_MAX_STRIPE_CNT is 4096 but when give the client a
> cnt
>> > that is bigger than 1024 it fails, is that the limitation of kcalloc()
> ?
>> >
>> > 366341.304362] <-- _nfs4_proc_getdeviceinfo status=0
>> > [366341.304364] filelayout_get_device_info getdevice info returns 0
>> > [366341.304368] decode_device stripe count  1512
>> > [366341.304370] decode_device ERROR: returning NULL
>> > [366341.304372] NFS: decode_and_add_device: Could not decode or add
> device
>> > [366341.304428] <-- filelayout_get_device_info dsaddr           (null)
>> > [366341.304430] --> filelayout_check_layout returns -22
>> > [366341.304433] pnfs_layout_process: Could not allocate layout: error
> -12
>> >
>> > decode_device()
>> >
>> > ...
>> >        dprintk("%s stripe count  %d\n", __func__, cnt);
>> >        if (cnt > NFS4_PNFS_MAX_STRIPE_CNT) {
>> >                printk(KERN_WARNING "NFS: %s: stripe count %d greater
> than
>> > "
>> >                       "supported maximum %d\n", __func__,
>> >                        cnt, NFS4_PNFS_MAX_STRIPE_CNT);
>> >                goto out_err_free_scratch;
>> >        }
>> >
>> >        /* read stripe indices */
>> >        stripe_indices = kcalloc(cnt, sizeof(u8), gfp_flags);
>> >        if (!stripe_indices)
>> >                goto out_err_free_scratch;
>> >
>> >
>> > Thanks, Marc.
>>
>>
>>
>> Hi Marc,
>>
>> You are asking for 1512 bytes of memory. That would be looking for a 2k
> slab.
>>
>> What flags are being passed down in gfp_flags?
>>
>> Are you experiencing any other memory issues?
>
> Hi Tom,
> It was working fine for a list of up to 1024 so I assumed it was a
> kcalloc, I will have to add more debugging to find the problem.
> Thanks, Marc.
>
>>
>> Tom
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux