diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-06-19 13:53:52 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-07-06 17:40:01 -0400 |
commit | 5336970be09becb2b59ac3812718b2cb80d33347 (patch) | |
tree | 2247cd880e081905212525ea1ae78024a7e95941 /fs/ufs | |
parent | 0f3c1294bedcc4544c68d6b84699bdaa334b11b8 (diff) |
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>
Diffstat (limited to 'fs/ufs')
-rw-r--r-- | fs/ufs/inode.c | 50 |
1 files changed, 17 insertions, 33 deletions
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index d652f64885fd..c05cf14ef8ff 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c | |||
@@ -242,10 +242,8 @@ ufs_extend_tail(struct inode *inode, u64 writes_to, | |||
242 | /** | 242 | /** |
243 | * ufs_inode_getfrag() - allocate new fragment(s) | 243 | * ufs_inode_getfrag() - allocate new fragment(s) |
244 | * @inode: pointer to inode | 244 | * @inode: pointer to inode |
245 | * @fragment: number of `fragment' which hold pointer | 245 | * @index: number of block pointer within the inode's array. |
246 | * to new allocated fragment(s) | ||
247 | * @new_fragment: number of new allocated fragment(s) | 246 | * @new_fragment: number of new allocated fragment(s) |
248 | * @required: how many fragment(s) we require | ||
249 | * @err: we set it if something wrong | 247 | * @err: we set it if something wrong |
250 | * @phys: pointer to where we save physical number of new allocated fragments, | 248 | * @phys: pointer to where we save physical number of new allocated fragments, |
251 | * NULL if we allocate not data(indirect blocks for example). | 249 | * NULL if we allocate not data(indirect blocks for example). |
@@ -253,15 +251,14 @@ ufs_extend_tail(struct inode *inode, u64 writes_to, | |||
253 | * @locked_page: for ufs_new_fragments() | 251 | * @locked_page: for ufs_new_fragments() |
254 | */ | 252 | */ |
255 | static u64 | 253 | static u64 |
256 | ufs_inode_getfrag(struct inode *inode, u64 fragment, | 254 | ufs_inode_getfrag(struct inode *inode, unsigned index, |
257 | sector_t new_fragment, unsigned int required, int *err, | 255 | sector_t new_fragment, int *err, |
258 | long *phys, int *new, struct page *locked_page) | 256 | long *phys, int *new, struct page *locked_page) |
259 | { | 257 | { |
260 | struct ufs_inode_info *ufsi = UFS_I(inode); | 258 | struct ufs_inode_info *ufsi = UFS_I(inode); |
261 | struct super_block *sb = inode->i_sb; | 259 | struct super_block *sb = inode->i_sb; |
262 | struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi; | 260 | struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi; |
263 | unsigned blockoff; | 261 | u64 tmp, goal, lastfrag; |
264 | u64 tmp, goal, lastfrag, block; | ||
265 | unsigned nfrags = uspi->s_fpb; | 262 | unsigned nfrags = uspi->s_fpb; |
266 | void *p; | 263 | void *p; |
267 | 264 | ||
@@ -270,9 +267,7 @@ ufs_inode_getfrag(struct inode *inode, u64 fragment, | |||
270 | goto ufs2; | 267 | goto ufs2; |
271 | */ | 268 | */ |
272 | 269 | ||
273 | block = ufs_fragstoblks (fragment); | 270 | p = ufs_get_direct_data_ptr(uspi, ufsi, index); |
274 | blockoff = ufs_fragnum (fragment); | ||
275 | p = ufs_get_direct_data_ptr(uspi, ufsi, block); | ||
276 | tmp = ufs_data_ptr_to_cpu(sb, p); | 271 | tmp = ufs_data_ptr_to_cpu(sb, p); |
277 | if (tmp) | 272 | if (tmp) |
278 | goto out; | 273 | goto out; |
@@ -284,13 +279,13 @@ ufs_inode_getfrag(struct inode *inode, u64 fragment, | |||
284 | nfrags = (new_fragment & uspi->s_fpbmask) + 1; | 279 | nfrags = (new_fragment & uspi->s_fpbmask) + 1; |
285 | 280 | ||
286 | goal = 0; | 281 | goal = 0; |
287 | if (block) { | 282 | if (index) { |
288 | goal = ufs_data_ptr_to_cpu(sb, | 283 | goal = ufs_data_ptr_to_cpu(sb, |
289 | ufs_get_direct_data_ptr(uspi, ufsi, block - 1)); | 284 | ufs_get_direct_data_ptr(uspi, ufsi, index - 1)); |
290 | if (goal) | 285 | if (goal) |
291 | goal += uspi->s_fpb; | 286 | goal += uspi->s_fpb; |
292 | } | 287 | } |
293 | tmp = ufs_new_fragments(inode, p, fragment - blockoff, | 288 | tmp = ufs_new_fragments(inode, p, ufs_blknum(new_fragment), |
294 | goal, uspi->s_fpb, err, | 289 | goal, uspi->s_fpb, err, |
295 | phys != NULL ? locked_page : NULL); | 290 | phys != NULL ? locked_page : NULL); |
296 | 291 | ||
@@ -408,7 +403,7 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff | |||
408 | int ret, err, new; | 403 | int ret, err, new; |
409 | unsigned offsets[4]; | 404 | unsigned offsets[4]; |
410 | int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets); | 405 | int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets); |
411 | unsigned long ptr,phys; | 406 | unsigned long phys; |
412 | u64 phys64 = 0; | 407 | u64 phys64 = 0; |
413 | unsigned frag = fragment & uspi->s_fpbmask; | 408 | unsigned frag = fragment & uspi->s_fpbmask; |
414 | 409 | ||
@@ -446,38 +441,27 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff | |||
446 | } | 441 | } |
447 | } | 442 | } |
448 | 443 | ||
449 | ptr = fragment; | ||
450 | |||
451 | if (depth == 1) { | 444 | if (depth == 1) { |
452 | phys64 = ufs_inode_getfrag(inode, ptr, fragment, 1, &err, &phys, | 445 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, |
453 | &new, bh_result->b_page); | 446 | &err, &phys, &new, bh_result->b_page); |
454 | if (phys64) { | 447 | if (phys64) { |
455 | phys64 += frag; | 448 | phys64 += frag; |
456 | phys = phys64; | 449 | phys = phys64; |
457 | } | 450 | } |
458 | goto out; | 451 | goto out; |
459 | } | 452 | } |
460 | ptr -= UFS_NDIR_FRAGMENT; | ||
461 | if (depth == 2) { | 453 | if (depth == 2) { |
462 | phys64 = ufs_inode_getfrag(inode, | 454 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, |
463 | UFS_IND_FRAGMENT + (ptr >> uspi->s_apbshift), | 455 | &err, NULL, NULL, bh_result->b_page); |
464 | fragment, uspi->s_fpb, &err, NULL, NULL, | ||
465 | bh_result->b_page); | ||
466 | goto get_indirect; | 456 | goto get_indirect; |
467 | } | 457 | } |
468 | ptr -= 1 << (uspi->s_apbshift + uspi->s_fpbshift); | ||
469 | if (depth == 3) { | 458 | if (depth == 3) { |
470 | phys64 = ufs_inode_getfrag(inode, | 459 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, |
471 | UFS_DIND_FRAGMENT + (ptr >> uspi->s_2apbshift), | 460 | &err, NULL, NULL, bh_result->b_page); |
472 | fragment, uspi->s_fpb, &err, NULL, NULL, | ||
473 | bh_result->b_page); | ||
474 | goto get_double; | 461 | goto get_double; |
475 | } | 462 | } |
476 | ptr -= 1 << (uspi->s_2apbshift + uspi->s_fpbshift); | 463 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, |
477 | phys64 = ufs_inode_getfrag(inode, | 464 | &err, NULL, NULL, bh_result->b_page); |
478 | UFS_TIND_FRAGMENT + (ptr >> uspi->s_3apbshift), | ||
479 | fragment, uspi->s_fpb, &err, NULL, NULL, | ||
480 | bh_result->b_page); | ||
481 | phys64 = ufs_inode_getblock(inode, phys64, offsets[1], | 465 | phys64 = ufs_inode_getblock(inode, phys64, offsets[1], |
482 | fragment, &err, NULL, NULL, NULL); | 466 | fragment, &err, NULL, NULL, NULL); |
483 | get_double: | 467 | get_double: |