diff options
author | Sage Weil <sage@newdream.net> | 2011-07-26 14:26:41 -0400 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2011-07-26 14:26:41 -0400 |
commit | e77dc3e9c061e50c67e2e1a604d0a370f40db298 (patch) | |
tree | 8ed497994e3e1b9949c3d6907ed901ff502b1f5e /fs/ceph/snap.c | |
parent | af0ed569d7019f1b49e9e51e77b47092e656b00e (diff) |
ceph: only queue capsnap if caps are dirty
We used to go into this branch if i_wrbuffer_ref_head was non-zero. This
was an ancient check from before we were careful about dealing with all
kinds of caps (and not just dirty pages). It is cleaner to only queue a
capsnap if there is an actual dirty cap. If we are racing with...
something...we will end up here with ci->i_wrbuffer_refs but no dirty
caps.
Reviewed-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/snap.c')
-rw-r--r-- | fs/ceph/snap.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c index ac030c9d9959..e26437191333 100644 --- a/fs/ceph/snap.c +++ b/fs/ceph/snap.c | |||
@@ -465,9 +465,8 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci) | |||
465 | cap_snap. lucky us. */ | 465 | cap_snap. lucky us. */ |
466 | dout("queue_cap_snap %p already pending\n", inode); | 466 | dout("queue_cap_snap %p already pending\n", inode); |
467 | kfree(capsnap); | 467 | kfree(capsnap); |
468 | } else if (ci->i_wrbuffer_ref_head || | 468 | } else if (dirty & (CEPH_CAP_AUTH_EXCL|CEPH_CAP_XATTR_EXCL| |
469 | (dirty & (CEPH_CAP_AUTH_EXCL|CEPH_CAP_XATTR_EXCL| | 469 | CEPH_CAP_FILE_EXCL|CEPH_CAP_FILE_WR)) { |
470 | CEPH_CAP_FILE_EXCL|CEPH_CAP_FILE_WR))) { | ||
471 | struct ceph_snap_context *snapc = ci->i_head_snapc; | 470 | struct ceph_snap_context *snapc = ci->i_head_snapc; |
472 | 471 | ||
473 | /* | 472 | /* |
@@ -480,7 +479,6 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci) | |||
480 | dout("queue_cap_snap %p cap_snap %p queuing under %p %s\n", | 479 | dout("queue_cap_snap %p cap_snap %p queuing under %p %s\n", |
481 | inode, capsnap, snapc, ceph_cap_string(dirty)); | 480 | inode, capsnap, snapc, ceph_cap_string(dirty)); |
482 | ihold(inode); | 481 | ihold(inode); |
483 | BUG_ON(dirty == 0); | ||
484 | 482 | ||
485 | atomic_set(&capsnap->nref, 1); | 483 | atomic_set(&capsnap->nref, 1); |
486 | capsnap->ci = ci; | 484 | capsnap->ci = ci; |