|To:||Dave Chinner <david@xxxxxxxxxxxxx>|
|Subject:||Re: xfs: invalid requests to request_fn from xfs_repair|
|From:||Jamie Pocas <pocas.jamie@xxxxxxxxx>|
|Date:||Sat, 5 Apr 2014 14:19:53 -0400|
|Dkim-signature:||v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=XOkzy03+onV2iuYfA3q1O0M4WQGd/t8DYxTnMYkI7t0=; b=f7tpJDoQVouk6MxrmqNJLH9FgJoRrUanRKks7EEA2H8JQ0kGRnjxbBlyVyCka4jrGg 3lkJAdfrBtN4QbW8tiGkpVV4WyUeZ9aCPZ56Ds6/e4wkX6dUrQyf2DfkVfyuUQb/BUnx DoIvqjoBKWITIPUH3ZG3vLsX/QuDu002J2E0EcrnanQXWIgir5x4zmHljaMALXG+OFcJ 1/+5M4dDDME1Wgc839NTSaLD5vd3/TVERcRYD5c4gd5J3F83TkMmHrW6CM6zfJeQmO7C iDmZ+cvKldj0CPRiKVKqlVoda0pBraBTWV13YgmcRI90tjQwtNedbthI9Lyp2Am45AcK lL3g==|
|References:||<CABHf-sxmxmM0+WVzvGGJqKrrGngm0qrGTsYDnEmUEf+GJ_pK8A@xxxxxxxxxxxxxx> <20140401204215.GG17603@dastard> <CABHf-sxeACnsSoJszM8Xan-VcXLkLdrY7cBM9=FCAxdMBaQohA@xxxxxxxxxxxxxx> <20140402044749.GK17603@dastard>|
On Wed, Apr 2, 2014 at 12:47 AM, Dave Chinner <david@xxxxxxxxxxxxx> wrote:
I agree that the iterator *looks* wrong, Like I said earlier, I am just using the rq_for_each_segment() macro (defined in include/linux/blkdev.h and expands to a few dozen lines of code). This is the recommended way of iterating requests instead of using the lower level bio iterating functions or going it yourself which is why it's recommended to use that instead of going deeper and breaking compatibility when the kernel changes. I suspect it's the request itself which was constructed incorrectly, or contains bios that should not have been grouped into the same request, or contains bios that have their bi_sector set incorrectly.
This is the xfs_repair tool being run directly against a block device, so if I am reading the fs/direct-io.c code correctly this means that the mapping function (get_block_t) is using fs/block_dev.c:blkdev_get_block(). Is that correct? That function is very short and simple, so I can't imagine how there would be a bug in there. If it were a file on an xfs filesystem, the get_block_t callback would be xfs_get_blocks or xfs_get_blocks_direct (which both internally call __xfs_get_blocks). Is my understanding correct?
|<Prev in Thread]||Current Thread||[Next in Thread>|
|Previous by Date:||China mold&molding, PFMOLD|
|Next by Date:||RE:, Mrs Aliyah|
|Previous by Thread:||Re: xfs: invalid requests to request_fn from xfs_repair, Dave Chinner|
|Next by Thread:||Re: xfs: invalid requests to request_fn from xfs_repair, Jamie Pocas|
|Indexes:||[Date] [Thread] [Top] [All Lists]|