Signed-off-by: Edward Shishkin --- linux-2.6.20-rc6-mm3/fs/reiser4/status_flags.c | 2 ++ linux-2.6.20-rc6-mm3/fs/reiser4/wander.c | 18 +++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) --- linux-2.6.20-rc6-mm3/fs/reiser4/status_flags.c.orig +++ linux-2.6.20-rc6-mm3/fs/reiser4/status_flags.c @@ -63,6 +63,7 @@ } lock_page(page); submit_bio(READ, bio); + blk_replug_current_nested(); wait_on_page_locked(page); if (!PageUptodate(page)) { warning("green-2007", @@ -157,6 +158,7 @@ lock_page(get_super_private(sb)->status_page); // Safe as nobody should touch our page. /* We can block now, but we have no other choice anyway */ submit_bio(WRITE, bio); + blk_replug_current_nested(); return 0; // We do not wait for io to finish. } --- linux-2.6.20-rc6-mm3/fs/reiser4/wander.c.orig +++ linux-2.6.20-rc6-mm3/fs/reiser4/wander.c @@ -718,6 +718,7 @@ jnode *first, int nr, const reiser4_block_nr *block_p, flush_queue_t *fq, int flags) { + int ret = 0; struct super_block *super = reiser4_get_current_sb(); int write_op = ( flags & WRITEOUT_BARRIER ) ? WRITE_BARRIER : WRITE; int max_blocks; @@ -738,9 +739,10 @@ int nr_used; bio = bio_alloc(GFP_NOIO, nr_blocks); - if (!bio) - return RETERR(-ENOMEM); - + if (!bio) { + ret = RETERR(-ENOMEM); + break; + } bio->bi_bdev = super->s_bdev; bio->bi_sector = block * (super->s_blocksize >> 9); for (nr_used = 0, i = 0; i < nr_blocks; i++) { @@ -843,8 +845,10 @@ reiser4_submit_bio(write_op, bio); not_supported = bio_flagged(bio, BIO_EOPNOTSUPP); bio_put(bio); - if (not_supported) - return -EOPNOTSUPP; + if (not_supported) { + ret = -EOPNOTSUPP; + break; + } } block += nr_used - 1; @@ -855,8 +859,8 @@ } nr -= nr_used; } - - return 0; + blk_replug_current_nested(); + return ret; } /* This is a procedure which recovers a contiguous sequences of disk block