ceph: increment change_attribute on local changes
authorJeff Layton <jlayton@kernel.org>
Thu, 6 Jun 2019 12:57:27 +0000 (08:57 -0400)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 8 Jul 2019 12:01:44 +0000 (14:01 +0200)
We don't set SB_I_VERSION on ceph since we need to manage it ourselves,
so we must increment it whenever we update the file times.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/addr.c
fs/ceph/file.c

index a47c541f800622cabf5bbbca62170d60666e8f0d..e078cc55b989e287e8d3891f8294778b995598f5 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/pagevec.h>
 #include <linux/task_io_accounting_ops.h>
 #include <linux/signal.h>
+#include <linux/iversion.h>
 
 #include "super.h"
 #include "mds_client.h"
@@ -1576,6 +1577,7 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
 
        /* Update time before taking page lock */
        file_update_time(vma->vm_file);
+       inode_inc_iversion_raw(inode);
 
        do {
                lock_page(page);
index d616e4b50b57831faf543aada7832bfbaf08dd14..a06090c8281e5ba4082de54df25654bc345adb05 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/namei.h>
 #include <linux/writeback.h>
 #include <linux/falloc.h>
+#include <linux/iversion.h>
 
 #include "super.h"
 #include "mds_client.h"
@@ -1435,6 +1436,8 @@ retry_snap:
        if (err)
                goto out;
 
+       inode_inc_iversion_raw(inode);
+
        if (ci->i_inline_version != CEPH_INLINE_NONE) {
                err = ceph_uninline_data(file, NULL);
                if (err < 0)
@@ -2064,6 +2067,8 @@ static ssize_t ceph_copy_file_range(struct file *src_file, loff_t src_off,
                do_final_copy = true;
 
        file_update_time(dst_file);
+       inode_inc_iversion_raw(dst_inode);
+
        if (endoff > size) {
                int caps_flags = 0;