ceph: allocate cap_release message when receiving cap import
authorYan, Zheng <zheng.z.yan@intel.com>
Fri, 4 Jan 2013 06:45:18 +0000 (14:45 +0800)
committerAlex Elder <elder@inktank.com>
Thu, 17 Jan 2013 18:42:38 +0000 (12:42 -0600)
When client wants to release an imported cap, it's possible there
is no reserved cap_release message in corresponding mds session.
so __queue_cap_release causes kernel panic.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Reviewed-by: Sage Weil <sage@inktank.com>
fs/ceph/caps.c

index 76b19239c42606d8af755bc6dbb9cbb60b6ddfda..40b5bbe63a39844ebb6283296dbaa3e24b3675e3 100644 (file)
@@ -2833,6 +2833,9 @@ void ceph_handle_caps(struct ceph_mds_session *session,
        dout(" mds%d seq %lld cap seq %u\n", session->s_mds, session->s_seq,
             (unsigned)seq);
 
+       if (op == CEPH_CAP_OP_IMPORT)
+               ceph_add_cap_releases(mdsc, session);
+
        /* lookup ino */
        inode = ceph_find_inode(sb, vino);
        ci = ceph_inode(inode);