]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix cap inode ref count bug
authorSage Weil <sage@newdream.net>
Tue, 19 Aug 2008 23:24:30 +0000 (16:24 -0700)
committerSage Weil <sage@newdream.net>
Tue, 19 Aug 2008 23:24:30 +0000 (16:24 -0700)
src/kernel/caps.c

index 2e311bd565bffff4421b99676411e1826544b1ec..4bd7c760233fd5c11968d7a1e69fa18e6bbb4851 100644 (file)
@@ -86,7 +86,7 @@ int ceph_add_cap(struct inode *inode,
        struct ceph_inode_info *ci = ceph_inode(inode);
        struct ceph_inode_cap *cap, *new_cap = 0;
        int i;
-       int is_new = 0;
+       int is_first = 0;
        struct ceph_snaprealm *realm = 0;
        struct ceph_mds_client *mdsc = &ceph_inode_to_client(inode)->mdsc;
 
@@ -119,12 +119,12 @@ retry:
                        }
                }
 
-               is_new = 1;    /* grab inode later */
                cap->issued = cap->implemented = 0;
                cap->mds = mds;
                cap->flags = 0;
                cap->flushed_snap = 0;
 
+               is_first = RB_EMPTY_ROOT(&ci->i_caps);  /* grab inode later */
                cap->ci = ci;
                __insert_cap_node(ci, cap);
 
@@ -156,7 +156,7 @@ retry:
        if (fmode >= 0)
                __ceph_get_fmode(ci, fmode);
        spin_unlock(&inode->i_lock);
-       if (is_new)
+       if (is_first)
                igrab(inode);
        if (new_cap)
                kfree(new_cap);