Message ID | x49r34bgba5.fsf@segfault.boston.devel.redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 01/09/2017 02:42 PM, Jeff Moyer wrote: > Commit 20ce44d545844 ("do_direct_IO: Use inode->i_blkbits to compute > block count to be cleaned") introduced a regression: if the block size > of the block device is changed while a direct I/O request is being > setup, it can result in a panic. See commit ab73857e354ab ("direct-io: > don't read inode->i_blkbits multiple times") for the reasoning, and > commit b87570f5d3496 ("Fix a crash when block device is read and block > size is changed at the same time") for a more detailed problem > description and reproducer. > > Fixes: 20ce44d545844 > Signed-off-by: Jeff Moyer <jmoyer@redhat.com> > > --- > Chandan, can you please test this to ensure this still fixes your problem? Please, that would be great. And if so, then let's fold the two.
On Monday, January 09, 2017 04:42:58 PM Jeff Moyer wrote: > Commit 20ce44d545844 ("do_direct_IO: Use inode->i_blkbits to compute > block count to be cleaned") introduced a regression: if the block size > of the block device is changed while a direct I/O request is being > setup, it can result in a panic. See commit ab73857e354ab ("direct-io: > don't read inode->i_blkbits multiple times") for the reasoning, and > commit b87570f5d3496 ("Fix a crash when block device is read and block > size is changed at the same time") for a more detailed problem > description and reproducer. > > Fixes: 20ce44d545844 > Signed-off-by: Jeff Moyer <jmoyer@redhat.com> > > --- > Chandan, can you please test this to ensure this still fixes your problem? This patch fixes the failure, Tested-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
On 01/09/2017 10:27 PM, Chandan Rajendra wrote: > On Monday, January 09, 2017 04:42:58 PM Jeff Moyer wrote: >> Commit 20ce44d545844 ("do_direct_IO: Use inode->i_blkbits to compute >> block count to be cleaned") introduced a regression: if the block size >> of the block device is changed while a direct I/O request is being >> setup, it can result in a panic. See commit ab73857e354ab ("direct-io: >> don't read inode->i_blkbits multiple times") for the reasoning, and >> commit b87570f5d3496 ("Fix a crash when block device is read and block >> size is changed at the same time") for a more detailed problem >> description and reproducer. >> >> Fixes: 20ce44d545844 >> Signed-off-by: Jeff Moyer <jmoyer@redhat.com> >> >> --- >> Chandan, can you please test this to ensure this still fixes your problem? > > This patch fixes the failure, > > Tested-by: Chandan Rajendra <chandan@linux.vnet.ibm.com> > I've updated the patch, thanks guys.
diff --git a/fs/direct-io.c b/fs/direct-io.c index b20adf9..c87bae4 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -905,8 +905,8 @@ static inline void dio_zero_block(struct dio *dio, struct dio_submit *sdio, static int do_direct_IO(struct dio *dio, struct dio_submit *sdio, struct buffer_head *map_bh) { - const unsigned i_blkbits = dio->inode->i_blkbits; const unsigned blkbits = sdio->blkbits; + const unsigned i_blkbits = blkbits + sdio->blkfactor; int ret = 0; while (sdio->block_in_file < sdio->final_block_in_request) {
Commit 20ce44d545844 ("do_direct_IO: Use inode->i_blkbits to compute block count to be cleaned") introduced a regression: if the block size of the block device is changed while a direct I/O request is being setup, it can result in a panic. See commit ab73857e354ab ("direct-io: don't read inode->i_blkbits multiple times") for the reasoning, and commit b87570f5d3496 ("Fix a crash when block device is read and block size is changed at the same time") for a more detailed problem description and reproducer. Fixes: 20ce44d545844 Signed-off-by: Jeff Moyer <jmoyer@redhat.com> --- Chandan, can you please test this to ensure this still fixes your problem? -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html