Skip to content

Commit

Permalink
ocfs2: Move slot map access into slot_map.c
Browse files Browse the repository at this point in the history
journal.c and dlmglue.c would refresh the slot map by hand.  Instead, have
the update and clear functions do the work inside slot_map.c.  The eventual
result is to make ocfs2_slot_info defined privately in slot_map.c

Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
  • Loading branch information
Mark Fasheh committed Apr 18, 2008
1 parent 4b119e2 commit 8e8a460
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 32 deletions.
8 changes: 1 addition & 7 deletions fs/ocfs2/dlmglue.c
Original file line number Diff line number Diff line change
Expand Up @@ -2132,8 +2132,6 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
int status = 0;
int level = ex ? LKM_EXMODE : LKM_PRMODE;
struct ocfs2_lock_res *lockres = &osb->osb_super_lockres;
struct buffer_head *bh;
struct ocfs2_slot_info *si = osb->slot_info;

mlog_entry_void();

Expand All @@ -2159,11 +2157,7 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
goto bail;
}
if (status) {
bh = si->si_bh;
status = ocfs2_read_block(osb, bh->b_blocknr, &bh, 0,
si->si_inode);
if (status == 0)
ocfs2_update_slot_info(si);
status = ocfs2_refresh_slot_info(osb);

ocfs2_complete_lock_res_refresh(lockres, status);

Expand Down
3 changes: 1 addition & 2 deletions fs/ocfs2/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1123,8 +1123,7 @@ static int ocfs2_recover_node(struct ocfs2_super *osb,

/* Likewise, this would be a strange but ultimately not so
* harmful place to get an error... */
ocfs2_clear_slot(si, slot_num);
status = ocfs2_update_disk_slots(osb, si);
status = ocfs2_clear_slot(osb, slot_num);
if (status < 0)
mlog_errno(status);

Expand Down
62 changes: 48 additions & 14 deletions fs/ocfs2/slot_map.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ static void __ocfs2_fill_slot(struct ocfs2_slot_info *si,
s16 node_num);

/* post the slot information on disk into our slot_info struct. */
void ocfs2_update_slot_info(struct ocfs2_slot_info *si)
static void ocfs2_update_slot_info(struct ocfs2_slot_info *si)
{
int i;
__le16 *disk_info;
Expand All @@ -65,10 +65,27 @@ void ocfs2_update_slot_info(struct ocfs2_slot_info *si)
spin_unlock(&si->si_lock);
}

int ocfs2_refresh_slot_info(struct ocfs2_super *osb)
{
int ret;
struct ocfs2_slot_info *si = osb->slot_info;
struct buffer_head *bh;

if (si == NULL)
return 0;

bh = si->si_bh;
ret = ocfs2_read_block(osb, bh->b_blocknr, &bh, 0, si->si_inode);
if (ret == 0)
ocfs2_update_slot_info(si);

return ret;
}

/* post the our slot info stuff into it's destination bh and write it
* out. */
int ocfs2_update_disk_slots(struct ocfs2_super *osb,
struct ocfs2_slot_info *si)
static int ocfs2_update_disk_slots(struct ocfs2_super *osb,
struct ocfs2_slot_info *si)
{
int status, i;
__le16 *disk_info = (__le16 *) si->si_bh->b_data;
Expand Down Expand Up @@ -135,6 +152,19 @@ s16 ocfs2_node_num_to_slot(struct ocfs2_slot_info *si,
return ret;
}

static void __ocfs2_free_slot_info(struct ocfs2_slot_info *si)
{
if (si == NULL)
return;

if (si->si_inode)
iput(si->si_inode);
if (si->si_bh)
brelse(si->si_bh);

kfree(si);
}

static void __ocfs2_fill_slot(struct ocfs2_slot_info *si,
s16 slot_num,
s16 node_num)
Expand All @@ -147,12 +177,18 @@ static void __ocfs2_fill_slot(struct ocfs2_slot_info *si,
si->si_global_node_nums[slot_num] = node_num;
}

void ocfs2_clear_slot(struct ocfs2_slot_info *si,
s16 slot_num)
int ocfs2_clear_slot(struct ocfs2_super *osb, s16 slot_num)
{
struct ocfs2_slot_info *si = osb->slot_info;

if (si == NULL)
return 0;

spin_lock(&si->si_lock);
__ocfs2_fill_slot(si, slot_num, OCFS2_INVALID_SLOT);
spin_unlock(&si->si_lock);

return ocfs2_update_disk_slots(osb, osb->slot_info);
}

int ocfs2_init_slot_info(struct ocfs2_super *osb)
Expand Down Expand Up @@ -202,18 +238,17 @@ int ocfs2_init_slot_info(struct ocfs2_super *osb)
osb->slot_info = si;
bail:
if (status < 0 && si)
ocfs2_free_slot_info(si);
__ocfs2_free_slot_info(si);

return status;
}

void ocfs2_free_slot_info(struct ocfs2_slot_info *si)
void ocfs2_free_slot_info(struct ocfs2_super *osb)
{
if (si->si_inode)
iput(si->si_inode);
if (si->si_bh)
brelse(si->si_bh);
kfree(si);
struct ocfs2_slot_info *si = osb->slot_info;

osb->slot_info = NULL;
__ocfs2_free_slot_info(si);
}

int ocfs2_find_slot(struct ocfs2_super *osb)
Expand Down Expand Up @@ -285,7 +320,6 @@ void ocfs2_put_slot(struct ocfs2_super *osb)
}

bail:
osb->slot_info = NULL;
ocfs2_free_slot_info(si);
ocfs2_free_slot_info(osb);
}

11 changes: 4 additions & 7 deletions fs/ocfs2/slot_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,27 +30,24 @@
struct ocfs2_slot_info {
spinlock_t si_lock;

struct inode *si_inode;
struct inode *si_inode;
struct buffer_head *si_bh;
unsigned int si_num_slots;
unsigned int si_size;
s16 si_global_node_nums[OCFS2_MAX_SLOTS];
};

int ocfs2_init_slot_info(struct ocfs2_super *osb);
void ocfs2_free_slot_info(struct ocfs2_slot_info *si);
void ocfs2_free_slot_info(struct ocfs2_super *osb);

int ocfs2_find_slot(struct ocfs2_super *osb);
void ocfs2_put_slot(struct ocfs2_super *osb);

void ocfs2_update_slot_info(struct ocfs2_slot_info *si);
int ocfs2_update_disk_slots(struct ocfs2_super *osb,
struct ocfs2_slot_info *si);
int ocfs2_refresh_slot_info(struct ocfs2_super *osb);

s16 ocfs2_node_num_to_slot(struct ocfs2_slot_info *si,
s16 global);
void ocfs2_clear_slot(struct ocfs2_slot_info *si,
s16 slot_num);
int ocfs2_clear_slot(struct ocfs2_super *osb, s16 slot_num);

static inline int ocfs2_is_empty_slot(struct ocfs2_slot_info *si,
int slot_num)
Expand Down
3 changes: 1 addition & 2 deletions fs/ocfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1724,8 +1724,7 @@ static void ocfs2_delete_osb(struct ocfs2_super *osb)

/* This function assumes that the caller has the main osb resource */

if (osb->slot_info)
ocfs2_free_slot_info(osb->slot_info);
ocfs2_free_slot_info(osb);

kfree(osb->osb_orphan_wipes);
/* FIXME
Expand Down

0 comments on commit 8e8a460

Please sign in to comment.