lkml.org 
[lkml]   [2018]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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

    \
     
     \ /
      Last update: 2018-03-21 18:01    [W:2.312 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site