aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ufs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-06-19 13:53:52 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-07-06 17:40:01 -0400
commit5336970be09becb2b59ac3812718b2cb80d33347 (patch)
tree2247cd880e081905212525ea1ae78024a7e95941 /fs/ufs
parent0f3c1294bedcc4544c68d6b84699bdaa334b11b8 (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.c50
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 */
255static u64 253static u64
256ufs_inode_getfrag(struct inode *inode, u64 fragment, 254ufs_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);
483get_double: 467get_double: