ceph: don't request excl caps when mount is readonly
authorYan, Zheng <zyan@redhat.com>
Wed, 5 Dec 2018 03:29:35 +0000 (11:29 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Wed, 26 Dec 2018 15:08:36 +0000 (16:08 +0100)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/caps.c

index a58666a..e7af647 100644 (file)
@@ -1855,14 +1855,17 @@ retry_locked:
                        retain |= CEPH_CAP_ANY;       /* be greedy */
                } else if (S_ISDIR(inode->i_mode) &&
                           (issued & CEPH_CAP_FILE_SHARED) &&
-                           __ceph_dir_is_complete(ci)) {
+                          __ceph_dir_is_complete(ci)) {
                        /*
                         * If a directory is complete, we want to keep
                         * the exclusive cap. So that MDS does not end up
                         * revoking the shared cap on every create/unlink
                         * operation.
                         */
-                       want = CEPH_CAP_ANY_SHARED | CEPH_CAP_FILE_EXCL;
+                       if (IS_RDONLY(inode))
+                               want = CEPH_CAP_ANY_SHARED;
+                       else
+                               want = CEPH_CAP_ANY_SHARED | CEPH_CAP_FILE_EXCL;
                        retain |= want;
                } else {