mirror of https://gitee.com/openkylin/linux.git
Add buffer head related helper functions
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>
This commit is contained in:
parent
bb4f397a1a
commit
389d1b083c
44
fs/buffer.c
44
fs/buffer.c
|
@ -3213,6 +3213,50 @@ static int buffer_cpu_notify(struct notifier_block *self,
|
||||||
return NOTIFY_OK;
|
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 zero on success and -EIO on error.
|
||||||
|
*/
|
||||||
|
int bh_submit_read(struct buffer_head *bh)
|
||||||
|
{
|
||||||
|
BUG_ON(!buffer_locked(bh));
|
||||||
|
|
||||||
|
if (buffer_uptodate(bh)) {
|
||||||
|
unlock_buffer(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)
|
void __init buffer_init(void)
|
||||||
{
|
{
|
||||||
int nrpages;
|
int nrpages;
|
||||||
|
|
|
@ -192,6 +192,8 @@ int sync_dirty_buffer(struct buffer_head *bh);
|
||||||
int submit_bh(int, struct buffer_head *);
|
int submit_bh(int, struct buffer_head *);
|
||||||
void write_boundary_block(struct block_device *bdev,
|
void write_boundary_block(struct block_device *bdev,
|
||||||
sector_t bblock, unsigned blocksize);
|
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;
|
extern int buffer_heads_over_limit;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue