diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-06-19 14:27:10 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-07-06 17:40:05 -0400 |
commit | 4e317ce73aecb735f389ab0d42ae3197a55265e4 (patch) | |
tree | 8df990e850decd6072c6595a1da0bb5731c2adda /fs/ufs | |
parent | 0385f1f9e3e5cb17047474037002500383237f47 (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.c | 23 |
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 | */ |
253 | static u64 | 251 | static u64 |
254 | ufs_inode_getfrag(struct inode *inode, unsigned index, | 252 | ufs_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 | */ |
336 | static u64 | 330 | static u64 |
337 | ufs_inode_getblock(struct inode *inode, u64 ind_block, | 331 | ufs_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 | } |
449 | out: | 442 | out: |
450 | if (phys64) { | 443 | if (phys64) { |