diff options
author | Yan, Zheng <zyan@redhat.com> | 2017-06-01 04:44:53 -0400 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2017-06-14 13:33:23 -0400 |
commit | 56199016e8672feb7b903eda003a863d5bf2b8c4 (patch) | |
tree | a3be21422d9d9c38e94535c5cb37f525ac372eeb | |
parent | 03f219041fdbeb31cecff41bb1cb4e1018f9cf75 (diff) |
ceph: use current_kernel_time() to get request time stamp
ceph uses ktime_get_real_ts() to get request time stamp. In most
other cases, current_kernel_time() is used to get time stamp for
filesystem operations (called by current_time()).
There is granularity difference between ktime_get_real_ts() and
current_kernel_time(). The later one can be up to one jiffy behind
the former one. This can causes inode's ctime to go back.
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
-rw-r--r-- | fs/ceph/mds_client.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index f38e56fa9712..0c05df44cc6c 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c | |||
@@ -1687,7 +1687,6 @@ struct ceph_mds_request * | |||
1687 | ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode) | 1687 | ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode) |
1688 | { | 1688 | { |
1689 | struct ceph_mds_request *req = kzalloc(sizeof(*req), GFP_NOFS); | 1689 | struct ceph_mds_request *req = kzalloc(sizeof(*req), GFP_NOFS); |
1690 | struct timespec ts; | ||
1691 | 1690 | ||
1692 | if (!req) | 1691 | if (!req) |
1693 | return ERR_PTR(-ENOMEM); | 1692 | return ERR_PTR(-ENOMEM); |
@@ -1706,8 +1705,7 @@ ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode) | |||
1706 | init_completion(&req->r_safe_completion); | 1705 | init_completion(&req->r_safe_completion); |
1707 | INIT_LIST_HEAD(&req->r_unsafe_item); | 1706 | INIT_LIST_HEAD(&req->r_unsafe_item); |
1708 | 1707 | ||
1709 | ktime_get_real_ts(&ts); | 1708 | req->r_stamp = timespec_trunc(current_kernel_time(), mdsc->fsc->sb->s_time_gran); |
1710 | req->r_stamp = timespec_trunc(ts, mdsc->fsc->sb->s_time_gran); | ||
1711 | 1709 | ||
1712 | req->r_op = op; | 1710 | req->r_op = op; |
1713 | req->r_direct_mode = mode; | 1711 | req->r_direct_mode = mode; |