smb: client: fix renaming of reparse points
[platform/kernel/linux-starfive.git] / fs / smb / client / cifsglob.h
index 5e32c79..4d07b96 100644 (file)
@@ -205,9 +205,18 @@ struct cifs_open_info_data {
        };
 };
 
-#define cifs_open_data_reparse(d) \
-       ((d)->reparse_point || \
-        (le32_to_cpu((d)->fi.Attributes) & ATTR_REPARSE))
+static inline bool cifs_open_data_reparse(struct cifs_open_info_data *data)
+{
+       struct smb2_file_all_info *fi = &data->fi;
+       u32 attrs = le32_to_cpu(fi->Attributes);
+       bool ret;
+
+       ret = data->reparse_point || (attrs & ATTR_REPARSE);
+       if (ret)
+               attrs |= ATTR_REPARSE;
+       fi->Attributes = cpu_to_le32(attrs);
+       return ret;
+}
 
 static inline void cifs_free_open_info(struct cifs_open_info_data *data)
 {
@@ -390,8 +399,11 @@ struct smb_version_operations {
        int (*rename_pending_delete)(const char *, struct dentry *,
                                     const unsigned int);
        /* send rename request */
-       int (*rename)(const unsigned int, struct cifs_tcon *, const char *,
-                     const char *, struct cifs_sb_info *);
+       int (*rename)(const unsigned int xid,
+                     struct cifs_tcon *tcon,
+                     struct dentry *source_dentry,
+                     const char *from_name, const char *to_name,
+                     struct cifs_sb_info *cifs_sb);
        /* send create hardlink request */
        int (*create_hardlink)(const unsigned int, struct cifs_tcon *,
                               const char *, const char *,