ocfs2: Store the ocfs2_caching_info on ocfs2_extent_tree.
What do we cache? Metadata blocks. What are most of our non-inode metadata blocks? Extent blocks for our btrees. struct ocfs2_extent_tree is the main structure for managing those. So let's store the associated ocfs2_caching_info there. This means that ocfs2_et_root_journal_access() doesn't need struct inode anymore, and any place that has an et can refer to et->et_ci instead of INODE_CACHE(inode). Signed-off-by: Joel Becker <joel.becker@oracle.com>
This commit is contained in:
@@ -352,6 +352,7 @@ static void __ocfs2_init_extent_tree(struct ocfs2_extent_tree *et,
|
|||||||
{
|
{
|
||||||
et->et_ops = ops;
|
et->et_ops = ops;
|
||||||
et->et_root_bh = bh;
|
et->et_root_bh = bh;
|
||||||
|
et->et_ci = INODE_CACHE(inode);
|
||||||
et->et_root_journal_access = access;
|
et->et_root_journal_access = access;
|
||||||
if (!obj)
|
if (!obj)
|
||||||
obj = (void *)bh->b_data;
|
obj = (void *)bh->b_data;
|
||||||
@@ -415,11 +416,10 @@ static inline void ocfs2_et_update_clusters(struct inode *inode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline int ocfs2_et_root_journal_access(handle_t *handle,
|
static inline int ocfs2_et_root_journal_access(handle_t *handle,
|
||||||
struct ocfs2_caching_info *ci,
|
|
||||||
struct ocfs2_extent_tree *et,
|
struct ocfs2_extent_tree *et,
|
||||||
int type)
|
int type)
|
||||||
{
|
{
|
||||||
return et->et_root_journal_access(handle, ci, et->et_root_bh,
|
return et->et_root_journal_access(handle, et->et_ci, et->et_root_bh,
|
||||||
type);
|
type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1209,7 +1209,7 @@ static int ocfs2_add_branch(struct ocfs2_super *osb,
|
|||||||
mlog_errno(status);
|
mlog_errno(status);
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
status = ocfs2_et_root_journal_access(handle, INODE_CACHE(inode), et,
|
status = ocfs2_et_root_journal_access(handle, et,
|
||||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
mlog_errno(status);
|
mlog_errno(status);
|
||||||
@@ -1325,7 +1325,7 @@ static int ocfs2_shift_tree_depth(struct ocfs2_super *osb,
|
|||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = ocfs2_et_root_journal_access(handle, INODE_CACHE(inode), et,
|
status = ocfs2_et_root_journal_access(handle, et,
|
||||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
mlog_errno(status);
|
mlog_errno(status);
|
||||||
@@ -2674,7 +2674,7 @@ static int ocfs2_rotate_subtree_left(struct inode *inode, handle_t *handle,
|
|||||||
* We have to update i_last_eb_blk during the meta
|
* We have to update i_last_eb_blk during the meta
|
||||||
* data delete.
|
* data delete.
|
||||||
*/
|
*/
|
||||||
ret = ocfs2_et_root_journal_access(handle, INODE_CACHE(inode), et,
|
ret = ocfs2_et_root_journal_access(handle, et,
|
||||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
@@ -3026,7 +3026,7 @@ static int ocfs2_remove_rightmost_path(struct inode *inode, handle_t *handle,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ocfs2_journal_access_path(INODE_CACHE(inode), handle, path);
|
ret = ocfs2_journal_access_path(et->et_ci, handle, path);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
goto out;
|
goto out;
|
||||||
@@ -3056,7 +3056,7 @@ static int ocfs2_remove_rightmost_path(struct inode *inode, handle_t *handle,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ocfs2_journal_access_path(INODE_CACHE(inode), handle, left_path);
|
ret = ocfs2_journal_access_path(et->et_ci, handle, left_path);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
goto out;
|
goto out;
|
||||||
@@ -4212,7 +4212,7 @@ static int ocfs2_do_insert_extent(struct inode *inode,
|
|||||||
|
|
||||||
el = et->et_root_el;
|
el = et->et_root_el;
|
||||||
|
|
||||||
ret = ocfs2_et_root_journal_access(handle, INODE_CACHE(inode), et,
|
ret = ocfs2_et_root_journal_access(handle, et,
|
||||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
@@ -4274,7 +4274,7 @@ static int ocfs2_do_insert_extent(struct inode *inode,
|
|||||||
* ocfs2_rotate_tree_right() might have extended the
|
* ocfs2_rotate_tree_right() might have extended the
|
||||||
* transaction without re-journaling our tree root.
|
* transaction without re-journaling our tree root.
|
||||||
*/
|
*/
|
||||||
ret = ocfs2_et_root_journal_access(handle, INODE_CACHE(inode), et,
|
ret = ocfs2_et_root_journal_access(handle, et,
|
||||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
@@ -4797,7 +4797,7 @@ int ocfs2_add_clusters_in_btree(struct ocfs2_super *osb,
|
|||||||
BUG_ON(num_bits > clusters_to_add);
|
BUG_ON(num_bits > clusters_to_add);
|
||||||
|
|
||||||
/* reserve our write early -- insert_extent may update the tree root */
|
/* reserve our write early -- insert_extent may update the tree root */
|
||||||
status = ocfs2_et_root_journal_access(handle, INODE_CACHE(inode), et,
|
status = ocfs2_et_root_journal_access(handle, et,
|
||||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
mlog_errno(status);
|
mlog_errno(status);
|
||||||
@@ -5334,13 +5334,13 @@ static int ocfs2_truncate_rec(struct inode *inode, handle_t *handle,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ocfs2_journal_access_path(INODE_CACHE(inode), handle, path);
|
ret = ocfs2_journal_access_path(et->et_ci, handle, path);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ocfs2_journal_access_path(INODE_CACHE(inode), handle, left_path);
|
ret = ocfs2_journal_access_path(et->et_ci, handle, left_path);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
goto out;
|
goto out;
|
||||||
@@ -5575,7 +5575,7 @@ int ocfs2_remove_btree_range(struct inode *inode,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ocfs2_et_root_journal_access(handle, INODE_CACHE(inode), et,
|
ret = ocfs2_et_root_journal_access(handle, et,
|
||||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
|
@@ -45,7 +45,8 @@
|
|||||||
*
|
*
|
||||||
* ocfs2_extent_tree contains info for the root of the b-tree, it must have a
|
* ocfs2_extent_tree contains info for the root of the b-tree, it must have a
|
||||||
* root ocfs2_extent_list and a root_bh so that they can be used in the b-tree
|
* root ocfs2_extent_list and a root_bh so that they can be used in the b-tree
|
||||||
* functions. With metadata ecc, we now call different journal_access
|
* functions. It needs the ocfs2_caching_info structure associated with
|
||||||
|
* I/O on the tree. With metadata ecc, we now call different journal_access
|
||||||
* functions for each type of metadata, so it must have the
|
* functions for each type of metadata, so it must have the
|
||||||
* root_journal_access function.
|
* root_journal_access function.
|
||||||
* ocfs2_extent_tree_operations abstract the normal operations we do for
|
* ocfs2_extent_tree_operations abstract the normal operations we do for
|
||||||
@@ -56,6 +57,7 @@ struct ocfs2_extent_tree {
|
|||||||
struct ocfs2_extent_tree_operations *et_ops;
|
struct ocfs2_extent_tree_operations *et_ops;
|
||||||
struct buffer_head *et_root_bh;
|
struct buffer_head *et_root_bh;
|
||||||
struct ocfs2_extent_list *et_root_el;
|
struct ocfs2_extent_list *et_root_el;
|
||||||
|
struct ocfs2_caching_info *et_ci;
|
||||||
ocfs2_journal_access_func et_root_journal_access;
|
ocfs2_journal_access_func et_root_journal_access;
|
||||||
void *et_object;
|
void *et_object;
|
||||||
unsigned int et_max_leaf_clusters;
|
unsigned int et_max_leaf_clusters;
|
||||||
|
Reference in New Issue
Block a user