Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e8a4603 authored by Mark Fasheh's avatar Mark Fasheh
Browse files

ocfs2: Move slot map access into slot_map.c



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: default avatarJoel Becker <joel.becker@oracle.com>
Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
parent 4b119e21
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -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();

@@ -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);

+1 −2
Original line number Diff line number Diff line
@@ -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);

+48 −14
Original line number Diff line number Diff line
@@ -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;
@@ -65,9 +65,26 @@ 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,
static int ocfs2_update_disk_slots(struct ocfs2_super *osb,
				   struct ocfs2_slot_info *si)
{
	int status, i;
@@ -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)
@@ -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)
@@ -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)
@@ -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);
}
+4 −7
Original line number Diff line number Diff line
@@ -38,19 +38,16 @@ struct ocfs2_slot_info {
};

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)
+1 −2
Original line number Diff line number Diff line
@@ -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