mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
nilfs2: avoid readahead on metadata file for create mode
This turns off readhead action of metadata file if nilfs_mdt_get_block function was called with a create flag. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
This commit is contained in:
parent
ef7d4757a5
commit
b34a65069c
1 changed files with 15 additions and 13 deletions
|
@ -186,7 +186,7 @@ nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff,
|
|||
}
|
||||
|
||||
static int nilfs_mdt_read_block(struct inode *inode, unsigned long block,
|
||||
struct buffer_head **out_bh)
|
||||
int readahead, struct buffer_head **out_bh)
|
||||
{
|
||||
struct buffer_head *first_bh, *bh;
|
||||
unsigned long blkoff;
|
||||
|
@ -200,16 +200,18 @@ static int nilfs_mdt_read_block(struct inode *inode, unsigned long block,
|
|||
if (unlikely(err))
|
||||
goto failed;
|
||||
|
||||
blkoff = block + 1;
|
||||
for (i = 0; i < nr_ra_blocks; i++, blkoff++) {
|
||||
err = nilfs_mdt_submit_block(inode, blkoff, READA, &bh);
|
||||
if (likely(!err || err == -EEXIST))
|
||||
brelse(bh);
|
||||
else if (err != -EBUSY)
|
||||
break; /* abort readahead if bmap lookup failed */
|
||||
|
||||
if (!buffer_locked(first_bh))
|
||||
goto out_no_wait;
|
||||
if (readahead) {
|
||||
blkoff = block + 1;
|
||||
for (i = 0; i < nr_ra_blocks; i++, blkoff++) {
|
||||
err = nilfs_mdt_submit_block(inode, blkoff, READA, &bh);
|
||||
if (likely(!err || err == -EEXIST))
|
||||
brelse(bh);
|
||||
else if (err != -EBUSY)
|
||||
break;
|
||||
/* abort readahead if bmap lookup failed */
|
||||
if (!buffer_locked(first_bh))
|
||||
goto out_no_wait;
|
||||
}
|
||||
}
|
||||
|
||||
wait_on_buffer(first_bh);
|
||||
|
@ -263,7 +265,7 @@ int nilfs_mdt_get_block(struct inode *inode, unsigned long blkoff, int create,
|
|||
|
||||
/* Should be rewritten with merging nilfs_mdt_read_block() */
|
||||
retry:
|
||||
ret = nilfs_mdt_read_block(inode, blkoff, out_bh);
|
||||
ret = nilfs_mdt_read_block(inode, blkoff, !create, out_bh);
|
||||
if (!create || ret != -ENOENT)
|
||||
return ret;
|
||||
|
||||
|
@ -371,7 +373,7 @@ int nilfs_mdt_mark_block_dirty(struct inode *inode, unsigned long block)
|
|||
struct buffer_head *bh;
|
||||
int err;
|
||||
|
||||
err = nilfs_mdt_read_block(inode, block, &bh);
|
||||
err = nilfs_mdt_read_block(inode, block, 0, &bh);
|
||||
if (unlikely(err))
|
||||
return err;
|
||||
nilfs_mark_buffer_dirty(bh);
|
||||
|
|
Loading…
Reference in a new issue