forked from luck/tmp_suning_uos_patched
ceph: move generic flushing code into helper
Both callers of __mark_caps_flushing() do the same work; move it into the helper. Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
parent
f2cf418cec
commit
cdc35f9627
|
@ -1272,16 +1272,30 @@ static void ceph_flush_snaps(struct ceph_inode_info *ci)
|
||||||
/*
|
/*
|
||||||
* Add dirty inode to the flushing list. Assigned a seq number so we
|
* Add dirty inode to the flushing list. Assigned a seq number so we
|
||||||
* can wait for caps to flush without starving.
|
* can wait for caps to flush without starving.
|
||||||
|
*
|
||||||
|
* Called under i_lock.
|
||||||
*/
|
*/
|
||||||
static void __mark_caps_flushing(struct inode *inode,
|
static int __mark_caps_flushing(struct inode *inode,
|
||||||
struct ceph_mds_session *session)
|
struct ceph_mds_session *session)
|
||||||
{
|
{
|
||||||
struct ceph_mds_client *mdsc = &ceph_client(inode->i_sb)->mdsc;
|
struct ceph_mds_client *mdsc = &ceph_client(inode->i_sb)->mdsc;
|
||||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||||
|
int flushing;
|
||||||
|
|
||||||
|
BUG_ON(ci->i_dirty_caps == 0);
|
||||||
BUG_ON(list_empty(&ci->i_dirty_item));
|
BUG_ON(list_empty(&ci->i_dirty_item));
|
||||||
|
|
||||||
|
flushing = ci->i_dirty_caps;
|
||||||
|
dout("__mark_caps_flushing flushing %s, flushing_caps %s -> %s\n",
|
||||||
|
ceph_cap_string(flushing),
|
||||||
|
ceph_cap_string(ci->i_flushing_caps),
|
||||||
|
ceph_cap_string(ci->i_flushing_caps | flushing));
|
||||||
|
ci->i_flushing_caps |= flushing;
|
||||||
|
ci->i_dirty_caps = 0;
|
||||||
|
|
||||||
spin_lock(&mdsc->cap_dirty_lock);
|
spin_lock(&mdsc->cap_dirty_lock);
|
||||||
if (list_empty(&ci->i_flushing_item)) {
|
if (list_empty(&ci->i_flushing_item)) {
|
||||||
|
list_del_init(&ci->i_dirty_item);
|
||||||
list_add_tail(&ci->i_flushing_item, &session->s_cap_flushing);
|
list_add_tail(&ci->i_flushing_item, &session->s_cap_flushing);
|
||||||
mdsc->num_cap_flushing++;
|
mdsc->num_cap_flushing++;
|
||||||
ci->i_cap_flush_seq = ++mdsc->cap_flush_seq;
|
ci->i_cap_flush_seq = ++mdsc->cap_flush_seq;
|
||||||
|
@ -1289,6 +1303,8 @@ static void __mark_caps_flushing(struct inode *inode,
|
||||||
ci->i_cap_flush_seq);
|
ci->i_cap_flush_seq);
|
||||||
}
|
}
|
||||||
spin_unlock(&mdsc->cap_dirty_lock);
|
spin_unlock(&mdsc->cap_dirty_lock);
|
||||||
|
|
||||||
|
return flushing;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1504,17 +1520,8 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags,
|
||||||
took_snap_rwsem = 1;
|
took_snap_rwsem = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cap == ci->i_auth_cap && ci->i_dirty_caps) {
|
if (cap == ci->i_auth_cap && ci->i_dirty_caps)
|
||||||
/* update dirty, flushing bits */
|
flushing = __mark_caps_flushing(inode, session);
|
||||||
flushing = ci->i_dirty_caps;
|
|
||||||
dout(" flushing %s, flushing_caps %s -> %s\n",
|
|
||||||
ceph_cap_string(flushing),
|
|
||||||
ceph_cap_string(ci->i_flushing_caps),
|
|
||||||
ceph_cap_string(ci->i_flushing_caps | flushing));
|
|
||||||
ci->i_flushing_caps |= flushing;
|
|
||||||
ci->i_dirty_caps = 0;
|
|
||||||
__mark_caps_flushing(inode, session);
|
|
||||||
}
|
|
||||||
|
|
||||||
mds = cap->mds; /* remember mds, so we don't repeat */
|
mds = cap->mds; /* remember mds, so we don't repeat */
|
||||||
sent++;
|
sent++;
|
||||||
|
@ -1605,15 +1612,7 @@ static int try_flush_caps(struct inode *inode, struct ceph_mds_session *session,
|
||||||
if (cap->session->s_state < CEPH_MDS_SESSION_OPEN)
|
if (cap->session->s_state < CEPH_MDS_SESSION_OPEN)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
__mark_caps_flushing(inode, session);
|
flushing = __mark_caps_flushing(inode, session);
|
||||||
|
|
||||||
flushing = ci->i_dirty_caps;
|
|
||||||
dout(" flushing %s, flushing_caps %s -> %s\n",
|
|
||||||
ceph_cap_string(flushing),
|
|
||||||
ceph_cap_string(ci->i_flushing_caps),
|
|
||||||
ceph_cap_string(ci->i_flushing_caps | flushing));
|
|
||||||
ci->i_flushing_caps |= flushing;
|
|
||||||
ci->i_dirty_caps = 0;
|
|
||||||
|
|
||||||
/* __send_cap drops i_lock */
|
/* __send_cap drops i_lock */
|
||||||
delayed = __send_cap(mdsc, cap, CEPH_CAP_OP_FLUSH, used, want,
|
delayed = __send_cap(mdsc, cap, CEPH_CAP_OP_FLUSH, used, want,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user