merge ext4_claim_free_blocks & ext4_has_free_blocks
PATCH 1/2 merge ext4_claim_free_blocks & ext4_has_free_blocks
Mingming pointed out that ext4_claim_free_blocks & ext4_has_free_blocks are largely cut & pasted; they can be collapsed/merged as follows.
---
fs/ext4/balloc.c +16 -40
@@ -589,8 +589,15 @@ void ext4_free_blocks(handle_t *handle,return ; } -int ext4_claim_free_blocks (struct ext4_sb_info *sbi, -s64 nblocks) +/** +* ext4_has_free_blocks() +* @sbi: in-core super block structure. +* @nblocks: number of needed blocks +* +* Check if filesystem has nblocks free & available for allocation. +* On success return 1, return 0 on failure. +*/ +int ext4_has_free_blocks (struct ext4_sb_info *sbi,s64 nblocks) {s64 free_blocks, dirty_blocks;s64 root_blocks =0 ;
@@ -620,53 +627,21 @@ int ext4_claim_free_blocks(struct ext4_s*/ if (free_blocks < ((root_blocks + nblocks) + dirty_blocks))/* we don't have free space */ -return -ENOSPC ; +return 0 ; -/* Add the blocks to nblocks */ -percpu_counter_add (dbc, nblocks); -return 0 ; +return 1 ; } -/** -* ext4_has_free_blocks() -* @sbi: in-core super block structure. -* @nblocks: number of neeed blocks -* -* Check if filesystem has free blocks available for allocation. -* Return the number of blocks avaible for allocation for this request -* On success, return nblocks -*/ -ext4_fsblk_t ext4_has_free_blocks (struct ext4_sb_info *sbi, +int ext4_claim_free_blocks (struct ext4_sb_info *sbi,s64 nblocks) { -s64 free_blocks, dirty_blocks; -s64 root_blocks =0 ; -struct percpu_counter *fbc = &sbi->s_freeblocks_counter; -struct percpu_counter *dbc = &sbi->s_dirtyblocks_counter; - - free_blocks =percpu_counter_read_positive (fbc); - dirty_blocks =percpu_counter_read_positive (dbc); - -if (!capable (CAP_SYS_RESOURCE ) && - sbi->s_resuid != current->fsuid && - (sbi->s_resgid ==0 || !in_group_p (sbi->s_resgid))) - root_blocks =ext4_r_blocks_count (sbi->s_es); - -if (free_blocks - (nblocks + root_blocks + dirty_blocks) < -EXT4_FREEBLOCKS_WATERMARK ) { - free_blocks =percpu_counter_sum (fbc); - dirty_blocks =percpu_counter_sum (dbc); - } -if (free_blocks <= (root_blocks + dirty_blocks)) -/* we don't have free space */ +if (ext4_has_free_blocks (sbi, nblocks)) { +percpu_counter_add (&sbi->s_dirtyblocks_counter, nblocks);return 0 ; - -if (free_blocks - (root_blocks + dirty_blocks) < nblocks) -return free_blocks - (root_blocks + dirty_blocks); -return nblocks; + }else +return -ENOSPC ; }
PATCH v2 1/2 merge ext4_claim_free_blocks & ext4_has_free_blocks
Mingming pointed out that ext4_claim_free_blocks & ext4_has_free_blocks are largely cut & pasted; they can be collapsed/merged as follows.
---
(whoops, forgot a quilt refresh before sending the last one...)
fs/ext4/balloc.c +16 -40
@@ -589,8 +589,15 @@ void ext4_free_blocks(handle_t *handle,return ; } -int ext4_claim_free_blocks (struct ext4_sb_info *sbi, -s64 nblocks) +/** +* ext4_has_free_blocks() +* @sbi: in-core super block structure. +* @nblocks: number of needed blocks +* +* Check if filesystem has nblocks free & available for allocation. +* On success return 1, return 0 on failure. +*/ +int ext4_has_free_blocks (struct ext4_sb_info *sbi,s64 nblocks) {s64 free_blocks, dirty_blocks;s64 root_blocks =0 ;
@@ -620,53 +627,21 @@ int ext4_claim_free_blocks(struct ext4_s*/ if (free_blocks < ((root_blocks + nblocks) + dirty_blocks))/* we don't have free space */ -return -ENOSPC ; +return 0 ; -/* Add the blocks to nblocks */ -percpu_counter_add (dbc, nblocks); -return 0 ; +return 1 ; } -/** -* ext4_has_free_blocks() -* @sbi: in-core super block structure. -* @nblocks: number of neeed blocks -* -* Check if filesystem has free blocks available for allocation. -* Return the number of blocks avaible for allocation for this request -* On success, return nblocks -*/ -ext4_fsblk_t ext4_has_free_blocks (struct ext4_sb_info *sbi, +int ext4_claim_free_blocks (struct ext4_sb_info *sbi,s64 nblocks) { -s64 free_blocks, dirty_blocks; -s64 root_blocks =0 ; -struct percpu_counter *fbc = &sbi->s_freeblocks_counter; -struct percpu_counter *dbc = &sbi->s_dirtyblocks_counter; - - free_blocks =percpu_counter_read_positive (fbc); - dirty_blocks =percpu_counter_read_positive (dbc); - -if (!capable (CAP_SYS_RESOURCE ) && - sbi->s_resuid != current->fsuid && - (sbi->s_resgid ==0 || !in_group_p (sbi->s_resgid))) - root_blocks =ext4_r_blocks_count (sbi->s_es); - -if (free_blocks - (nblocks + root_blocks + dirty_blocks) < -EXT4_FREEBLOCKS_WATERMARK ) { - free_blocks =percpu_counter_sum (fbc); - dirty_blocks =percpu_counter_sum (dbc); - } -if (free_blocks <= (root_blocks + dirty_blocks)) -/* we don't have free space */ +if (ext4_has_free_blocks (sbi, nblocks)) { +percpu_counter_add (&sbi->s_dirtyblocks_counter, nblocks);return 0 ; - -if (free_blocks - (root_blocks + dirty_blocks) < nblocks) -return free_blocks - (root_blocks + dirty_blocks); -return nblocks; + }else +return -ENOSPC ; }
Quoted 6 lines · 在 2008-10-24五的 15:27 -0500,Eric Sandeen写道:
Mingming pointed out that
ext4_claim_free_blocks&ext4_has_free_blocksare largely cut & pasted; they can be collapsed/merged as follows.Signed-off-by Eric Sandeen <[email protected]>---
Quoted 99 lines
Index:
linux-2.6/fs/ext4/balloc.c
===================================================================fs/ext4/balloc.c +16
-41@@ -589,8 +589,15 @@ void ext4_free_blocks(handle_t *handle,return ; } -int ext4_claim_free_blocks (struct ext4_sb_info *sbi, -s64 nblocks) +/** +* ext4_has_free_blocks() +* @sbi: in-core super block structure. +* @nblocks: number of needed blocks +* +* Check if filesystem has nblocks free & available for allocation. +* On success return 1, return 0 on failure. +*/ +int ext4_has_free_blocks (struct ext4_sb_info *sbi,s64 nblocks) {s64 free_blocks, dirty_blocks;s64 root_blocks =0 ;@@ -620,53 +627,21 @@ int ext4_claim_free_blocks(struct ext4_s*/ if (free_blocks < ((root_blocks + nblocks) + dirty_blocks))/* we don't have free space */ -return -ENOSPC ; +return 0 ; -/* Add the blocks to nblocks */ -percpu_counter_add (dbc, nblocks); -return 0 ; +return 1 ; } -/** -* ext4_has_free_blocks() -* @sbi: in-core super block structure. -* @nblocks: number of neeed blocks -* -* Check if filesystem has free blocks available for allocation. -* Return the number of blocks avaible for allocation for this request -* On success, return nblocks -*/ -ext4_fsblk_t ext4_has_free_blocks (struct ext4_sb_info *sbi, +int ext4_claim_free_blocks (struct ext4_sb_info *sbi,s64 nblocks) { -s64 free_blocks, dirty_blocks; -s64 root_blocks =0 ; -struct percpu_counter *fbc = &sbi->s_freeblocks_counter; -struct percpu_counter *dbc = &sbi->s_dirtyblocks_counter; - - free_blocks =percpu_counter_read_positive (fbc); - dirty_blocks =percpu_counter_read_positive (dbc); - -if (!capable (CAP_SYS_RESOURCE ) && - sbi->s_resuid != current->fsuid && - (sbi->s_resgid ==0 || !in_group_p (sbi->s_resgid))) - root_blocks =ext4_r_blocks_count (sbi->s_es); - -if (free_blocks - (nblocks + root_blocks + dirty_blocks) < -EXT4_FREEBLOCKS_WATERMARK ) { - free_blocks =percpu_counter_sum (fbc); - dirty_blocks =percpu_counter_sum (dbc); - } -if (free_blocks <= (root_blocks + dirty_blocks)) -/* we don't have free space */ +if (ext4_has_free_blocks (sbi, nblocks)) { +percpu_counter_add (&sbi->s_dirtyblocks_counter, nblocks);return 0 ; - -if (free_blocks - (root_blocks + dirty_blocks) < nblocks) -return free_blocks - (root_blocks + dirty_blocks); -return nblocks; + }else +return -ENOSPC ; } -/** * ext4_should_retry_alloc() * @sb: super block Index:
linux-2.6/fs/ext4/ext4.h
===================================================================fs/ext4/ext4.h +1
-3@@ -1003,8 +1003,7 @@ extern ext4_fsblk_t ext4_new_blocks(hand ext4_lblk_t iblock, ext4_fsblk_t goal, unsigned long *count, int *errp);extern int ext4_claim_free_blocks (struct ext4_sb_info *sbi,s64 nblocks); -extern ext4_fsblk_t ext4_has_free_blocks (struct ext4_sb_info *sbi, -s64 nblocks); +extern int ext4_has_free_blocks (struct ext4_sb_info *sbi,s64 nblocks);extern void ext4_free_blocks (handle_t *handle,struct inode *inode,ext4_fsblk_t block,unsigned long count,int metadata); extern void ext4_free_blocks_sb(handle_t *handle, struct super_block *sb, --
Quoted 3 lines
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html