[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LRH.2.02.1803211253410.26409@file01.intranet.prod.int.rdu2.redhat.com>
Date: Wed, 21 Mar 2018 13:00:43 -0400 (EDT)
From: Mikulas Patocka <mpatocka@...hat.com>
To: Jens Axboe <axboe@...nel.dk>
cc: Richard Henderson <rth@...ddle.net>,
Ivan Kokshaysky <ink@...assic.park.msu.ru>,
Matt Turner <mattst88@...il.com>,
Mike Snitzer <msnitzer@...hat.com>,
linux-block@...r.kernel.org, dm-devel@...hat.com,
linux-alpha@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] block: use 32-bit blk_status_t on Alpha
On Wed, 21 Mar 2018, Jens Axboe wrote:
> On 3/21/18 10:42 AM, Mikulas Patocka wrote:
> > Early alpha processors cannot write a single byte or word; they read 8
> > bytes, modify the value in registers and write back 8 bytes.
> >
> > The type blk_status_t is defined as one byte, it is often written
> > asynchronously by I/O completion routines, this asynchronous modification
> > can corrupt content of nearby bytes if these nearby bytes can be written
> > simultaneously by another CPU.
> >
> > - one example of such corruption is the structure dm_io where
> > "blk_status_t status" is written by an asynchronous completion routine
> > and "atomic_t io_count" is modified synchronously
> > - another example is the structure dm_buffer where "unsigned hold_count"
> > is modified synchronously from process context and "blk_status_t
> > write_error" is modified asynchronously from bio completion routine
> >
> > This patch fixes the bug by changing the type blk_status_t to 32 bits if
> > we are on Alpha and if we are compiling for a processor that doesn't have
> > the byte-word-extension.
>
> That's nasty. Is alpha the only problematic arch here?
Yes. All the other architectures supported by Linux have byte writes.
> As to the patch in question, normally I'd just say we should make it
> unconditionally u32. But we pack so nicely in the bio, and I don't think
> the bio itself has this issue as the rest of the members that share this
> word are all set before the bio is submitted. But callers embedding
> the status var in other structures don't necessarily have that
> guarantee, as your dm examples show.
>
> --
> Jens Axboe
Keeping blk_status_t 8-bit for most architectures will save a few bytes in
some of device mapper structures.
Mikulas
Powered by blists - more mailing lists