ceph: get inode size for each append write
authorYan, Zheng <zyan@redhat.com>
Mon, 7 Sep 2015 03:35:01 +0000 (11:35 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Wed, 9 Sep 2015 06:52:29 +0000 (09:52 +0300)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
fs/ceph/file.c

index 90ec110b8400c5ee95a5fb49f688e0b63893bab1..0c62868b5c561b37fa866b68bbe34f3ffb1fd6a6 100644 (file)
@@ -952,6 +952,12 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
        /* We can write back this queue in page reclaim */
        current->backing_dev_info = inode_to_bdi(inode);
 
+       if (iocb->ki_flags & IOCB_APPEND) {
+               err = ceph_do_getattr(inode, CEPH_STAT_CAP_SIZE, false);
+               if (err < 0)
+                       goto out;
+       }
+
        err = generic_write_checks(iocb, from);
        if (err <= 0)
                goto out;