lkml.org 
[lkml]   [2015]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/6] block: add support for carrying a stream ID in a bio
    On Tue, Mar 24, 2015 at 09:26:58AM -0600, Jens Axboe wrote:
    > The top bits of bio->bi_flags are reserved for keeping the
    > allocation pool, set aside the next four bits for carrying
    > a stream ID. That leaves us with support for 15 streams,
    > 0 is reserved as a "stream not set" value.
    >
    > Add helpers for setting/getting stream ID of a bio.
    ....
    > +/*
    > + * after the pool bits, next 4 bits are for the stream id
    > + */
    > +#define BIO_STREAM_BITS (4)
    > +#define BIO_STREAM_OFFSET (BITS_PER_LONG - 8)
    > +#define BIO_STREAM_MASK ((1 << BIO_STREAM_BITS) - 1)
    > +
    > +static inline unsigned long streamid_to_flags(unsigned int id)
    > +{
    > + return (unsigned long) (id & BIO_STREAM_MASK) << BIO_STREAM_OFFSET;
    > +}
    > +
    > +static inline void bio_set_streamid(struct bio *bio, unsigned int id)
    > +{
    > + bio->bi_flags |= streamid_to_flags(id);
    > +}
    > +
    > +static inline unsigned int bio_get_streamid(struct bio *bio)
    > +{
    > + return (bio->bi_flags >> BIO_STREAM_OFFSET) & BIO_STREAM_MASK;
    > +}
    > +
    > +static inline bool bio_streamid_valid(struct bio *bio)
    > +{
    > + return bio_get_streamid(bio) != 0;
    > +}

    Need to reserve at least one stream for filesystem private use (e.g.
    metadata writeback). Potentially 2 streams - one for the journal
    which is frequently overwritten, the other for all other long lived
    persistent metadata.

    Cheers,

    Dave.
    --
    Dave Chinner
    david@fromorbit.com


    \
     
     \ /
      Last update: 2015-03-25 03:41    [W:4.030 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site