ocfs2_local_alloc_inode is used in multiple functions. It is convenient if we
move ocfs2_local_alloc_inode to ocfs2 super.

Signed-off-by: Srinivas Eeda <srinivas.e...@oracle.com>
---
 fs/ocfs2/localalloc.c |   53 ++++++++++++-------------------------------------
 fs/ocfs2/ocfs2.h      |    1 +
 2 files changed, 14 insertions(+), 40 deletions(-)

diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
index 53a162f..45818df 100644
--- a/fs/ocfs2/localalloc.c
+++ b/fs/ocfs2/localalloc.c
@@ -72,8 +72,7 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super 
*osb,
                                        handle_t *handle,
                                        struct ocfs2_alloc_context *ac);
 
-static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
-                                         struct inode *local_alloc_inode);
+static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb);
 
 /*
  * ocfs2_la_default_mb() - determine a default size, in megabytes of
@@ -352,7 +351,8 @@ int ocfs2_load_local_alloc(struct ocfs2_super *osb)
                     le32_to_cpu(alloc->id1.bitmap1.i_total),
                     OCFS2_LOCAL_ALLOC(alloc)->la_bm_off);
 
-       osb->local_alloc_bh = alloc_bh;
+       osb->local_alloc_bh    = alloc_bh;
+       osb->local_alloc_inode = inode;
        osb->local_alloc_state = OCFS2_LA_ENABLED;
 
 bail:
@@ -379,7 +379,6 @@ void ocfs2_shutdown_local_alloc(struct ocfs2_super *osb)
 {
        int status;
        handle_t *handle;
-       struct inode *local_alloc_inode = NULL;
        struct buffer_head *bh = NULL;
        struct buffer_head *main_bm_bh = NULL;
        struct inode *main_bm_inode = NULL;
@@ -392,16 +391,6 @@ void ocfs2_shutdown_local_alloc(struct ocfs2_super *osb)
        if (osb->local_alloc_state == OCFS2_LA_UNUSED)
                goto out;
 
-       local_alloc_inode =
-               ocfs2_get_system_file_inode(osb,
-                                           LOCAL_ALLOC_SYSTEM_INODE,
-                                           osb->slot_num);
-       if (!local_alloc_inode) {
-               status = -ENOENT;
-               mlog_errno(status);
-               goto out;
-       }
-
        osb->local_alloc_state = OCFS2_LA_DISABLED;
 
        ocfs2_resmap_uninit(&osb->osb_la_resmap);
@@ -441,7 +430,8 @@ void ocfs2_shutdown_local_alloc(struct ocfs2_super *osb)
        }
        memcpy(alloc_copy, alloc, bh->b_size);
 
-       status = ocfs2_journal_access_di(handle, INODE_CACHE(local_alloc_inode),
+       status = ocfs2_journal_access_di(handle,
+                                        INODE_CACHE(osb->local_alloc_inode),
                                         bh, OCFS2_JOURNAL_ACCESS_WRITE);
        if (status < 0) {
                mlog_errno(status);
@@ -473,9 +463,6 @@ out_mutex:
        iput(main_bm_inode);
 
 out:
-       if (local_alloc_inode)
-               iput(local_alloc_inode);
-
        if (alloc_copy)
                kfree(alloc_copy);
 }
@@ -631,22 +618,11 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super 
*osb,
 {
        int status;
        struct ocfs2_dinode *alloc;
-       struct inode *local_alloc_inode;
        unsigned int free_bits;
 
        BUG_ON(!ac);
 
-       local_alloc_inode =
-               ocfs2_get_system_file_inode(osb,
-                                           LOCAL_ALLOC_SYSTEM_INODE,
-                                           osb->slot_num);
-       if (!local_alloc_inode) {
-               status = -ENOENT;
-               mlog_errno(status);
-               goto bail;
-       }
-
-       mutex_lock(&local_alloc_inode->i_mutex);
+       mutex_lock(&osb->local_alloc_inode->i_mutex);
 
        /*
         * We must double check state and allocator bits because
@@ -680,8 +656,7 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
                le32_to_cpu(alloc->id1.bitmap1.i_used);
        if (bits_wanted > free_bits) {
                /* uhoh, window change time. */
-               status =
-                       ocfs2_local_alloc_slide_window(osb, local_alloc_inode);
+               status = ocfs2_local_alloc_slide_window(osb);
                if (status < 0) {
                        if (status != -ENOSPC)
                                mlog_errno(status);
@@ -704,7 +679,8 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
                        goto bail;
        }
 
-       ac->ac_inode = local_alloc_inode;
+       ac->ac_inode = osb->local_alloc_inode;
+       igrab(ac->ac_inode);
        /* We should never use localalloc from another slot */
        ac->ac_alloc_slot = osb->slot_num;
        ac->ac_which = OCFS2_AC_USE_LOCAL;
@@ -712,10 +688,8 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
        ac->ac_bh = osb->local_alloc_bh;
        status = 0;
 bail:
-       if (status < 0 && local_alloc_inode) {
-               mutex_unlock(&local_alloc_inode->i_mutex);
-               iput(local_alloc_inode);
-       }
+       if (status < 0)
+               mutex_unlock(&osb->local_alloc_inode->i_mutex);
 
        trace_ocfs2_reserve_local_alloc_bits(
                (unsigned long long)ac->ac_max_block,
@@ -1208,8 +1182,7 @@ bail:
 
 /* Note that we do *NOT* lock the local alloc inode here as
  * it's been locked already for us. */
-static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
-                                         struct inode *local_alloc_inode)
+static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb)
 {
        int status = 0;
        struct buffer_head *main_bm_bh = NULL;
@@ -1256,7 +1229,7 @@ static int ocfs2_local_alloc_slide_window(struct 
ocfs2_super *osb,
        memcpy(alloc_copy, alloc, osb->local_alloc_bh->b_size);
 
        status = ocfs2_journal_access_di(handle,
-                                        INODE_CACHE(local_alloc_inode),
+                                        INODE_CACHE(osb->local_alloc_inode),
                                         osb->local_alloc_bh,
                                         OCFS2_JOURNAL_ACCESS_WRITE);
        if (status < 0) {
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
index d355e6e..836a647 100644
--- a/fs/ocfs2/ocfs2.h
+++ b/fs/ocfs2/ocfs2.h
@@ -367,6 +367,7 @@ struct ocfs2_super
                                                         * by osb_lock */
 
        struct buffer_head *local_alloc_bh;
+       struct inode       *local_alloc_inode;
 
        u64 la_last_gd;
 
-- 
1.5.4.3


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to