Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[cascardo/linux.git] / fs / ceph / file.c
index 359805b..39da1c2 100644 (file)
@@ -210,7 +210,7 @@ int ceph_open(struct inode *inode, struct file *file)
        ihold(inode);
 
        req->r_num_caps = 1;
-       if (flags & (O_CREAT|O_TRUNC))
+       if (flags & O_CREAT)
                parent_inode = ceph_get_dentry_parent_inode(file->f_dentry);
        err = ceph_mdsc_do_request(mdsc, parent_inode, req);
        iput(parent_inode);
@@ -291,8 +291,9 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
                }
                err = finish_open(file, dentry, ceph_open, opened);
        }
-
 out_err:
+       if (!req->r_err && req->r_target_inode)
+               ceph_put_fmode(ceph_inode(req->r_target_inode), req->r_fmode);
        ceph_mdsc_put_request(req);
        dout("atomic_open result=%d\n", err);
        return err;
@@ -970,6 +971,7 @@ retry_snap:
                        goto retry_snap;
                }
        } else {
+               loff_t old_size = inode->i_size;
                struct iov_iter from;
                /*
                 * No need to acquire the i_truncate_mutex. Because
@@ -982,6 +984,8 @@ retry_snap:
                written = generic_perform_write(file, &from, pos);
                if (likely(written >= 0))
                        iocb->ki_pos = pos + written;
+               if (inode->i_size > old_size)
+                       ceph_fscache_update_objectsize(inode);
                mutex_unlock(&inode->i_mutex);
        }