]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/cifs/inode.c
Merge tag 'for-5.4/io_uring-2019-09-15' of git://git.kernel.dk/linux-block
[linux.git] / fs / cifs / inode.c
index 1bffe029fb6633c1443484fae69214c8efc64222..56ca4b8ccabac909abc312602506020363b52948 100644 (file)
@@ -2406,6 +2406,8 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
        struct inode *inode = d_inode(direntry);
        struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
        struct cifsInodeInfo *cifsInode = CIFS_I(inode);
+       struct cifsFileInfo *wfile;
+       struct cifs_tcon *tcon;
        char *full_path = NULL;
        int rc = -EACCES;
        __u32 dosattr = 0;
@@ -2452,6 +2454,20 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
        mapping_set_error(inode->i_mapping, rc);
        rc = 0;
 
+       if (attrs->ia_valid & ATTR_MTIME) {
+               rc = cifs_get_writable_file(cifsInode, false, &wfile);
+               if (!rc) {
+                       tcon = tlink_tcon(wfile->tlink);
+                       rc = tcon->ses->server->ops->flush(xid, tcon, &wfile->fid);
+                       cifsFileInfo_put(wfile);
+                       if (rc)
+                               return rc;
+               } else if (rc != -EBADF)
+                       return rc;
+               else
+                       rc = 0;
+       }
+
        if (attrs->ia_valid & ATTR_SIZE) {
                rc = cifs_set_file_size(inode, attrs, xid, full_path);
                if (rc != 0)