diff options
Diffstat (limited to 'fs/ceph/caps.c')
| -rw-r--r-- | fs/ceph/caps.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index 98ab13e2b71d..60d27bc9eb83 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c | |||
| @@ -1430,8 +1430,8 @@ static int try_nonblocking_invalidate(struct inode *inode) | |||
| 1430 | invalidating_gen == ci->i_rdcache_gen) { | 1430 | invalidating_gen == ci->i_rdcache_gen) { |
| 1431 | /* success. */ | 1431 | /* success. */ |
| 1432 | dout("try_nonblocking_invalidate %p success\n", inode); | 1432 | dout("try_nonblocking_invalidate %p success\n", inode); |
| 1433 | ci->i_rdcache_gen = 0; | 1433 | /* save any racing async invalidate some trouble */ |
| 1434 | ci->i_rdcache_revoking = 0; | 1434 | ci->i_rdcache_revoking = ci->i_rdcache_gen - 1; |
| 1435 | return 0; | 1435 | return 0; |
| 1436 | } | 1436 | } |
| 1437 | dout("try_nonblocking_invalidate %p failed\n", inode); | 1437 | dout("try_nonblocking_invalidate %p failed\n", inode); |
| @@ -2273,8 +2273,7 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant, | |||
| 2273 | { | 2273 | { |
| 2274 | struct ceph_inode_info *ci = ceph_inode(inode); | 2274 | struct ceph_inode_info *ci = ceph_inode(inode); |
| 2275 | int mds = session->s_mds; | 2275 | int mds = session->s_mds; |
| 2276 | unsigned seq = le32_to_cpu(grant->seq); | 2276 | int seq = le32_to_cpu(grant->seq); |
| 2277 | unsigned issue_seq = le32_to_cpu(grant->issue_seq); | ||
| 2278 | int newcaps = le32_to_cpu(grant->caps); | 2277 | int newcaps = le32_to_cpu(grant->caps); |
| 2279 | int issued, implemented, used, wanted, dirty; | 2278 | int issued, implemented, used, wanted, dirty; |
| 2280 | u64 size = le64_to_cpu(grant->size); | 2279 | u64 size = le64_to_cpu(grant->size); |
| @@ -2286,8 +2285,8 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant, | |||
| 2286 | int revoked_rdcache = 0; | 2285 | int revoked_rdcache = 0; |
| 2287 | int queue_invalidate = 0; | 2286 | int queue_invalidate = 0; |
| 2288 | 2287 | ||
| 2289 | dout("handle_cap_grant inode %p cap %p mds%d seq %u/%u %s\n", | 2288 | dout("handle_cap_grant inode %p cap %p mds%d seq %d %s\n", |
| 2290 | inode, cap, mds, seq, issue_seq, ceph_cap_string(newcaps)); | 2289 | inode, cap, mds, seq, ceph_cap_string(newcaps)); |
| 2291 | dout(" size %llu max_size %llu, i_size %llu\n", size, max_size, | 2290 | dout(" size %llu max_size %llu, i_size %llu\n", size, max_size, |
| 2292 | inode->i_size); | 2291 | inode->i_size); |
| 2293 | 2292 | ||
| @@ -2383,7 +2382,6 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant, | |||
| 2383 | } | 2382 | } |
| 2384 | 2383 | ||
| 2385 | cap->seq = seq; | 2384 | cap->seq = seq; |
| 2386 | cap->issue_seq = issue_seq; | ||
| 2387 | 2385 | ||
| 2388 | /* file layout may have changed */ | 2386 | /* file layout may have changed */ |
| 2389 | ci->i_layout = grant->layout; | 2387 | ci->i_layout = grant->layout; |
| @@ -2691,6 +2689,11 @@ static void handle_cap_import(struct ceph_mds_client *mdsc, | |||
| 2691 | NULL /* no caps context */); | 2689 | NULL /* no caps context */); |
| 2692 | try_flush_caps(inode, session, NULL); | 2690 | try_flush_caps(inode, session, NULL); |
| 2693 | up_read(&mdsc->snap_rwsem); | 2691 | up_read(&mdsc->snap_rwsem); |
| 2692 | |||
| 2693 | /* make sure we re-request max_size, if necessary */ | ||
| 2694 | spin_lock(&inode->i_lock); | ||
| 2695 | ci->i_requested_max_size = 0; | ||
| 2696 | spin_unlock(&inode->i_lock); | ||
| 2694 | } | 2697 | } |
| 2695 | 2698 | ||
| 2696 | /* | 2699 | /* |
