ceph: don't request excl caps when mount is readonly

Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
Yan, Zheng 2018-12-05 11:29:35 +08:00 коммит произвёл Ilya Dryomov
Родитель 3c1392d4c4
Коммит 8a2ac3a8e9
1 изменённых файлов: 5 добавлений и 2 удалений

Просмотреть файл

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