]>
Commit | Line | Data |
---|---|---|
a90bfb00 GKH |
1 | From 8677d84432bc48ae52d6fc07e4af459b8b6aaeb4 Mon Sep 17 00:00:00 2001 |
2 | From: "Yan, Zheng" <zheng.z.yan@intel.com> | |
3 | Date: Mon, 19 Nov 2012 10:49:07 +0800 | |
4 | Subject: ceph: Don't add dirty inode to dirty list if caps is in migration | |
5 | ||
6 | ||
7 | From: "Yan, Zheng" <zheng.z.yan@intel.com> | |
8 | ||
9 | Add dirty inode to cap_dirty_migrating list instead, this can avoid | |
10 | ceph_flush_dirty_caps() entering infinite loop. | |
11 | ||
12 | Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com> | |
13 | Signed-off-by: Sage Weil <sage@inktank.com> | |
14 | (cherry picked from commit 0685235ffd9dbdb9ccbda587f8a3c83ad1d5a921) | |
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
16 | --- | |
17 | fs/ceph/caps.c | 10 +++++++--- | |
18 | 1 file changed, 7 insertions(+), 3 deletions(-) | |
19 | ||
20 | --- a/fs/ceph/caps.c | |
21 | +++ b/fs/ceph/caps.c | |
22 | @@ -1349,11 +1349,15 @@ int __ceph_mark_dirty_caps(struct ceph_i | |
23 | if (!ci->i_head_snapc) | |
24 | ci->i_head_snapc = ceph_get_snap_context( | |
25 | ci->i_snap_realm->cached_context); | |
26 | - dout(" inode %p now dirty snapc %p\n", &ci->vfs_inode, | |
27 | - ci->i_head_snapc); | |
28 | + dout(" inode %p now dirty snapc %p auth cap %p\n", | |
29 | + &ci->vfs_inode, ci->i_head_snapc, ci->i_auth_cap); | |
30 | BUG_ON(!list_empty(&ci->i_dirty_item)); | |
31 | spin_lock(&mdsc->cap_dirty_lock); | |
32 | - list_add(&ci->i_dirty_item, &mdsc->cap_dirty); | |
33 | + if (ci->i_auth_cap) | |
34 | + list_add(&ci->i_dirty_item, &mdsc->cap_dirty); | |
35 | + else | |
36 | + list_add(&ci->i_dirty_item, | |
37 | + &mdsc->cap_dirty_migrating); | |
38 | spin_unlock(&mdsc->cap_dirty_lock); | |
39 | if (ci->i_flushing_caps == 0) { | |
40 | ihold(inode); |