FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Device-mapper Development

 
 
LinkBack Thread Tools
 
Old 08-02-2010, 02:12 PM
Tejun Heo
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

Commit a82afdf (block: use the same failfast bits for bio and request)
moved BIO_RW_* bits around such that they match up with REQ_* bits.
Unfortunately, fs.h hard coded READ, WRITE, READA and SWRITE as 0, 1,
2 and 3, and expected them to match with BIO_RW_* bits. READ/WRITE
didn't change but BIO_RW_AHEAD was moved to bit 4 instead of bit 1,
breaking READA and SWRITE.

This patch updates READA and SWRITE such that they match the BIO_RW_*
bits again. A follow up patch will update the definitions to directly
use BIO_RW_* bits so that this kind of breakage won't happen again.

Stable: The offending commit a82afdf was released with v2.6.32, so
this patch should be applied to all kernels since then but it must
_NOT_ be applied to kernels earlier than that.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-and-bisected-by: Vladislav Bolkhovitin <vst@vlnb.net>
Root-caused-by: Neil Brown <neilb@suse.de>
Cc: Jens Axobe <axboe@kernel.dk>
Cc: stable@kernel.org
---
Aieee... thanks for root causing it Neil. That was a stupid bug. I
knew that READ/WRITE were hardcoded but forgot about READA. :-(
Moving BIO_RW_AHEAD back to bit 1 might be a better solution but I'm
afraid that would cause more confusions downstream. This patch
updates READA and SWRITE to match BIO_RW_AHEAD and should also appear
in -stable releases. The next patch will create bio_types.h and
define all constants in terms of BIO_RW_*.

Thanks.

include/linux/fs.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Index: work/include/linux/fs.h
================================================== =================
--- work.orig/include/linux/fs.h
+++ work/include/linux/fs.h
@@ -148,8 +148,8 @@ struct inodes_stat_t {
#define RWA_MASK 2
#define READ 0
#define WRITE 1
-#define READA 2 /* read-ahead - don't block if no resources */
-#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
+#define READA 16 /* read-ahead - don't block if no resources */
+#define SWRITE 17 /* for ll_rw_block() - wait for buffer lock */
#define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
#define READ_META (READ | (1 << BIO_RW_META))
#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-02-2010, 02:15 PM
Tejun Heo
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

Commit a82afdf (block: use the same failfast bits for bio and request)
moved BIO_RW_* bits around such that they match up with REQ_* bits.
Unfortunately, fs.h hard coded READ, WRITE, READA and SWRITE as 0, 1,
2 and 3, and expected them to match with BIO_RW_* bits. READ/WRITE
didn't change but BIO_RW_AHEAD was moved to bit 4 instead of bit 1,
breaking READA and SWRITE.

This patch updates READA and SWRITE such that they match the BIO_RW_*
bits again. A follow up patch will update the definitions to directly
use BIO_RW_* bits so that this kind of breakage won't happen again.

Stable: The offending commit a82afdf was released with v2.6.32, so
this patch should be applied to all kernels since then but it must
_NOT_ be applied to kernels earlier than that.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-and-bisected-by: Vladislav Bolkhovitin <vst@vlnb.net>
Root-caused-by: Neil Brown <neilb@suse.de>
Cc: Jens Axobe <axboe@kernel.dk>
Cc: stable@kernel.org
---
Aieee... thanks for root causing it Neil. That was a stupid bug. I
knew that READ/WRITE were hardcoded but forgot about READA. :-(
Moving BIO_RW_AHEAD back to bit 1 might be a better solution but I'm
afraid that would cause more confusions downstream. This patch
updates READA and SWRITE to match BIO_RW_AHEAD and should also appear
in -stable releases. The next patch will create bio_types.h and
define all constants in terms of BIO_RW_*.

Thanks.

(resending w/ Jens' new address)

include/linux/fs.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Index: work/include/linux/fs.h
================================================== =================
--- work.orig/include/linux/fs.h
+++ work/include/linux/fs.h
@@ -148,8 +148,8 @@ struct inodes_stat_t {
#define RWA_MASK 2
#define READ 0
#define WRITE 1
-#define READA 2 /* read-ahead - don't block if no resources */
-#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
+#define READA 16 /* read-ahead - don't block if no resources */
+#define SWRITE 17 /* for ll_rw_block() - wait for buffer lock */
#define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
#define READ_META (READ | (1 << BIO_RW_META))
#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-02-2010, 02:17 PM
Tejun Heo
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

Commit a82afdf (block: use the same failfast bits for bio and request)
moved BIO_RW_* bits around such that they match up with REQ_* bits.
Unfortunately, fs.h hard coded READ, WRITE, READA and SWRITE as 0, 1,
2 and 3, and expected them to match with BIO_RW_* bits. READ/WRITE
didn't change but BIO_RW_AHEAD was moved to bit 4 instead of bit 1,
breaking READA and SWRITE.

This patch updates READA and SWRITE such that they match the BIO_RW_*
bits again. A follow up patch will update the definitions to directly
use BIO_RW_* bits so that this kind of breakage won't happen again.

Stable: The offending commit a82afdf was released with v2.6.32, so
this patch should be applied to all kernels since then but it must
_NOT_ be applied to kernels earlier than that.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-and-bisected-by: Vladislav Bolkhovitin <vst@vlnb.net>
Root-caused-by: Neil Brown <neilb@suse.de>
Cc: Jens Axobe <axboe@kernel.dk>
Cc: stable@kernel.org
---
Aieee... thanks for root causing it Neil. That was a stupid bug. I
knew that READ/WRITE were hardcoded but forgot about READA. :-(
Moving BIO_RW_AHEAD back to bit 1 might be a better solution but I'm
afraid that would cause more confusions downstream. This patch
updates READA and SWRITE to match BIO_RW_AHEAD and should also appear
in -stable releases. The next patch will create bio_types.h and
define all constants in terms of BIO_RW_*.

Thanks.

(resending w/ Jens' new address)

include/linux/fs.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Index: work/include/linux/fs.h
================================================== =================
--- work.orig/include/linux/fs.h
+++ work/include/linux/fs.h
@@ -148,8 +148,8 @@ struct inodes_stat_t {
#define RWA_MASK 2
#define READ 0
#define WRITE 1
-#define READA 2 /* read-ahead - don't block if no resources */
-#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
+#define READA 16 /* read-ahead - don't block if no resources */
+#define SWRITE 17 /* for ll_rw_block() - wait for buffer lock */
#define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
#define READ_META (READ | (1 << BIO_RW_META))
#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-02-2010, 08:04 PM
Jens Axboe
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

On 08/02/2010 04:17 PM, Tejun Heo wrote:
> Aieee... thanks for root causing it Neil. That was a stupid bug. I
> knew that READ/WRITE were hardcoded but forgot about READA. :-(
> Moving BIO_RW_AHEAD back to bit 1 might be a better solution but I'm
> afraid that would cause more confusions downstream. This patch
> updates READA and SWRITE to match BIO_RW_AHEAD and should also appear
> in -stable releases. The next patch will create bio_types.h and
> define all constants in terms of BIO_RW_*.

Tejun, care to resend these against for-2.6.36? We can reference
these for the stable backport (at least the first one should go in).

--
Jens Axboe

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-02-2010, 09:52 PM
Neil Brown
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

On Mon, 02 Aug 2010 16:15:38 +0200
Tejun Heo <tj@kernel.org> wrote:

> Commit a82afdf (block: use the same failfast bits for bio and request)
> moved BIO_RW_* bits around such that they match up with REQ_* bits.
> Unfortunately, fs.h hard coded READ, WRITE, READA and SWRITE as 0, 1,
> 2 and 3, and expected them to match with BIO_RW_* bits. READ/WRITE
> didn't change but BIO_RW_AHEAD was moved to bit 4 instead of bit 1,
> breaking READA and SWRITE.
>
> This patch updates READA and SWRITE such that they match the BIO_RW_*
> bits again. A follow up patch will update the definitions to directly
> use BIO_RW_* bits so that this kind of breakage won't happen again.
>
> Stable: The offending commit a82afdf was released with v2.6.32, so
> this patch should be applied to all kernels since then but it must
> _NOT_ be applied to kernels earlier than that.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Reported-and-bisected-by: Vladislav Bolkhovitin <vst@vlnb.net>
> Root-caused-by: Neil Brown <neilb@suse.de>
> Cc: Jens Axobe <axboe@kernel.dk>
> Cc: stable@kernel.org
> ---
> Aieee... thanks for root causing it Neil. That was a stupid bug. I
> knew that READ/WRITE were hardcoded but forgot about READA. :-(
> Moving BIO_RW_AHEAD back to bit 1 might be a better solution but I'm
> afraid that would cause more confusions downstream. This patch
> updates READA and SWRITE to match BIO_RW_AHEAD and should also appear
> in -stable releases. The next patch will create bio_types.h and
> define all constants in terms of BIO_RW_*.
>
> Thanks.
>
> (resending w/ Jens' new address)
>
> include/linux/fs.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> Index: work/include/linux/fs.h
> ================================================== =================
> --- work.orig/include/linux/fs.h
> +++ work/include/linux/fs.h
> @@ -148,8 +148,8 @@ struct inodes_stat_t {
> #define RWA_MASK 2

Close, but not quite there - RWA_MASK must be 16 too !!

Thanks,
NeilBrown


> #define READ 0
> #define WRITE 1
> -#define READA 2 /* read-ahead - don't block if no resources */
> -#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
> +#define READA 16 /* read-ahead - don't block if no resources */
> +#define SWRITE 17 /* for ll_rw_block() - wait for buffer lock */
> #define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
> #define READ_META (READ | (1 << BIO_RW_META))
> #define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-03-2010, 09:27 AM
Tejun Heo
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

On 08/02/2010 11:52 PM, Neil Brown wrote:
> Close, but not quite there - RWA_MASK must be 16 too !!

Indeed. Updated.

Thanks.

--
tejun

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-05-2010, 06:57 PM
Vladislav Bolkhovitin
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

Jeff Moyer, on 08/05/2010 10:45 PM wrote:

Tejun Heo<tj@kernel.org> writes:


Commit a82afdf (block: use the same failfast bits for bio and request)
moved BIO_RW_* bits around such that they match up with REQ_* bits.
Unfortunately, fs.h hard coded READ, WRITE, READA and SWRITE as 0, 1,
2 and 3, and expected them to match with BIO_RW_* bits. READ/WRITE
didn't change but BIO_RW_AHEAD was moved to bit 4 instead of bit 1,
breaking READA and SWRITE.

This patch updates READA and SWRITE such that they match the BIO_RW_*
bits again. A follow up patch will update the definitions to directly
use BIO_RW_* bits so that this kind of breakage won't happen again.

Stable: The offending commit a82afdf was released with v2.6.32, so
this patch should be applied to all kernels since then but it must
_NOT_ be applied to kernels earlier than that.


Would someone be so kind as to remind me how this problem manifests
itself? I know I read this recently, but my memory and googling skills
are both failing me.


See http://lkml.org/lkml/2010/7/28/315 and link inside.

Vlad

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-06-2010, 04:04 AM
Tao Ma
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

Hi Tejun,

On 08/06/2010 02:45 AM, Jeff Moyer wrote:

Tejun Heo<tj@kernel.org> writes:


Commit a82afdf (block: use the same failfast bits for bio and request)
moved BIO_RW_* bits around such that they match up with REQ_* bits.
Unfortunately, fs.h hard coded READ, WRITE, READA and SWRITE as 0, 1,
2 and 3, and expected them to match with BIO_RW_* bits. READ/WRITE
didn't change but BIO_RW_AHEAD was moved to bit 4 instead of bit 1,
breaking READA and SWRITE.

This patch updates READA and SWRITE such that they match the BIO_RW_*
bits again. A follow up patch will update the definitions to directly
use BIO_RW_* bits so that this kind of breakage won't happen again.

Stable: The offending commit a82afdf was released with v2.6.32, so
this patch should be applied to all kernels since then but it must
_NOT_ be applied to kernels earlier than that.
If only this patch goes into stable, do we need to change RWA_MASK in
this patch also(I have seen you change it the 2/2)?


-#define RWA_MASK 2
+#define RWA_MASK 16

Regards,
Tao

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-06-2010, 06:29 AM
Tejun Heo
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

Hello,

On 08/06/2010 06:04 AM, Tao Ma wrote:
> If only this patch goes into stable, do we need to change RWA_MASK in this patch also(I have seen you change it the 2/2)?
>
> -#define RWA_MASK 2
> +#define RWA_MASK 16

Yeah, Neil already pointed it out and updated patch has been posted
and merged.

Thanks.

--
tejun

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 
Old 08-19-2010, 08:38 AM
Christoph Hellwig
 
Default bio, fs: update READA and SWRITE to match the corresponding BIO_RW_* bits

On Fri, Aug 06, 2010 at 12:04:43PM +0800, Tao Ma wrote:
> >>Stable: The offending commit a82afdf was released with v2.6.32, so
> >>this patch should be applied to all kernels since then but it must
> >>_NOT_ be applied to kernels earlier than that.
> If only this patch goes into stable, do we need to change RWA_MASK
> in this patch also(I have seen you change it the 2/2)?
>
> -#define RWA_MASK 2
> +#define RWA_MASK 16

I think RW_MASK and RWA_MASK should simply go away, they don't server
any use over just masking the correct REQ_* flags.

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 

Thread Tools




All times are GMT. The time now is 06:48 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org