aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ufs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-06-19 14:27:10 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-07-06 17:40:05 -0400
commit4e317ce73aecb735f389ab0d42ae3197a55265e4 (patch)
tree8df990e850decd6072c6595a1da0bb5731c2adda /fs/ufs
parent0385f1f9e3e5cb17047474037002500383237f47 (diff)
ufs_inode_get{frag,block}(): get rid of 'phys' argument
Just pass NULL as locked_page in case of first block in the indirect chain. Old calling conventions aside, a reason for having 'phys' was that ufs_inode_getfrag() used to be able to do _two_ allocations - indirect block and extending/reallocating a tail. We needed locked_page for the latter (it's a data), but we also needed to figure out that indirect block is metadata. So we used to pass non-NULL locked_page in all cases *and* used NULL phys as indication of being asked to allocate an indirect. With tail unpacking taken into a separate function we don't need those convolutions anymore. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ufs')
-rw-r--r--fs/ufs/inode.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c
index 7f551b3e3ba4..a064cf44b143 100644
--- a/fs/ufs/inode.c
+++ b/fs/ufs/inode.c
@@ -245,15 +245,13 @@ ufs_extend_tail(struct inode *inode, u64 writes_to,
245 * @index: number of block pointer within the inode's array. 245 * @index: number of block pointer within the inode's array.
246 * @new_fragment: number of new allocated fragment(s) 246 * @new_fragment: number of new allocated fragment(s)
247 * @err: we set it if something wrong 247 * @err: we set it if something wrong
248 * @phys: pointer to where we save physical number of new allocated fragments,
249 * NULL if we allocate not data(indirect blocks for example).
250 * @new: we set it if we allocate new block 248 * @new: we set it if we allocate new block
251 * @locked_page: for ufs_new_fragments() 249 * @locked_page: for ufs_new_fragments()
252 */ 250 */
253static u64 251static u64
254ufs_inode_getfrag(struct inode *inode, unsigned index, 252ufs_inode_getfrag(struct inode *inode, unsigned index,
255 sector_t new_fragment, int *err, 253 sector_t new_fragment, int *err,
256 long *phys, int *new, struct page *locked_page) 254 int *new, struct page *locked_page)
257{ 255{
258 struct ufs_inode_info *ufsi = UFS_I(inode); 256 struct ufs_inode_info *ufsi = UFS_I(inode);
259 struct super_block *sb = inode->i_sb; 257 struct super_block *sb = inode->i_sb;
@@ -286,18 +284,15 @@ ufs_inode_getfrag(struct inode *inode, unsigned index,
286 goal += uspi->s_fpb; 284 goal += uspi->s_fpb;
287 } 285 }
288 tmp = ufs_new_fragments(inode, p, ufs_blknum(new_fragment), 286 tmp = ufs_new_fragments(inode, p, ufs_blknum(new_fragment),
289 goal, uspi->s_fpb, err, 287 goal, uspi->s_fpb, err, locked_page);
290 phys != NULL ? locked_page : NULL);
291 288
292 if (!tmp) { 289 if (!tmp) {
293 *err = -ENOSPC; 290 *err = -ENOSPC;
294 return 0; 291 return 0;
295 } 292 }
296 293
297 if (phys) { 294 if (new)
298 *err = 0;
299 *new = 1; 295 *new = 1;
300 }
301 inode->i_ctime = CURRENT_TIME_SEC; 296 inode->i_ctime = CURRENT_TIME_SEC;
302 if (IS_SYNC(inode)) 297 if (IS_SYNC(inode))
303 ufs_sync_inode (inode); 298 ufs_sync_inode (inode);
@@ -329,14 +324,13 @@ repeat2:
329 * @new_fragment: number of new allocated fragment 324 * @new_fragment: number of new allocated fragment
330 * (block will hold this fragment and also uspi->s_fpb-1) 325 * (block will hold this fragment and also uspi->s_fpb-1)
331 * @err: see ufs_inode_getfrag() 326 * @err: see ufs_inode_getfrag()
332 * @phys: see ufs_inode_getfrag()
333 * @new: see ufs_inode_getfrag() 327 * @new: see ufs_inode_getfrag()
334 * @locked_page: see ufs_inode_getfrag() 328 * @locked_page: see ufs_inode_getfrag()
335 */ 329 */
336static u64 330static u64
337ufs_inode_getblock(struct inode *inode, u64 ind_block, 331ufs_inode_getblock(struct inode *inode, u64 ind_block,
338 unsigned index, sector_t new_fragment, int *err, 332 unsigned index, sector_t new_fragment, int *err,
339 long *phys, int *new, struct page *locked_page) 333 int *new, struct page *locked_page)
340{ 334{
341 struct super_block *sb = inode->i_sb; 335 struct super_block *sb = inode->i_sb;
342 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi; 336 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
@@ -404,7 +398,6 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
404 unsigned offsets[4]; 398 unsigned offsets[4];
405 int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets); 399 int depth = ufs_block_to_path(inode, fragment >> uspi->s_fpbshift, offsets);
406 u64 phys64 = 0; 400 u64 phys64 = 0;
407 unsigned long phys;
408 unsigned frag = fragment & uspi->s_fpbmask; 401 unsigned frag = fragment & uspi->s_fpbmask;
409 402
410 if (!create) { 403 if (!create) {
@@ -435,16 +428,16 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
435 428
436 if (depth == 1) { 429 if (depth == 1) {
437 phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, 430 phys64 = ufs_inode_getfrag(inode, offsets[0], fragment,
438 &err, &phys, &new, bh_result->b_page); 431 &err, &new, bh_result->b_page);
439 } else { 432 } else {
440 int i; 433 int i;
441 phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, 434 phys64 = ufs_inode_getfrag(inode, offsets[0], fragment,
442 &err, NULL, NULL, bh_result->b_page); 435 &err, NULL, NULL);
443 for (i = 1; i < depth - 1; i++) 436 for (i = 1; i < depth - 1; i++)
444 phys64 = ufs_inode_getblock(inode, phys64, offsets[i], 437 phys64 = ufs_inode_getblock(inode, phys64, offsets[i],
445 fragment, &err, NULL, NULL, NULL); 438 fragment, &err, NULL, NULL);
446 phys64 = ufs_inode_getblock(inode, phys64, offsets[depth - 1], 439 phys64 = ufs_inode_getblock(inode, phys64, offsets[depth - 1],
447 fragment, &err, &phys, &new, bh_result->b_page); 440 fragment, &err, &new, bh_result->b_page);
448 } 441 }
449out: 442out:
450 if (phys64) { 443 if (phys64) {