lkml.org 
[lkml]   [2008]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 23/49] Add buffer head related helper functions
    Date
    From: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>

    Add buffer head related helper function bh_uptodate_or_lock and
    bh_submit_read which can be used by file system

    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    ---
    fs/buffer.c | 41 +++++++++++++++++++++++++++++++++++++++++
    include/linux/buffer_head.h | 2 ++
    2 files changed, 43 insertions(+), 0 deletions(-)

    diff --git a/fs/buffer.c b/fs/buffer.c
    index 7249e01..7593ff3 100644
    --- a/fs/buffer.c
    +++ b/fs/buffer.c
    @@ -3213,6 +3213,47 @@ static int buffer_cpu_notify(struct notifier_block *self,
    return NOTIFY_OK;
    }

    +/**
    + * bh_uptodate_or_lock: Test whether the buffer is uptodate
    + * @bh: struct buffer_head
    + *
    + * Return true if the buffer is up-to-date and false,
    + * with the buffer locked, if not.
    + */
    +int bh_uptodate_or_lock(struct buffer_head *bh)
    +{
    + if (!buffer_uptodate(bh)) {
    + lock_buffer(bh);
    + if (!buffer_uptodate(bh))
    + return 0;
    + unlock_buffer(bh);
    + }
    + return 1;
    +}
    +EXPORT_SYMBOL(bh_uptodate_or_lock);
    +/**
    + * bh_submit_read: Submit a locked buffer for reading
    + * @bh: struct buffer_head
    + *
    + * Returns a negative error
    + */
    +int bh_submit_read(struct buffer_head *bh)
    +{
    + if (!buffer_locked(bh))
    + lock_buffer(bh);
    +
    + if (buffer_uptodate(bh))
    + return 0;
    +
    + get_bh(bh);
    + bh->b_end_io = end_buffer_read_sync;
    + submit_bh(READ, bh);
    + wait_on_buffer(bh);
    + if (buffer_uptodate(bh))
    + return 0;
    + return -EIO;
    +}
    +EXPORT_SYMBOL(bh_submit_read);
    void __init buffer_init(void)
    {
    int nrpages;
    diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
    index da0d83f..e98801f 100644
    --- a/include/linux/buffer_head.h
    +++ b/include/linux/buffer_head.h
    @@ -192,6 +192,8 @@ int sync_dirty_buffer(struct buffer_head *bh);
    int submit_bh(int, struct buffer_head *);
    void write_boundary_block(struct block_device *bdev,
    sector_t bblock, unsigned blocksize);
    +int bh_uptodate_or_lock(struct buffer_head *bh);
    +int bh_submit_read(struct buffer_head *bh);

    extern int buffer_heads_over_limit;

    --
    1.5.4.rc3.31.g1271-dirty


    \
     
     \ /
      Last update: 2008-01-22 04:13    [W:0.021 / U:127.188 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site