Merge tag 'ceph-for-5.13-rc1' of git://github.com/ceph/ceph-client
[sfrench/cifs-2.6.git] / fs / ceph / caps.c
index d2f955a144292eeddacb2dda4b56f4b3f8317ecc..a5e93b18551586d219371a4f600cad5d101daf16 100644 (file)
@@ -3349,7 +3349,13 @@ static void handle_cap_grant(struct inode *inode,
 
        if ((newcaps & CEPH_CAP_AUTH_SHARED) &&
            (extra_info->issued & CEPH_CAP_AUTH_EXCL) == 0) {
-               inode->i_mode = le32_to_cpu(grant->mode);
+               umode_t mode = le32_to_cpu(grant->mode);
+
+               if (inode_wrong_type(inode, mode))
+                       pr_warn_once("inode type changed! (ino %llx.%llx is 0%o, mds says 0%o)\n",
+                                    ceph_vinop(inode), inode->i_mode, mode);
+               else
+                       inode->i_mode = mode;
                inode->i_uid = make_kuid(&init_user_ns, le32_to_cpu(grant->uid));
                inode->i_gid = make_kgid(&init_user_ns, le32_to_cpu(grant->gid));
                ci->i_btime = extra_info->btime;