Commit a35ead31 authored by Jeff Layton's avatar Jeff Layton Committed by Ilya Dryomov

ceph: add change_attr field to ceph_inode_info

Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
Reviewed-by: default avatar"Yan, Zheng" <zyan@redhat.com>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 441d3676
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/posix_acl.h> #include <linux/posix_acl.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/sort.h> #include <linux/sort.h>
#include <linux/iversion.h>
#include "super.h" #include "super.h"
#include "mds_client.h" #include "mds_client.h"
...@@ -42,6 +43,7 @@ static int ceph_set_ino_cb(struct inode *inode, void *data) ...@@ -42,6 +43,7 @@ static int ceph_set_ino_cb(struct inode *inode, void *data)
{ {
ceph_inode(inode)->i_vino = *(struct ceph_vino *)data; ceph_inode(inode)->i_vino = *(struct ceph_vino *)data;
inode->i_ino = ceph_vino_to_ino(*(struct ceph_vino *)data); inode->i_ino = ceph_vino_to_ino(*(struct ceph_vino *)data);
inode_set_iversion_raw(inode, 0);
return 0; return 0;
} }
...@@ -796,6 +798,9 @@ static int fill_inode(struct inode *inode, struct page *locked_page, ...@@ -796,6 +798,9 @@ static int fill_inode(struct inode *inode, struct page *locked_page,
le64_to_cpu(info->version) > (ci->i_version & ~1))) le64_to_cpu(info->version) > (ci->i_version & ~1)))
new_version = true; new_version = true;
/* Update change_attribute */
inode_set_max_iversion_raw(inode, iinfo->change_attr);
__ceph_caps_issued(ci, &issued); __ceph_caps_issued(ci, &issued);
issued |= __ceph_caps_dirty(ci); issued |= __ceph_caps_dirty(ci);
new_issued = ~issued & info_caps; new_issued = ~issued & info_caps;
......
...@@ -156,7 +156,7 @@ static int parse_reply_info_in(void **p, void *end, ...@@ -156,7 +156,7 @@ static int parse_reply_info_in(void **p, void *end,
ceph_decode_copy(p, &info->btime, sizeof(info->btime)); ceph_decode_copy(p, &info->btime, sizeof(info->btime));
/* change attribute */ /* change attribute */
ceph_decode_skip_64(p, end, bad); ceph_decode_64_safe(p, end, info->change_attr, bad);
/* dir pin */ /* dir pin */
if (struct_v >= 2) { if (struct_v >= 2) {
...@@ -208,7 +208,7 @@ static int parse_reply_info_in(void **p, void *end, ...@@ -208,7 +208,7 @@ static int parse_reply_info_in(void **p, void *end,
if (features & CEPH_FEATURE_FS_BTIME) { if (features & CEPH_FEATURE_FS_BTIME) {
ceph_decode_need(p, end, sizeof(info->btime), bad); ceph_decode_need(p, end, sizeof(info->btime), bad);
ceph_decode_copy(p, &info->btime, sizeof(info->btime)); ceph_decode_copy(p, &info->btime, sizeof(info->btime));
ceph_decode_skip_64(p, end, bad); ceph_decode_64_safe(p, end, info->change_attr, bad);
} }
info->dir_pin = -ENODATA; info->dir_pin = -ENODATA;
......
...@@ -71,6 +71,7 @@ struct ceph_mds_reply_info_in { ...@@ -71,6 +71,7 @@ struct ceph_mds_reply_info_in {
s32 dir_pin; s32 dir_pin;
struct ceph_timespec btime; struct ceph_timespec btime;
struct ceph_timespec snap_btime; struct ceph_timespec snap_btime;
u64 change_attr;
}; };
struct ceph_mds_reply_dir_entry { struct ceph_mds_reply_dir_entry {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment