ceph: fix open for write on clustered mds

Normally when we open a file we already have a cap, and simply update the
wanted set. However, if we open a file for write, but don't have an auth
cap, that doesn't work; we need to open a new cap with the auth MDS. Only
reuse existing caps if we are opening for read or the existing cap is auth.

Signed-off-by: Sage Weil <sage@newdream.net>

Sage Weil 7421ab80 d8b16b3d

+4 -2
+4 -2
fs/ceph/file.c
··· 154 154 } 155 155 156 156 /* 157 - * No need to block if we have any caps. Update wanted set 157 + * No need to block if we have caps on the auth MDS (for 158 + * write) or any MDS (for read). Update wanted set 158 159 * asynchronously. 159 160 */ 160 161 spin_lock(&inode->i_lock); 161 - if (__ceph_is_any_real_caps(ci)) { 162 + if (__ceph_is_any_real_caps(ci) && 163 + (((fmode & CEPH_FILE_MODE_WR) == 0) || ci->i_auth_cap)) { 162 164 int mds_wanted = __ceph_caps_mds_wanted(ci); 163 165 int issued = __ceph_caps_issued(ci, NULL); 164 166