ceph: fix open file counting on snapped inodes when mds returns no caps
authorSage Weil <sage@newdream.net>
Fri, 7 May 2010 18:26:34 +0000 (11:26 -0700)
committerSage Weil <sage@newdream.net>
Tue, 11 May 2010 16:53:55 +0000 (09:53 -0700)
It's possible the MDS will not issue caps on a snapped inode, in which case
an open request may not __ceph_get_fmode(), botching the open file
counting.  (This is actually a server bug, but the client shouldn't BUG out
in this case.)

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/inode.c

index 261f3e6c0bcff279d8a5177c0234c3d1e99ad9de..85b4d2ffdeba933da4ac816663a04c3c9ed91924 100644 (file)
@@ -733,6 +733,10 @@ no_change:
                                __ceph_get_fmode(ci, cap_fmode);
                        spin_unlock(&inode->i_lock);
                }
+       } else if (cap_fmode >= 0) {
+               pr_warning("mds issued no caps on %llx.%llx\n",
+                          ceph_vinop(inode));
+               __ceph_get_fmode(ci, cap_fmode);
        }
 
        /* update delegation info? */