Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 188581
b: refs/heads/master
c: cdc35f9
h: refs/heads/master
i:
  188579: 4b33818
v: v3
  • Loading branch information
Sage Weil committed Oct 14, 2009
1 parent 9862559 commit 9fdfab9
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f2cf418cec8d61df0651a0140a92a8c75246e14f
refs/heads/master: cdc35f96277314bbfeefd0505410cabd69aebd8d
43 changes: 21 additions & 22 deletions trunk/fs/ceph/caps.c
Original file line number Diff line number Diff line change
Expand Up @@ -1272,23 +1272,39 @@ static void ceph_flush_snaps(struct ceph_inode_info *ci)
/*
* Add dirty inode to the flushing list. Assigned a seq number so we
* 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_client *mdsc = &ceph_client(inode->i_sb)->mdsc;
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));

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);
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);
mdsc->num_cap_flushing++;
ci->i_cap_flush_seq = ++mdsc->cap_flush_seq;
dout(" inode %p now flushing seq %lld\n", &ci->vfs_inode,
ci->i_cap_flush_seq);
}
spin_unlock(&mdsc->cap_dirty_lock);

return flushing;
}

/*
Expand Down Expand Up @@ -1504,17 +1520,8 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags,
took_snap_rwsem = 1;
}

if (cap == ci->i_auth_cap && ci->i_dirty_caps) {
/* update dirty, flushing bits */
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);
}
if (cap == ci->i_auth_cap && ci->i_dirty_caps)
flushing = __mark_caps_flushing(inode, session);

mds = cap->mds; /* remember mds, so we don't repeat */
sent++;
Expand Down Expand Up @@ -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)
goto out;

__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;
flushing = __mark_caps_flushing(inode, session);

/* __send_cap drops i_lock */
delayed = __send_cap(mdsc, cap, CEPH_CAP_OP_FLUSH, used, want,
Expand Down

0 comments on commit 9fdfab9

Please sign in to comment.