Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758839AbYHVGii (ORCPT ); Fri, 22 Aug 2008 02:38:38 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755070AbYHVGi2 (ORCPT ); Fri, 22 Aug 2008 02:38:28 -0400 Received: from [93.163.65.50] ([93.163.65.50]:7779 "EHLO kernel.dk" rhost-flags-FAIL-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1754067AbYHVGi1 (ORCPT ); Fri, 22 Aug 2008 02:38:27 -0400 Date: Fri, 22 Aug 2008 08:38:24 +0200 From: Jens Axboe To: OGAWA Hirofumi Cc: Eric Sandeen , Milan Broz , Linux Kernel Mailing List , linux-fsdevel , Ric Wheeler , "MASON,CHRISTOPHER" Subject: Re: Mount ext3 with barrier=1 doesn't send real barrier bio? Message-ID: <20080822063823.GR20055@kernel.dk> References: <48A5F5C6.2090204@redhat.com> <48ACAADD.2010104@sandeen.net> <874p5eqa6h.fsf@devron.myhome.or.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <874p5eqa6h.fsf@devron.myhome.or.jp> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1809 Lines: 57 On Fri, Aug 22 2008, OGAWA Hirofumi wrote: > Eric Sandeen writes: > > >> --- a/fs/buffer.c > >> +++ b/fs/buffer.c > >> @@ -2926,16 +2926,16 @@ 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; > >> - > >> /* > >> * Only clear out a write error when rewriting, should this > >> * include WRITE_SYNC as well? > >> */ > >> - 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); > > This should be ((rw & RW_MASK) == WRITE) too? Anyway, this seems change > behavior of submit_bh(WRITE_BARRIER) (maybe reiserfs only), it wouldn't > be your intent... Yes, I believe the simpler and more correct fix is: diff --git a/fs/buffer.c b/fs/buffer.c index 38653e3..16b2263 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2926,14 +2926,13 @@ 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)) + 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); /* -- Jens Axboe -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/