ufs_inode_getfrag(): pass index instead of 'fragment'
same story as with ufs_inode_getblock() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
+17
-33
@@ -242,10 +242,8 @@ ufs_extend_tail(struct inode *inode, u64 writes_to,
|
|||||||
/**
|
/**
|
||||||
* ufs_inode_getfrag() - allocate new fragment(s)
|
* ufs_inode_getfrag() - allocate new fragment(s)
|
||||||
* @inode: pointer to inode
|
* @inode: pointer to inode
|
||||||
* @fragment: number of `fragment' which hold pointer
|
* @index: number of block pointer within the inode's array.
|
||||||
* to new allocated fragment(s)
|
|
||||||
* @new_fragment: number of new allocated fragment(s)
|
* @new_fragment: number of new allocated fragment(s)
|
||||||
* @required: how many fragment(s) we require
|
|
||||||
* @err: we set it if something wrong
|
* @err: we set it if something wrong
|
||||||
* @phys: pointer to where we save physical number of new allocated fragments,
|
* @phys: pointer to where we save physical number of new allocated fragments,
|
||||||
* NULL if we allocate not data(indirect blocks for example).
|
* NULL if we allocate not data(indirect blocks for example).
|
||||||
@@ -253,15 +251,14 @@ ufs_extend_tail(struct inode *inode, u64 writes_to,
|
|||||||
* @locked_page: for ufs_new_fragments()
|
* @locked_page: for ufs_new_fragments()
|
||||||
*/
|
*/
|
||||||
static u64
|
static u64
|
||||||
ufs_inode_getfrag(struct inode *inode, u64 fragment,
|
ufs_inode_getfrag(struct inode *inode, unsigned index,
|
||||||
sector_t new_fragment, unsigned int required, int *err,
|
sector_t new_fragment, int *err,
|
||||||
long *phys, int *new, struct page *locked_page)
|
long *phys, int *new, struct page *locked_page)
|
||||||
{
|
{
|
||||||
struct ufs_inode_info *ufsi = UFS_I(inode);
|
struct ufs_inode_info *ufsi = UFS_I(inode);
|
||||||
struct super_block *sb = inode->i_sb;
|
struct super_block *sb = inode->i_sb;
|
||||||
struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
|
struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
|
||||||
unsigned blockoff;
|
u64 tmp, goal, lastfrag;
|
||||||
u64 tmp, goal, lastfrag, block;
|
|
||||||
unsigned nfrags = uspi->s_fpb;
|
unsigned nfrags = uspi->s_fpb;
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
@@ -270,9 +267,7 @@ ufs_inode_getfrag(struct inode *inode, u64 fragment,
|
|||||||
goto ufs2;
|
goto ufs2;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
block = ufs_fragstoblks (fragment);
|
p = ufs_get_direct_data_ptr(uspi, ufsi, index);
|
||||||
blockoff = ufs_fragnum (fragment);
|
|
||||||
p = ufs_get_direct_data_ptr(uspi, ufsi, block);
|
|
||||||
tmp = ufs_data_ptr_to_cpu(sb, p);
|
tmp = ufs_data_ptr_to_cpu(sb, p);
|
||||||
if (tmp)
|
if (tmp)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -284,13 +279,13 @@ ufs_inode_getfrag(struct inode *inode, u64 fragment,
|
|||||||
nfrags = (new_fragment & uspi->s_fpbmask) + 1;
|
nfrags = (new_fragment & uspi->s_fpbmask) + 1;
|
||||||
|
|
||||||
goal = 0;
|
goal = 0;
|
||||||
if (block) {
|
if (index) {
|
||||||
goal = ufs_data_ptr_to_cpu(sb,
|
goal = ufs_data_ptr_to_cpu(sb,
|
||||||
ufs_get_direct_data_ptr(uspi, ufsi, block - 1));
|
ufs_get_direct_data_ptr(uspi, ufsi, index - 1));
|
||||||
if (goal)
|
if (goal)
|
||||||
goal += uspi->s_fpb;
|
goal += uspi->s_fpb;
|
||||||
}
|
}
|
||||||
tmp = ufs_new_fragments(inode, p, fragment - blockoff,
|
tmp = ufs_new_fragments(inode, p, ufs_blknum(new_fragment),
|
||||||
goal, uspi->s_fpb, err,
|
goal, uspi->s_fpb, err,
|
||||||
phys != NULL ? locked_page : NULL);
|
phys != NULL ? locked_page : NULL);
|
||||||
|
|
||||||
@@ -408,7 +403,7 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
|
|||||||
int ret, err, new;
|
int ret, err, new;
|
||||||
unsigned offsets[4];
|
unsigned offsets[4];
|
||||||
int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets);
|
int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets);
|
||||||
unsigned long ptr,phys;
|
unsigned long phys;
|
||||||
u64 phys64 = 0;
|
u64 phys64 = 0;
|
||||||
unsigned frag = fragment & uspi->s_fpbmask;
|
unsigned frag = fragment & uspi->s_fpbmask;
|
||||||
|
|
||||||
@@ -446,38 +441,27 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = fragment;
|
|
||||||
|
|
||||||
if (depth == 1) {
|
if (depth == 1) {
|
||||||
phys64 = ufs_inode_getfrag(inode, ptr, fragment, 1, &err, &phys,
|
phys64 = ufs_inode_getfrag(inode, offsets[0], fragment,
|
||||||
&new, bh_result->b_page);
|
&err, &phys, &new, bh_result->b_page);
|
||||||
if (phys64) {
|
if (phys64) {
|
||||||
phys64 += frag;
|
phys64 += frag;
|
||||||
phys = phys64;
|
phys = phys64;
|
||||||
}
|
}
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
ptr -= UFS_NDIR_FRAGMENT;
|
|
||||||
if (depth == 2) {
|
if (depth == 2) {
|
||||||
phys64 = ufs_inode_getfrag(inode,
|
phys64 = ufs_inode_getfrag(inode, offsets[0], fragment,
|
||||||
UFS_IND_FRAGMENT + (ptr >> uspi->s_apbshift),
|
&err, NULL, NULL, bh_result->b_page);
|
||||||
fragment, uspi->s_fpb, &err, NULL, NULL,
|
|
||||||
bh_result->b_page);
|
|
||||||
goto get_indirect;
|
goto get_indirect;
|
||||||
}
|
}
|
||||||
ptr -= 1 << (uspi->s_apbshift + uspi->s_fpbshift);
|
|
||||||
if (depth == 3) {
|
if (depth == 3) {
|
||||||
phys64 = ufs_inode_getfrag(inode,
|
phys64 = ufs_inode_getfrag(inode, offsets[0], fragment,
|
||||||
UFS_DIND_FRAGMENT + (ptr >> uspi->s_2apbshift),
|
&err, NULL, NULL, bh_result->b_page);
|
||||||
fragment, uspi->s_fpb, &err, NULL, NULL,
|
|
||||||
bh_result->b_page);
|
|
||||||
goto get_double;
|
goto get_double;
|
||||||
}
|
}
|
||||||
ptr -= 1 << (uspi->s_2apbshift + uspi->s_fpbshift);
|
phys64 = ufs_inode_getfrag(inode, offsets[0], fragment,
|
||||||
phys64 = ufs_inode_getfrag(inode,
|
&err, NULL, NULL, bh_result->b_page);
|
||||||
UFS_TIND_FRAGMENT + (ptr >> uspi->s_3apbshift),
|
|
||||||
fragment, uspi->s_fpb, &err, NULL, NULL,
|
|
||||||
bh_result->b_page);
|
|
||||||
phys64 = ufs_inode_getblock(inode, phys64, offsets[1],
|
phys64 = ufs_inode_getblock(inode, phys64, offsets[1],
|
||||||
fragment, &err, NULL, NULL, NULL);
|
fragment, &err, NULL, NULL, NULL);
|
||||||
get_double:
|
get_double:
|
||||||
|
|||||||
Reference in New Issue
Block a user