Skip to content

Commit

Permalink
block: submit_bh() inadvertently discards barrier flag on a sync write
Browse files Browse the repository at this point in the history
Reported by Milan Broz <mbroz@redhat.com>, commit 18ce375 inadvertently
made submit_bh() discard the barrier bit for a WRITE_SYNC request. Fix
that up.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
  • Loading branch information
Jens Axboe committed Aug 27, 2008
1 parent a4a7789 commit 48fd4f9
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions fs/buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -2926,14 +2926,17 @@ int submit_bh(int rw, struct buffer_head * bh)
BUG_ON(!buffer_mapped(bh));
BUG_ON(!bh->b_end_io);

if (buffer_ordered(bh) && (rw == WRITE))
rw = WRITE_BARRIER;
/*
* Mask in barrier bit for a write (could be either a WRITE or a
* WRITE_SYNC
*/
if (buffer_ordered(bh) && (rw & WRITE))
rw |= WRITE_BARRIER;

/*
* Only clear out a write error when rewriting, should this
* include WRITE_SYNC as well?
* Only clear out a write error when rewriting
*/
if (test_set_buffer_req(bh) && (rw == WRITE || rw == WRITE_BARRIER))
if (test_set_buffer_req(bh) && (rw & WRITE))
clear_buffer_write_io_error(bh);

/*
Expand Down

0 comments on commit 48fd4f9

Please sign in to comment.