dquot: cleanup space allocation / freeing routines
Get rid of the alloc_space, free_space, reserve_space, claim_space and release_rsv dquot operations - they are always called from the filesystem and if a filesystem really needs their own (which none currently does) it can just call into it's own routine directly. Move shared logic into the common __dquot_alloc_space, dquot_claim_space_nodirty and __dquot_free_space low-level methods, and rationalize the wrappers around it to move as much as possible code into the common block for CONFIG_QUOTA vs not. Also rename all these helpers to be named dquot_* instead of vfs_dq_*. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:

committed by
Jan Kara

parent
49792c806d
commit
5dd4056db8
@@ -425,7 +425,7 @@ static void _reiserfs_free_block(struct reiserfs_transaction_handle *th,
|
||||
|
||||
journal_mark_dirty(th, s, sbh);
|
||||
if (for_unformatted)
|
||||
vfs_dq_free_block_nodirty(inode, 1);
|
||||
dquot_free_block_nodirty(inode, 1);
|
||||
}
|
||||
|
||||
void reiserfs_free_block(struct reiserfs_transaction_handle *th,
|
||||
@@ -1049,7 +1049,7 @@ static inline int blocknrs_and_prealloc_arrays_from_search_start
|
||||
amount_needed, hint->inode->i_uid);
|
||||
#endif
|
||||
quota_ret =
|
||||
vfs_dq_alloc_block_nodirty(hint->inode, amount_needed);
|
||||
dquot_alloc_block_nodirty(hint->inode, amount_needed);
|
||||
if (quota_ret) /* Quota exceeded? */
|
||||
return QUOTA_EXCEEDED;
|
||||
if (hint->preallocate && hint->prealloc_size) {
|
||||
@@ -1058,7 +1058,7 @@ static inline int blocknrs_and_prealloc_arrays_from_search_start
|
||||
"reiserquota: allocating (prealloc) %d blocks id=%u",
|
||||
hint->prealloc_size, hint->inode->i_uid);
|
||||
#endif
|
||||
quota_ret = vfs_dq_prealloc_block_nodirty(hint->inode,
|
||||
quota_ret = dquot_prealloc_block_nodirty(hint->inode,
|
||||
hint->prealloc_size);
|
||||
if (quota_ret)
|
||||
hint->preallocate = hint->prealloc_size = 0;
|
||||
@@ -1092,7 +1092,7 @@ static inline int blocknrs_and_prealloc_arrays_from_search_start
|
||||
hint->inode->i_uid);
|
||||
#endif
|
||||
/* Free not allocated blocks */
|
||||
vfs_dq_free_block_nodirty(hint->inode,
|
||||
dquot_free_block_nodirty(hint->inode,
|
||||
amount_needed + hint->prealloc_size -
|
||||
nr_allocated);
|
||||
}
|
||||
@@ -1125,7 +1125,7 @@ static inline int blocknrs_and_prealloc_arrays_from_search_start
|
||||
REISERFS_I(hint->inode)->i_prealloc_count,
|
||||
hint->inode->i_uid);
|
||||
#endif
|
||||
vfs_dq_free_block_nodirty(hint->inode, amount_needed +
|
||||
dquot_free_block_nodirty(hint->inode, amount_needed +
|
||||
hint->prealloc_size - nr_allocated -
|
||||
REISERFS_I(hint->inode)->
|
||||
i_prealloc_count);
|
||||
|
@@ -1299,7 +1299,7 @@ int reiserfs_delete_item(struct reiserfs_transaction_handle *th,
|
||||
"reiserquota delete_item(): freeing %u, id=%u type=%c",
|
||||
quota_cut_bytes, inode->i_uid, head2type(&s_ih));
|
||||
#endif
|
||||
vfs_dq_free_space_nodirty(inode, quota_cut_bytes);
|
||||
dquot_free_space_nodirty(inode, quota_cut_bytes);
|
||||
|
||||
/* Return deleted body length */
|
||||
return ret_value;
|
||||
@@ -1383,7 +1383,7 @@ void reiserfs_delete_solid_item(struct reiserfs_transaction_handle *th,
|
||||
quota_cut_bytes, inode->i_uid,
|
||||
key2type(key));
|
||||
#endif
|
||||
vfs_dq_free_space_nodirty(inode,
|
||||
dquot_free_space_nodirty(inode,
|
||||
quota_cut_bytes);
|
||||
}
|
||||
break;
|
||||
@@ -1733,7 +1733,7 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
|
||||
"reiserquota cut_from_item(): freeing %u id=%u type=%c",
|
||||
quota_cut_bytes, inode->i_uid, '?');
|
||||
#endif
|
||||
vfs_dq_free_space_nodirty(inode, quota_cut_bytes);
|
||||
dquot_free_space_nodirty(inode, quota_cut_bytes);
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
@@ -1968,9 +1968,10 @@ int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, struct tree
|
||||
key2type(&(key->on_disk_key)));
|
||||
#endif
|
||||
|
||||
if (vfs_dq_alloc_space_nodirty(inode, pasted_size)) {
|
||||
retval = dquot_alloc_space_nodirty(inode, pasted_size);
|
||||
if (retval) {
|
||||
pathrelse(search_path);
|
||||
return -EDQUOT;
|
||||
return retval;
|
||||
}
|
||||
init_tb_struct(th, &s_paste_balance, th->t_super, search_path,
|
||||
pasted_size);
|
||||
@@ -2024,7 +2025,7 @@ int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, struct tree
|
||||
pasted_size, inode->i_uid,
|
||||
key2type(&(key->on_disk_key)));
|
||||
#endif
|
||||
vfs_dq_free_space_nodirty(inode, pasted_size);
|
||||
dquot_free_space_nodirty(inode, pasted_size);
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -2062,9 +2063,10 @@ int reiserfs_insert_item(struct reiserfs_transaction_handle *th,
|
||||
#endif
|
||||
/* We can't dirty inode here. It would be immediately written but
|
||||
* appropriate stat item isn't inserted yet... */
|
||||
if (vfs_dq_alloc_space_nodirty(inode, quota_bytes)) {
|
||||
retval = dquot_alloc_space_nodirty(inode, quota_bytes);
|
||||
if (retval) {
|
||||
pathrelse(path);
|
||||
return -EDQUOT;
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
init_tb_struct(th, &s_ins_balance, th->t_super, path,
|
||||
@@ -2113,6 +2115,6 @@ int reiserfs_insert_item(struct reiserfs_transaction_handle *th,
|
||||
quota_bytes, inode->i_uid, head2type(ih));
|
||||
#endif
|
||||
if (inode)
|
||||
vfs_dq_free_space_nodirty(inode, quota_bytes);
|
||||
dquot_free_space_nodirty(inode, quota_bytes);
|
||||
return retval;
|
||||
}
|
||||
|
@@ -618,9 +618,7 @@ static int reiserfs_quota_on(struct super_block *, int, int, char *, int);
|
||||
static const struct dquot_operations reiserfs_quota_operations = {
|
||||
.initialize = dquot_initialize,
|
||||
.drop = dquot_drop,
|
||||
.alloc_space = dquot_alloc_space,
|
||||
.alloc_inode = dquot_alloc_inode,
|
||||
.free_space = dquot_free_space,
|
||||
.free_inode = dquot_free_inode,
|
||||
.transfer = dquot_transfer,
|
||||
.write_dquot = reiserfs_write_dquot,
|
||||
|
Reference in New Issue
Block a user