mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
GFS2: move toward a generic multi-block allocator
This patch is a revision of the one I previously posted. I tried to integrate all the suggestions Steve gave. The purpose of the patch is to change function gfs2_alloc_block (allocate either a dinode block or an extent of data blocks) to a more generic gfs2_alloc_blocks function that can allocate both a dinode _and_ an extent of data blocks in the same call. This will ultimately help us create a multi-block reservation scheme to reduce file fragmentation. This patch moves more toward a generic multi-block allocator that takes a pointer to the number of data blocks to allocate, plus whether or not to allocate a dinode. In theory, it could be called to allocate (1) a single dinode block, (2) a group of one or more data blocks, or (3) a dinode plus several data blocks. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
4442f2e03e
commit
6e87ed0fc9
6 changed files with 39 additions and 39 deletions
|
@ -389,6 +389,7 @@ static int alloc_dinode(struct gfs2_inode *dip, u64 *no_addr, u64 *generation)
|
|||
{
|
||||
struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
|
||||
int error;
|
||||
int dblocks = 0;
|
||||
|
||||
if (gfs2_alloc_get(dip) == NULL)
|
||||
return -ENOMEM;
|
||||
|
@ -402,7 +403,7 @@ static int alloc_dinode(struct gfs2_inode *dip, u64 *no_addr, u64 *generation)
|
|||
if (error)
|
||||
goto out_ipreserv;
|
||||
|
||||
error = gfs2_alloc_block(dip, no_addr, NULL, 1, generation);
|
||||
error = gfs2_alloc_blocks(dip, no_addr, &dblocks, 1, generation);
|
||||
|
||||
gfs2_trans_end(sdp);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue