Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07446dc7 authored by Joel Becker's avatar Joel Becker Committed by Mark Fasheh
Browse files

ocfs2: Move ocfs2_bread() into dir.c



dir.c is the only place using ocfs2_bread(), so let's make it static to
that file.

Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
parent 0fcaa56a
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -82,6 +82,49 @@ static int ocfs2_do_extend_dir(struct super_block *sb,
			       struct ocfs2_alloc_context *meta_ac,
			       struct buffer_head **new_bh);

static struct buffer_head *ocfs2_bread(struct inode *inode,
				       int block, int *err, int reada)
{
	struct buffer_head *bh = NULL;
	int tmperr;
	u64 p_blkno;
	int readflags = OCFS2_BH_CACHED;

	if (reada)
		readflags |= OCFS2_BH_READAHEAD;

	if (((u64)block << inode->i_sb->s_blocksize_bits) >=
	    i_size_read(inode)) {
		BUG_ON(!reada);
		return NULL;
	}

	down_read(&OCFS2_I(inode)->ip_alloc_sem);
	tmperr = ocfs2_extent_map_get_blocks(inode, block, &p_blkno, NULL,
					     NULL);
	up_read(&OCFS2_I(inode)->ip_alloc_sem);
	if (tmperr < 0) {
		mlog_errno(tmperr);
		goto fail;
	}

	tmperr = ocfs2_read_blocks(inode, p_blkno, 1, &bh, readflags);
	if (tmperr < 0)
		goto fail;

	tmperr = 0;

	*err = 0;
	return bh;

fail:
	brelse(bh);
	bh = NULL;

	*err = -EIO;
	return NULL;
}

/*
 * bh passed here can be an inode block or a dir data block, depending
 * on the inode inline data flag.
+0 −50
Original line number Diff line number Diff line
@@ -1132,56 +1132,6 @@ void ocfs2_drop_inode(struct inode *inode)
	mlog_exit_void();
}

/*
 * TODO: this should probably be merged into ocfs2_get_block
 *
 * However, you now need to pay attention to the cont_prepare_write()
 * stuff in ocfs2_get_block (that is, ocfs2_get_block pretty much
 * expects never to extend).
 */
struct buffer_head *ocfs2_bread(struct inode *inode,
				int block, int *err, int reada)
{
	struct buffer_head *bh = NULL;
	int tmperr;
	u64 p_blkno;
	int readflags = OCFS2_BH_CACHED;

	if (reada)
		readflags |= OCFS2_BH_READAHEAD;

	if (((u64)block << inode->i_sb->s_blocksize_bits) >=
	    i_size_read(inode)) {
		BUG_ON(!reada);
		return NULL;
	}

	down_read(&OCFS2_I(inode)->ip_alloc_sem);
	tmperr = ocfs2_extent_map_get_blocks(inode, block, &p_blkno, NULL,
					     NULL);
	up_read(&OCFS2_I(inode)->ip_alloc_sem);
	if (tmperr < 0) {
		mlog_errno(tmperr);
		goto fail;
	}

	tmperr = ocfs2_read_blocks(inode, p_blkno, 1, &bh, readflags);
	if (tmperr < 0)
		goto fail;

	tmperr = 0;

	*err = 0;
	return bh;

fail:
	brelse(bh);
	bh = NULL;

	*err = -EIO;
	return NULL;
}

/*
 * This is called from our getattr.
 */
+0 −2
Original line number Diff line number Diff line
@@ -117,8 +117,6 @@ extern struct kmem_cache *ocfs2_inode_cache;

extern const struct address_space_operations ocfs2_aops;

struct buffer_head *ocfs2_bread(struct inode *inode, int block,
				int *err, int reada);
void ocfs2_clear_inode(struct inode *inode);
void ocfs2_delete_inode(struct inode *inode);
void ocfs2_drop_inode(struct inode *inode);