lkml.org 
[lkml]   [2011]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH]: block: try-2 (modified): Initialize bi_rw in mpage so bio_add can make use of it.
On 2011-07-11 19:31, Muthu Kumar wrote:
> Jens et al,
>
> do_mpage_readpage()/__mpage_writepage(): When they allocate a new bio,
> bi_rw is not initialized. So later when they call __bio_add_page(),
> struct bvec_merge_data bvm's .bi_rw will not be initialized with right
> direction.
> It will be useful for some merge functions if they know the direction
> of transfer.
>
> Let me know if this looks good. There are few more places like this
> (e.g blkdev_issue_zeroout()). Would it make sense to send patch for
> these cases also?

For this particular case, doing it when the bio is allocated makes more
sense. That will avoid a similar error in there in the future.

Something ala the below.

diff --git a/fs/mpage.c b/fs/mpage.c
index fdfae9f..a2b8604 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -80,7 +80,7 @@ static struct bio *mpage_bio_submit(int rw, struct bio *bio)

static struct bio *
mpage_alloc(struct block_device *bdev,
- sector_t first_sector, int nr_vecs,
+ sector_t first_sector, int nr_vecs, int rw,
gfp_t gfp_flags)
{
struct bio *bio;
@@ -93,8 +93,9 @@ mpage_alloc(struct block_device *bdev,
}

if (bio) {
- bio->bi_bdev = bdev;
bio->bi_sector = first_sector;
+ bio->bi_bdev = bdev;
+ bio->bi_rw = rw;
}
return bio;
}
@@ -288,7 +289,7 @@ alloc_new:
if (bio == NULL) {
bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
min_t(int, nr_pages, bio_get_nr_vecs(bdev)),
- GFP_KERNEL);
+ READ, GFP_KERNEL);
if (bio == NULL)
goto confused;
}
@@ -580,7 +581,8 @@ page_is_mapped:
alloc_new:
if (bio == NULL) {
bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
- bio_get_nr_vecs(bdev), GFP_NOFS|__GFP_HIGH);
+ bio_get_nr_vecs(bdev), WRITE,
+ GFP_NOFS|__GFP_HIGH);
if (bio == NULL)
goto confused;
}
--
Jens Axboe



\
 
 \ /
  Last update: 2011-07-11 19:53    [W:0.044 / U:0.548 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site