From patchwork Mon Nov 11 20:16:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179129 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7142789ilf; Mon, 11 Nov 2019 12:17:21 -0800 (PST) X-Google-Smtp-Source: APXvYqxKvYIW6waXNPeY4duhZMcSQsuCDfzx9oo/wKgLo/V9WSwNwmIeVhtUi2h1k7PcNHpgnc81 X-Received: by 2002:a50:af44:: with SMTP id g62mr860815edd.164.1573503440930; Mon, 11 Nov 2019 12:17:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503440; cv=none; d=google.com; s=arc-20160816; b=AThp/71irtplJncKTc6Ge0wCN7J3IMUmr11rRXkGTkERkgM2M+xbsrCYCJ+d9FBng3 lAyEom5EKNYAP6Bex9l3kejqOV4lqm70VtzSZRi6Gv+i4ExzuRtJdeVfLf84PiGlMJrs LTDBnzFDFF9YhG7A54/fhWwcssYesAPYTAmD9RNerQDrpBjuPkgLPoZkXfiaVMcxrXGT JczNulzb1hMkG+m5cU2ruM5509aYPxXAq4SVk3D27CnRdb0MtEabliGb2zrPDl7AMYG2 hR0xPZjcsihtYXXAsEbWqGGUQ8cZjLuXYFUfyrz52cXLa8EZBeEOHXDnBl/G/lIsL9GB +nMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=SM3LShzf2eiMNtZK7/QmZjoSMsJ7OP9yJCxXKe9j9Ug=; b=Gj0g932v56beMQ4SqL69WXgvSA1+GPmYZyZVmyc7Ne0l27y9Az16WVFt555GzsqAkM lLcR4Tkh+n6m9mVJgGx8P2caHDq/Xp7zi/Zz6WSYU+ZhL4r83/nvgyQ3i5+YIqCoZ9kJ udQkwkjvy623pnhIv4m9qi/tVQxx2ZcxN6UGnqKa5HlAH9HBmyCFgN7fGmNbpg+JO1cN lGndWEk6tqPpLSDJGIxlIc7thGwvTmmWFVCDpo+113zMduVJrVqRxYGq1M5/OzDbGi2I yiaV6WQeo4X4t9ESudaH6hK6TnvBYGz7sE7r2WjqG5+zKz1hHtJqkmu3JB6sKIACo1W3 3OKA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id gr19si2263040ejb.232.2019.11.11.12.17.20; Mon, 11 Nov 2019 12:17:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727678AbfKKURO (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:14 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:43617 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727524AbfKKURH (ORCPT ); Mon, 11 Nov 2019 15:17:07 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1M9Fvl-1ia3Xl1z4p-006KOG; Mon, 11 Nov 2019 21:16:46 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 01/19] sunrpc: convert to time64_t for expiry Date: Mon, 11 Nov 2019 21:16:21 +0100 Message-Id: <20191111201639.2240623-2-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:a2VyUddXfSzKeHxwqQCyz7sWB++ZxSu5Aj9LC5kHmlapTNYdJ7r mODQjz6gzMbWRarBaj5BtqtQQxcnFFFb44Uv5ueVifwm6oy2WdOQR9icAOsVt1q7G+3CWL7 vbg3rrupP71jEiH7kKJh8BVO6ZazOSZcXaNmUFQQZIGJ7H9agQsVnACqDU9EMqURRxCPyXm hHx0hA4taW80N25ej1r8g== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:kbtdzH5iEb4=:CHi9+e0llSkoASmWST/W4G NYqzaUvcNdMiY3YxjgDcKyZ9F/fftNbrldN6/ymbEAKfwiI2hRvavf2IsU/0tEVeUNKas0XFH 2r4L6fn5GDEsskWXyjmKpnKu4u9gOUJVxwUCUfyfzhhLg5KulAhu1sLiXdPV0xY8rsiXpUWPE zP0DqT3Z3fNn4dyqRL8C7gwlgm/HJt5McXwxnCt+9z+elRmYUc5zOG6QqioCg2Ow1KLvVTjrg glZE6QQQ6r7bvxwlgA2Rr8lxmKFN53owdM8IdKgCCn2tddjU5m4Sftxb3MpGJMfS07e0I+bPZ jlUnk9D2opYMO6sr9+1poStk1pH9nle7PY42BRi+lSnsTsyBPbLg+ETntDeghjeveQR/qgbp3 WNJet0PV2DVzc2o7sHFYtDrgrRvIPy91uI8a0kyfC8I9aFG6xnivxh++k5cMdqjolz7QrsW6z F6MvG8RUoY9a/eM/lsrd4GK7+1+L8HVVPN3Tda9Pypg3WnJx/f3/zqfdny+GMFwQBmHPsrx8m nJOepNviopzKx4e5RBEMw4bvJWzsxFUmRjuCJEkejU22JhsCFIdoGtHhSF1bHn0CkFkDhNzeC pj3hz8ahTdC5yY6vkCU5QPv1MRn+GZXFdu1iB9PcR1CnZCGCRuHPSrOBfvruMCyrqWSxZ5PDv gdKbeF39ukfaPrU6KpLL4ZCnKY1sbfcopSOfEdR23ObkdnMPfFgHIvxj/mk5T+Nxuc+kYhb4e N5uGbN/+4+W9ozEqUJi32/MYbmqeKcjesIUlr7nsP2xqFWr7MiUPW1OCA+rXLPhWpgybA8TXB FGvTKfHASwJAOkT+yDb/3D/dwj2BfqjkktaKvUCL05vH162GLTcOpRFmZoXWpgI002RDJE4f5 JTnjnBefEwNAaIWeaZlg== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Using signed 32-bit types for UTC time leads to the y2038 overflow, which is what happens in the sunrpc code at the moment. This changes the sunrpc code over to use time64_t where possible. The one exception is the gss_import_v{1,2}_context() function for kerberos5, which uses 32-bit timestamps in the protocol. Here, we can at least treat the numbers as 'unsigned', which extends the range from 2038 to 2106. Signed-off-by: Arnd Bergmann --- include/linux/sunrpc/gss_api.h | 4 ++-- include/linux/sunrpc/gss_krb5.h | 2 +- net/sunrpc/auth_gss/gss_krb5_mech.c | 12 +++++++++--- net/sunrpc/auth_gss/gss_krb5_seal.c | 8 ++++---- net/sunrpc/auth_gss/gss_krb5_unseal.c | 6 +++--- net/sunrpc/auth_gss/gss_krb5_wrap.c | 16 ++++++++-------- net/sunrpc/auth_gss/gss_mech_switch.c | 2 +- net/sunrpc/auth_gss/svcauth_gss.c | 4 ++-- 8 files changed, 30 insertions(+), 24 deletions(-) -- 2.20.0 diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h index 5ac5db4d295f..68c871924ebf 100644 --- a/include/linux/sunrpc/gss_api.h +++ b/include/linux/sunrpc/gss_api.h @@ -49,7 +49,7 @@ int gss_import_sec_context( size_t bufsize, struct gss_api_mech *mech, struct gss_ctx **ctx_id, - time_t *endtime, + time64_t *endtime, gfp_t gfp_mask); u32 gss_get_mic( struct gss_ctx *ctx_id, @@ -109,7 +109,7 @@ struct gss_api_ops { const void *input_token, size_t bufsize, struct gss_ctx *ctx_id, - time_t *endtime, + time64_t *endtime, gfp_t gfp_mask); u32 (*gss_get_mic)( struct gss_ctx *ctx_id, diff --git a/include/linux/sunrpc/gss_krb5.h b/include/linux/sunrpc/gss_krb5.h index 02c0412e368c..c1d77dd8ed41 100644 --- a/include/linux/sunrpc/gss_krb5.h +++ b/include/linux/sunrpc/gss_krb5.h @@ -106,9 +106,9 @@ struct krb5_ctx { struct crypto_sync_skcipher *initiator_enc_aux; u8 Ksess[GSS_KRB5_MAX_KEYLEN]; /* session key */ u8 cksum[GSS_KRB5_MAX_KEYLEN]; - s32 endtime; atomic_t seq_send; atomic64_t seq_send64; + time64_t endtime; struct xdr_netobj mech_used; u8 initiator_sign[GSS_KRB5_MAX_KEYLEN]; u8 acceptor_sign[GSS_KRB5_MAX_KEYLEN]; diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c index 6e5d6d240215..75b3c2e9e8f8 100644 --- a/net/sunrpc/auth_gss/gss_krb5_mech.c +++ b/net/sunrpc/auth_gss/gss_krb5_mech.c @@ -253,6 +253,7 @@ gss_import_v1_context(const void *p, const void *end, struct krb5_ctx *ctx) { u32 seq_send; int tmp; + u32 time32; p = simple_get_bytes(p, end, &ctx->initiate, sizeof(ctx->initiate)); if (IS_ERR(p)) @@ -290,9 +291,11 @@ gss_import_v1_context(const void *p, const void *end, struct krb5_ctx *ctx) p = ERR_PTR(-ENOSYS); goto out_err; } - p = simple_get_bytes(p, end, &ctx->endtime, sizeof(ctx->endtime)); + p = simple_get_bytes(p, end, &time32, sizeof(time32)); if (IS_ERR(p)) goto out_err; + /* unsigned 32-bit time overflows in year 2106 */ + ctx->endtime = (time64_t)time32; p = simple_get_bytes(p, end, &seq_send, sizeof(seq_send)); if (IS_ERR(p)) goto out_err; @@ -587,15 +590,18 @@ gss_import_v2_context(const void *p, const void *end, struct krb5_ctx *ctx, { u64 seq_send64; int keylen; + u32 time32; p = simple_get_bytes(p, end, &ctx->flags, sizeof(ctx->flags)); if (IS_ERR(p)) goto out_err; ctx->initiate = ctx->flags & KRB5_CTX_FLAG_INITIATOR; - p = simple_get_bytes(p, end, &ctx->endtime, sizeof(ctx->endtime)); + p = simple_get_bytes(p, end, &time32, sizeof(time32)); if (IS_ERR(p)) goto out_err; + /* unsigned 32-bit time overflows in year 2106 */ + ctx->endtime = (time64_t)time32; p = simple_get_bytes(p, end, &seq_send64, sizeof(seq_send64)); if (IS_ERR(p)) goto out_err; @@ -659,7 +665,7 @@ gss_import_v2_context(const void *p, const void *end, struct krb5_ctx *ctx, static int gss_import_sec_context_kerberos(const void *p, size_t len, struct gss_ctx *ctx_id, - time_t *endtime, + time64_t *endtime, gfp_t gfp_mask) { const void *end = (const void *)((const char *)p + len); diff --git a/net/sunrpc/auth_gss/gss_krb5_seal.c b/net/sunrpc/auth_gss/gss_krb5_seal.c index 48fe4a591b54..f1d280accf43 100644 --- a/net/sunrpc/auth_gss/gss_krb5_seal.c +++ b/net/sunrpc/auth_gss/gss_krb5_seal.c @@ -131,14 +131,14 @@ gss_get_mic_v1(struct krb5_ctx *ctx, struct xdr_buf *text, struct xdr_netobj md5cksum = {.len = sizeof(cksumdata), .data = cksumdata}; void *ptr; - s32 now; + time64_t now; u32 seq_send; u8 *cksumkey; dprintk("RPC: %s\n", __func__); BUG_ON(ctx == NULL); - now = get_seconds(); + now = ktime_get_real_seconds(); ptr = setup_token(ctx, token); @@ -170,7 +170,7 @@ gss_get_mic_v2(struct krb5_ctx *ctx, struct xdr_buf *text, struct xdr_netobj cksumobj = { .len = sizeof(cksumdata), .data = cksumdata}; void *krb5_hdr; - s32 now; + time64_t now; u8 *cksumkey; unsigned int cksum_usage; __be64 seq_send_be64; @@ -198,7 +198,7 @@ gss_get_mic_v2(struct krb5_ctx *ctx, struct xdr_buf *text, memcpy(krb5_hdr + GSS_KRB5_TOK_HDR_LEN, cksumobj.data, cksumobj.len); - now = get_seconds(); + now = ktime_get_real_seconds(); return (ctx->endtime < now) ? GSS_S_CONTEXT_EXPIRED : GSS_S_COMPLETE; } diff --git a/net/sunrpc/auth_gss/gss_krb5_unseal.c b/net/sunrpc/auth_gss/gss_krb5_unseal.c index ef2b25b86d2f..aaab91cf24c8 100644 --- a/net/sunrpc/auth_gss/gss_krb5_unseal.c +++ b/net/sunrpc/auth_gss/gss_krb5_unseal.c @@ -124,7 +124,7 @@ gss_verify_mic_v1(struct krb5_ctx *ctx, /* it got through unscathed. Make sure the context is unexpired */ - now = get_seconds(); + now = ktime_get_real_seconds(); if (now > ctx->endtime) return GSS_S_CONTEXT_EXPIRED; @@ -149,7 +149,7 @@ gss_verify_mic_v2(struct krb5_ctx *ctx, char cksumdata[GSS_KRB5_MAX_CKSUM_LEN]; struct xdr_netobj cksumobj = {.len = sizeof(cksumdata), .data = cksumdata}; - s32 now; + time64_t now; u8 *ptr = read_token->data; u8 *cksumkey; u8 flags; @@ -194,7 +194,7 @@ gss_verify_mic_v2(struct krb5_ctx *ctx, return GSS_S_BAD_SIG; /* it got through unscathed. Make sure the context is unexpired */ - now = get_seconds(); + now = ktime_get_real_seconds(); if (now > ctx->endtime) return GSS_S_CONTEXT_EXPIRED; diff --git a/net/sunrpc/auth_gss/gss_krb5_wrap.c b/net/sunrpc/auth_gss/gss_krb5_wrap.c index 14a0aff0cd84..6c1920eed771 100644 --- a/net/sunrpc/auth_gss/gss_krb5_wrap.c +++ b/net/sunrpc/auth_gss/gss_krb5_wrap.c @@ -163,7 +163,7 @@ gss_wrap_kerberos_v1(struct krb5_ctx *kctx, int offset, .data = cksumdata}; int blocksize = 0, plainlen; unsigned char *ptr, *msg_start; - s32 now; + time64_t now; int headlen; struct page **tmp_pages; u32 seq_send; @@ -172,7 +172,7 @@ gss_wrap_kerberos_v1(struct krb5_ctx *kctx, int offset, dprintk("RPC: %s\n", __func__); - now = get_seconds(); + now = ktime_get_real_seconds(); blocksize = crypto_sync_skcipher_blocksize(kctx->enc); gss_krb5_add_padding(buf, offset, blocksize); @@ -268,7 +268,7 @@ gss_unwrap_kerberos_v1(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf) char cksumdata[GSS_KRB5_MAX_CKSUM_LEN]; struct xdr_netobj md5cksum = {.len = sizeof(cksumdata), .data = cksumdata}; - s32 now; + time64_t now; int direction; s32 seqnum; unsigned char *ptr; @@ -359,7 +359,7 @@ gss_unwrap_kerberos_v1(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf) /* it got through unscathed. Make sure the context is unexpired */ - now = get_seconds(); + now = ktime_get_real_seconds(); if (now > kctx->endtime) return GSS_S_CONTEXT_EXPIRED; @@ -439,7 +439,7 @@ gss_wrap_kerberos_v2(struct krb5_ctx *kctx, u32 offset, struct xdr_buf *buf, struct page **pages) { u8 *ptr, *plainhdr; - s32 now; + time64_t now; u8 flags = 0x00; __be16 *be16ptr; __be64 *be64ptr; @@ -481,14 +481,14 @@ gss_wrap_kerberos_v2(struct krb5_ctx *kctx, u32 offset, if (err) return err; - now = get_seconds(); + now = ktime_get_real_seconds(); return (kctx->endtime < now) ? GSS_S_CONTEXT_EXPIRED : GSS_S_COMPLETE; } static u32 gss_unwrap_kerberos_v2(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf) { - s32 now; + time64_t now; u8 *ptr; u8 flags = 0x00; u16 ec, rrc; @@ -557,7 +557,7 @@ gss_unwrap_kerberos_v2(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf) /* do sequencing checks */ /* it got through unscathed. Make sure the context is unexpired */ - now = get_seconds(); + now = ktime_get_real_seconds(); if (now > kctx->endtime) return GSS_S_CONTEXT_EXPIRED; diff --git a/net/sunrpc/auth_gss/gss_mech_switch.c b/net/sunrpc/auth_gss/gss_mech_switch.c index 82060099a429..94fddce7f224 100644 --- a/net/sunrpc/auth_gss/gss_mech_switch.c +++ b/net/sunrpc/auth_gss/gss_mech_switch.c @@ -374,7 +374,7 @@ int gss_import_sec_context(const void *input_token, size_t bufsize, struct gss_api_mech *mech, struct gss_ctx **ctx_id, - time_t *endtime, + time64_t *endtime, gfp_t gfp_mask) { if (!(*ctx_id = kzalloc(sizeof(**ctx_id), gfp_mask))) diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 8be2f209982b..30ed5585a42a 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -433,7 +433,7 @@ static int rsc_parse(struct cache_detail *cd, int id; int len, rv; struct rsc rsci, *rscp = NULL; - time_t expiry; + time64_t expiry; int status = -EINVAL; struct gss_api_mech *gm = NULL; @@ -1184,7 +1184,7 @@ static int gss_proxy_save_rsc(struct cache_detail *cd, static atomic64_t ctxhctr; long long ctxh; struct gss_api_mech *gm = NULL; - time_t expiry; + time64_t expiry; int status = -EINVAL; memset(&rsci, 0, sizeof(rsci)); From patchwork Mon Nov 11 20:16:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179136 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7148449ilf; Mon, 11 Nov 2019 12:22:08 -0800 (PST) X-Google-Smtp-Source: APXvYqwoe+kjGSEzg48A1wfx3M49Bfn5GTpuoQOyLzIFoLgLupFjqSUZll6KjAyOMWql8B5+JnYM X-Received: by 2002:a50:ac1c:: with SMTP id v28mr29273230edc.156.1573503727926; Mon, 11 Nov 2019 12:22:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503727; cv=none; d=google.com; s=arc-20160816; b=BWtpx3RuoPlcEI8zoj8ZjuWZv/6OWBPpnybqmDRp1QP78dgjiOp/k7q7CYBIoH5w/5 k6fuP6ItAK0poV1cThtAicqfC2fPAa6pE62xyVuxL7Tx7ACOijqu8UTJUvzl1zF/CkcV HgKSrL/S7iaaTRpQwcVIXxVhEKt6n0oBNRlgvzmJE0HaEBZKVPm+Rob5E47wnqqmRInt bXzWMY6jH+fxA2HxMZCUkEedrJei6o3gsJucgS7DEUD/qo6ALOKUTRo2ViqQELDpbzLx UN2h5ZkoO/H5uen1wMe8OWxOEW5xH47gA9GiN07C7kMShdGLslLdaBB6dO/ERYPYKzgb PDxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=BR6+0Tpg5ZNtcu2ef4XlvyqQYcjrn8neev86Ocxi+q0=; b=Sr7m3jJ+BywLDq4jsAxY5mA51VFKprXEjEHXxMBOoG30n0YHl40+x3r8th9v93rDgM N/qZMHOFiQ5GM+ZW1QuL/Z0y1BBF5T/w8JRnWBoGPvcAj3wYyL821yIba/W3JeGmDvJX toTr4qw/4rl54e428t8NlFOZOQ/+aElVeZTBmdyEjkU+tdmF8f1qcckS4ElBaR0F3moC RzNz7Ez8hFTS2Uqs7XD6cu2dsjz0WC1bhrVyNbwe3u3WfEtZGgr2zBBF37dyXk25KmtS VjyHYCTPAUNe2jNi1LPBEBbtO9rN8Xi0AfkBFI6rwAXmIQNNXrkZEOc+G/yu+eoVhvEi MKLA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d47si12942630ede.139.2019.11.11.12.22.07; Mon, 11 Nov 2019 12:22:07 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727797AbfKKUWE (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:04 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:38207 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726954AbfKKUWA (ORCPT ); Mon, 11 Nov 2019 15:22:00 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MMXcP-1iDyJd3NSx-00Jc5Q; Mon, 11 Nov 2019 21:16:46 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 02/19] nfs: use time64_t internally Date: Mon, 11 Nov 2019 21:16:22 +0100 Message-Id: <20191111201639.2240623-3-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:fAf2gAwX1eREIgqWnD/xnaA+lKEXHqO4cu9OJVKvRvoYHhZaQru CItU67QBzAi+i1+WixBdOxy2Ka0D7v+R0HRRUnJ+muD/WddljAq64Q1kKfp+a4Y0NzEl3Yg bCljuD7YpUhwXmX+7VjnKaPAfzBhWrzJiyPtdhzo9EntEcQdLQMpfNEMS4q2wUE2t6/nS6G 7WhVGcfTJGiE1r3b4kUfQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:g35q0nZQPNM=:mAGIyZFY5uDS36gskSacpR dczgXgs3Joq2m8/9oheWXDzbxvITp8ajekY9Ty3zeNgKiItKjQDpzGPG6I87LBH7aPm6QmpNG iZ+LDEwDDhap0bwUoJLhMpRQQiSTUmv6Nyrulv/yJMGTYe1dXE2ggBl3ZxrxjJFNvSEsnDXJc y+KHreNqgCkFVs+qNAYuJa1+flqhDLV8mgp6kIEKv4bvbgMhRrVVfTKAQ6OHlOdfyUmvrUrSn 5vMMTrPd18ESzCpJH2OZoKFyNqV4cu85XSIzJgEikToynOInxrbvxMc8iHPywlYLpgU0finFt GI5OBgxJtFcwBZ8doTHNL4Bc2OYVhHvq1zF4SUyOqXGrGKNhZMuiZBpTyJNPb+r47YcbIbA7N oLc+3u4ppCAdi87e7ZvkdyYD1nX/8CaeqJqjKDLWWsp1okmTJC4m6r3ipcxTJDIEvp2NihlSu 21BOWmdPqADY9uYFku2NWul185SfIuxmaaRstnN/nPlp7FAp/+0+e6czvr6n6qKRHtTBwBMC8 VVPBNKhD/qdymTiortmVptSTwuHUemFO0lz9x4Fn2lGDgMA5y+WI97YVDvFjhJ01Xyx1kAA5N b2nVUnfb+nZ/aDmatvEjtYSvzZ6OsVNPol/nCxhrLuuUM6aerDbG18GNLT26gSUEviWkLeDv0 hgkwekllb2wJOhjyjBnWlBIKl7WeUa4npUAqemtUssZ1UrJo3ZSIBuG9bxFdoAw13+WfBIeOk vSeMI2Kbv3q6uoOc+l3P7hXsI1EnqqoMMpgWj6R2QuE7m0yimMpwOrA8s6lNQCytrvHMnHMlV KX64kuKEoPQ6EuHdJ3+XYWqUekxn5ryQBjRHZTcKpCUIZztkNSqRDVGbasm/vFXoF7T6vYAZl ezuA3nk5e96ckLpY2ZoQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The timestamps for the cache are all in boottime seconds, so they don't overflow 32-bit values, but the use of time_t is deprecated because it generally does overflow when used with wall-clock time. There are multiple possible ways of avoiding it: - leave time_t, which is safe here, but forces others to look into this code to determine that it is over and over. - use a more generic type, like 'int' or 'long', which is known to be sufficient here but loses the documentation of referring to timestamps - use ktime_t everywhere, and convert into seconds in the few places where we want realtime-seconds. The conversion is sometimes expensive, but not more so than the conversion we do today. - use time64_t to clarify that this code is safe. Nothing would change for 64-bit architectures, but it is slightly less efficient on 32-bit architectures. Without a clear winner of the three approaches above, this picks the last one, favouring readability over a small performance loss on 32-bit architectures. Signed-off-by: Arnd Bergmann --- include/linux/sunrpc/cache.h | 42 +++++++++++++++++-------------- net/sunrpc/auth_gss/svcauth_gss.c | 2 +- net/sunrpc/cache.c | 18 ++++++------- net/sunrpc/svcauth_unix.c | 10 ++++---- 4 files changed, 38 insertions(+), 34 deletions(-) -- 2.20.0 diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index f8603724fbee..fa46de3a8f2b 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h @@ -45,8 +45,8 @@ */ struct cache_head { struct hlist_node cache_list; - time_t expiry_time; /* After time time, don't use the data */ - time_t last_refresh; /* If CACHE_PENDING, this is when upcall was + time64_t expiry_time; /* After time time, don't use the data */ + time64_t last_refresh; /* If CACHE_PENDING, this is when upcall was * sent, else this is when update was * received, though it is alway set to * be *after* ->flush_time. @@ -95,22 +95,22 @@ struct cache_detail { /* fields below this comment are for internal use * and should not be touched by cache owners */ - time_t flush_time; /* flush all cache items with + time64_t flush_time; /* flush all cache items with * last_refresh at or earlier * than this. last_refresh * is never set at or earlier * than this. */ struct list_head others; - time_t nextcheck; + time64_t nextcheck; int entries; /* fields for communication over channel */ struct list_head queue; atomic_t writers; /* how many time is /channel open */ - time_t last_close; /* if no writers, when did last close */ - time_t last_warn; /* when we last warned about no writers */ + time64_t last_close; /* if no writers, when did last close */ + time64_t last_warn; /* when we last warned about no writers */ union { struct proc_dir_entry *procfs; @@ -147,18 +147,22 @@ struct cache_deferred_req { * timestamps kept in the cache are expressed in seconds * since boot. This is the best for measuring differences in * real time. + * This reimplemnts ktime_get_boottime_seconds() in a slightly + * faster but less accurate way. When we end up converting + * back to wallclock (CLOCK_REALTIME), that error often + * cancels out during the reverse operation. */ -static inline time_t seconds_since_boot(void) +static inline time64_t seconds_since_boot(void) { - struct timespec boot; - getboottime(&boot); - return get_seconds() - boot.tv_sec; + struct timespec64 boot; + getboottime64(&boot); + return ktime_get_seconds() - boot.tv_sec; } -static inline time_t convert_to_wallclock(time_t sinceboot) +static inline time64_t convert_to_wallclock(time64_t sinceboot) { - struct timespec boot; - getboottime(&boot); + struct timespec64 boot; + getboottime64(&boot); return boot.tv_sec + sinceboot; } @@ -273,7 +277,7 @@ static inline int get_uint(char **bpp, unsigned int *anint) return 0; } -static inline int get_time(char **bpp, time_t *time) +static inline int get_time(char **bpp, time64_t *time) { char buf[50]; long long ll; @@ -287,20 +291,20 @@ static inline int get_time(char **bpp, time_t *time) if (kstrtoll(buf, 0, &ll)) return -EINVAL; - *time = (time_t)ll; + *time = ll; return 0; } -static inline time_t get_expiry(char **bpp) +static inline time64_t get_expiry(char **bpp) { - time_t rv; - struct timespec boot; + time64_t rv; + struct timespec64 boot; if (get_time(bpp, &rv)) return 0; if (rv < 0) return 0; - getboottime(&boot); + getboottime64(&boot); return rv - boot.tv_sec; } diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 30ed5585a42a..6268a2c7229d 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -200,7 +200,7 @@ static int rsi_parse(struct cache_detail *cd, char *ep; int len; struct rsi rsii, *rsip = NULL; - time_t expiry; + time64_t expiry; int status = -EINVAL; memset(&rsii, 0, sizeof(rsii)); diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c index a349094f6fb7..18d73d1f6734 100644 --- a/net/sunrpc/cache.c +++ b/net/sunrpc/cache.c @@ -42,7 +42,7 @@ static bool cache_listeners_exist(struct cache_detail *detail); static void cache_init(struct cache_head *h, struct cache_detail *detail) { - time_t now = seconds_since_boot(); + time64_t now = seconds_since_boot(); INIT_HLIST_NODE(&h->cache_list); h->flags = 0; kref_init(&h->ref); @@ -54,7 +54,7 @@ static void cache_init(struct cache_head *h, struct cache_detail *detail) } static inline int cache_is_valid(struct cache_head *h); -static void cache_fresh_locked(struct cache_head *head, time_t expiry, +static void cache_fresh_locked(struct cache_head *head, time64_t expiry, struct cache_detail *detail); static void cache_fresh_unlocked(struct cache_head *head, struct cache_detail *detail); @@ -145,10 +145,10 @@ EXPORT_SYMBOL_GPL(sunrpc_cache_lookup_rcu); static void cache_dequeue(struct cache_detail *detail, struct cache_head *ch); -static void cache_fresh_locked(struct cache_head *head, time_t expiry, +static void cache_fresh_locked(struct cache_head *head, time64_t expiry, struct cache_detail *detail) { - time_t now = seconds_since_boot(); + time64_t now = seconds_since_boot(); if (now <= detail->flush_time) /* ensure it isn't immediately treated as expired */ now = detail->flush_time + 1; @@ -280,7 +280,7 @@ int cache_check(struct cache_detail *detail, struct cache_head *h, struct cache_req *rqstp) { int rv; - long refresh_age, age; + time64_t refresh_age, age; /* First decide return status as best we can */ rv = cache_is_valid(h); @@ -294,7 +294,7 @@ int cache_check(struct cache_detail *detail, rv = -ENOENT; } else if (rv == -EAGAIN || (h->expiry_time != 0 && age > refresh_age/2)) { - dprintk("RPC: Want update, refage=%ld, age=%ld\n", + dprintk("RPC: Want update, refage=%lld, age=%lld\n", refresh_age, age); if (!test_and_set_bit(CACHE_PENDING, &h->flags)) { switch (cache_make_upcall(detail, h)) { @@ -1410,7 +1410,7 @@ static int c_show(struct seq_file *m, void *p) return cd->cache_show(m, cd, NULL); ifdebug(CACHE) - seq_printf(m, "# expiry=%ld refcnt=%d flags=%lx\n", + seq_printf(m, "# expiry=%lld refcnt=%d flags=%lx\n", convert_to_wallclock(cp->expiry_time), kref_read(&cp->ref), cp->flags); cache_get(cp); @@ -1483,7 +1483,7 @@ static ssize_t read_flush(struct file *file, char __user *buf, char tbuf[22]; size_t len; - len = snprintf(tbuf, sizeof(tbuf), "%lu\n", + len = snprintf(tbuf, sizeof(tbuf), "%llu\n", convert_to_wallclock(cd->flush_time)); return simple_read_from_buffer(buf, count, ppos, tbuf, len); } @@ -1494,7 +1494,7 @@ static ssize_t write_flush(struct file *file, const char __user *buf, { char tbuf[20]; char *ep; - time_t now; + time64_t now; if (*ppos || count > sizeof(tbuf)-1) return -EINVAL; diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c index 5c04ba7d456b..04aa80a2d752 100644 --- a/net/sunrpc/svcauth_unix.c +++ b/net/sunrpc/svcauth_unix.c @@ -166,7 +166,7 @@ static void ip_map_request(struct cache_detail *cd, } static struct ip_map *__ip_map_lookup(struct cache_detail *cd, char *class, struct in6_addr *addr); -static int __ip_map_update(struct cache_detail *cd, struct ip_map *ipm, struct unix_domain *udom, time_t expiry); +static int __ip_map_update(struct cache_detail *cd, struct ip_map *ipm, struct unix_domain *udom, time64_t expiry); static int ip_map_parse(struct cache_detail *cd, char *mesg, int mlen) @@ -187,7 +187,7 @@ static int ip_map_parse(struct cache_detail *cd, struct ip_map *ipmp; struct auth_domain *dom; - time_t expiry; + time64_t expiry; if (mesg[mlen-1] != '\n') return -EINVAL; @@ -308,7 +308,7 @@ static inline struct ip_map *ip_map_lookup(struct net *net, char *class, } static int __ip_map_update(struct cache_detail *cd, struct ip_map *ipm, - struct unix_domain *udom, time_t expiry) + struct unix_domain *udom, time64_t expiry) { struct ip_map ip; struct cache_head *ch; @@ -328,7 +328,7 @@ static int __ip_map_update(struct cache_detail *cd, struct ip_map *ipm, } static inline int ip_map_update(struct net *net, struct ip_map *ipm, - struct unix_domain *udom, time_t expiry) + struct unix_domain *udom, time64_t expiry) { struct sunrpc_net *sn; @@ -491,7 +491,7 @@ static int unix_gid_parse(struct cache_detail *cd, int rv; int i; int err; - time_t expiry; + time64_t expiry; struct unix_gid ug, *ugp; if (mesg[mlen - 1] != '\n') From patchwork Mon Nov 11 20:16:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179145 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7151075ilf; Mon, 11 Nov 2019 12:24:28 -0800 (PST) X-Google-Smtp-Source: APXvYqyIrrq+OrZalXTEveqFdSf7qKdhDxYDymf7r6KeZlV3LCZqkpAuPd+BmqTp0PIP1/p/DJiM X-Received: by 2002:a17:906:b5b:: with SMTP id v27mr24445020ejg.327.1573503868813; Mon, 11 Nov 2019 12:24:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503868; cv=none; d=google.com; s=arc-20160816; b=xPmH7zAohk/WugKX/fYvOZZZlmWkByVv0HPuLY9AcQulmMupdU+1OjiqajRijMhpmw 9Yf181UyI9saousX29uY9HmEeld5gQP67nihDz9Xah5MyL2I2PwSx4Az441aqA3Ww35+ wWgFRfGvGHX22G7EjywvHnMaFD+RXG3FEb61CvsRSxIio/NCoed1052AlJDnGTHSjpQU MSu0qNF+b2uNCLbuLQYh9zUJSztuVC91cvOx6qGNKYGZDbCfNNWdUy6SE5ZyufOHhGXH cC3/YwmxTIGBaeKF/+T96KqlCv+aFIHHz6RB6wGkXpMPlTJGhuPYgs8bGdg5M6MlXBVg J05A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=PVF8tbN30kSkeWBFg//sw8NHtC2F8rwREdcDVSBONhU=; b=0idiwqfM1oTarq+fRaaY7LaKhtdb69LPzFxs72nomrn83YeFzAJjLGOOadG012RYyq tLWCAEXVVdDmCFOSdrwmlerjaXOqHsig7gRiPCpYRjH0HxJgNiWGxg5+MRGpY5IJsFci kQqshVntttYnOgDtilhlQQ37dbolOM85OYB26Ev5cIwNt5F06JysDZqLT9nuirh+Jnv8 fFGS0hZAwPIdQqHt/r4nyN4v0IxeUQXH/69fAK+F7kNiy2G0cTcbmhYB6s2hls026U+3 19q3/7JszcsWEbzFuN+HGLgSIMSzLsHgxHaSTEDHr/uukKDo8UtVZJP/nJ2rLENYgs8W YR6g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h56si12065436edh.363.2019.11.11.12.24.28; Mon, 11 Nov 2019 12:24:28 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727655AbfKKUYW (ORCPT + 26 others); Mon, 11 Nov 2019 15:24:22 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:39853 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726877AbfKKUYW (ORCPT ); Mon, 11 Nov 2019 15:24:22 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MybCV-1hgJG60W9l-00yzZy; Mon, 11 Nov 2019 21:16:47 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 03/19] nfs: use timespec64 in nfs_fattr Date: Mon, 11 Nov 2019 21:16:23 +0100 Message-Id: <20191111201639.2240623-4-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:bTNrHmlRSCS7Q648x/nXsNVWZf0YT/n2OGvDzscLgX4gSTeyge1 w8gtmIRNPUgf5rs+6/4kNaOmz8Uf3AdEMF6+1QNwZfINyzPK+rFsWreUzr422FFqxTy44bC eZyaE9JVzyc5IC43vw2m/FE4dq2PN9KwsX4W/A5g7x3gI9vMlpg+t6Vqtzlzmg7sUdo13wC YV/efwQJHoEty06eYF88Q== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:tIP4F6BZVzI=:vCH++yVboML+CBdyouR+bS XWMX83JBpOCXkmlpQ2D2E0FXk5l4mctoJlkwzoJr2jLt1fI+h3D7iFb0ueuB0LwYTrQ3kAcsI BY3pUAZsGRAXlb2mLyfiGS18JANp+o6KqNq+zeqyqBLOBd6VtEAr3OskWJd+KFkeMBJznMmKR DqE7Qw3yawAdXTzWdfwKV3CIijDhzDVPJUWNhWdMtkBk85TY6zPKgp+R4gAaGFVM9YRrYYaIk i8+afFGdqYNTngoqDyqfK8VawghZaqYcqY5Iwjgc1DRpBenajC1JXwk//Sl2Zk3wQXsNwNN3L jjA+h8HZBli9le5VPyzkkuYpw/Hc+gcCTSDbIMDdb+rlSOs2IEOsPKOUCfMEm4bouYwkAPCVL EWs65dTfFScE046oVM/XuWfhMCyUgUGYGICaIRwxpZ7Ep9hyRfV1ULU+gKiAn1f0LwyOp4dwY QcBYp+TbxVwvFTZdAzswsNuXRT+UUsClNmxkNuyiVgn5lWqNR3VU3yO/ULKIR07O+ojtWBH1K ORbNu56gccrwFyQra8cyby3dB8sy8LlhHk8U1X5uvdQhkblTYnkUuf70/rGwzKpz3fuM+f82z jru9dmvFLQMINvJypMXKxQvJV1H1XBmQ5Tip0F07NINAQmkOvyTfoMZDyGwHLcqoRR0nx7n4g wyeQwVQy18EyRgzWAqNVH16zB/ODhsJQy3a8PNgexqeHtFIl1l4rdRvVtY4vdHK2YXIwWh8mN ol02MD+XfNCxjIsiUQfQWQmSTG4I2PR/EWv2MD3SiYfYXwZDgc6D/F3XCfch6vGliJY8yNHpF +7UQtBOs+WTktlV+PVbqHnkRhPohVywLUDp5gPBVH5NjacznJx2Nk9PopfdW2OKGoHlzk6OER 1v2GAaLpHDopAyH0P5tw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Push down the use of timespec64 into NFS nfs_fattr, to avoid needless conversions, and get closer to having 64-bit time_t support on 32-bit NFSv4 and removing some old interfaces from the kernel. Signed-off-by: Arnd Bergmann --- fs/nfs/inode.c | 54 +++++++++++++++++++-------------------- fs/nfs/internal.h | 6 ++--- fs/nfs/nfs2xdr.c | 2 +- fs/nfs/nfs3xdr.c | 2 +- fs/nfs/nfs4xdr.c | 24 ++++++++--------- include/linux/nfs_fs_sb.h | 2 +- include/linux/nfs_xdr.h | 12 ++++----- 7 files changed, 51 insertions(+), 51 deletions(-) -- 2.20.0 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 2a03bfeec10a..b0b4b9f303fd 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -504,15 +504,15 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, st nfsi->read_cache_jiffies = fattr->time_start; nfsi->attr_gencount = fattr->gencount; if (fattr->valid & NFS_ATTR_FATTR_ATIME) - inode->i_atime = timespec_to_timespec64(fattr->atime); + inode->i_atime = fattr->atime; else if (nfs_server_capable(inode, NFS_CAP_ATIME)) nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME); if (fattr->valid & NFS_ATTR_FATTR_MTIME) - inode->i_mtime = timespec_to_timespec64(fattr->mtime); + inode->i_mtime = fattr->mtime; else if (nfs_server_capable(inode, NFS_CAP_MTIME)) nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME); if (fattr->valid & NFS_ATTR_FATTR_CTIME) - inode->i_ctime = timespec_to_timespec64(fattr->ctime); + inode->i_ctime = fattr->ctime; else if (nfs_server_capable(inode, NFS_CAP_CTIME)) nfs_set_cache_invalid(inode, NFS_INO_INVALID_CTIME); if (fattr->valid & NFS_ATTR_FATTR_CHANGE) @@ -698,7 +698,7 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr, if ((attr->ia_valid & ATTR_GID) != 0) inode->i_gid = attr->ia_gid; if (fattr->valid & NFS_ATTR_FATTR_CTIME) - inode->i_ctime = timespec_to_timespec64(fattr->ctime); + inode->i_ctime = fattr->ctime; else nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_CTIME); @@ -709,14 +709,14 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr, NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_ATIME | NFS_INO_INVALID_CTIME); if (fattr->valid & NFS_ATTR_FATTR_ATIME) - inode->i_atime = timespec_to_timespec64(fattr->atime); + inode->i_atime = fattr->atime; else if (attr->ia_valid & ATTR_ATIME_SET) inode->i_atime = attr->ia_atime; else nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME); if (fattr->valid & NFS_ATTR_FATTR_CTIME) - inode->i_ctime = timespec_to_timespec64(fattr->ctime); + inode->i_ctime = fattr->ctime; else nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_CTIME); @@ -725,14 +725,14 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr, NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_MTIME | NFS_INO_INVALID_CTIME); if (fattr->valid & NFS_ATTR_FATTR_MTIME) - inode->i_mtime = timespec_to_timespec64(fattr->mtime); + inode->i_mtime = fattr->mtime; else if (attr->ia_valid & ATTR_MTIME_SET) inode->i_mtime = attr->ia_mtime; else nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME); if (fattr->valid & NFS_ATTR_FATTR_CTIME) - inode->i_ctime = timespec_to_timespec64(fattr->ctime); + inode->i_ctime = fattr->ctime; else nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_CTIME); @@ -1351,7 +1351,7 @@ static bool nfs_file_has_buffered_writers(struct nfs_inode *nfsi) static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) { - struct timespec ts; + struct timespec64 ts; if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE) && (fattr->valid & NFS_ATTR_FATTR_CHANGE) @@ -1361,18 +1361,18 @@ static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA); } /* If we have atomic WCC data, we may update some attributes */ - ts = timespec64_to_timespec(inode->i_ctime); + ts = inode->i_ctime; if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME) && (fattr->valid & NFS_ATTR_FATTR_CTIME) - && timespec_equal(&ts, &fattr->pre_ctime)) { - inode->i_ctime = timespec_to_timespec64(fattr->ctime); + && timespec64_equal(&ts, &fattr->pre_ctime)) { + inode->i_ctime = fattr->ctime; } - ts = timespec64_to_timespec(inode->i_mtime); + ts = inode->i_mtime; if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME) && (fattr->valid & NFS_ATTR_FATTR_MTIME) - && timespec_equal(&ts, &fattr->pre_mtime)) { - inode->i_mtime = timespec_to_timespec64(fattr->mtime); + && timespec64_equal(&ts, &fattr->pre_mtime)) { + inode->i_mtime = fattr->mtime; if (S_ISDIR(inode->i_mode)) nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA); } @@ -1398,7 +1398,7 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat struct nfs_inode *nfsi = NFS_I(inode); loff_t cur_size, new_isize; unsigned long invalid = 0; - struct timespec ts; + struct timespec64 ts; if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ)) return 0; @@ -1425,12 +1425,12 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat invalid |= NFS_INO_INVALID_CHANGE | NFS_INO_REVAL_PAGECACHE; - ts = timespec64_to_timespec(inode->i_mtime); - if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&ts, &fattr->mtime)) + ts = inode->i_mtime; + if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec64_equal(&ts, &fattr->mtime)) invalid |= NFS_INO_INVALID_MTIME; - ts = timespec64_to_timespec(inode->i_ctime); - if ((fattr->valid & NFS_ATTR_FATTR_CTIME) && !timespec_equal(&ts, &fattr->ctime)) + ts = inode->i_ctime; + if ((fattr->valid & NFS_ATTR_FATTR_CTIME) && !timespec64_equal(&ts, &fattr->ctime)) invalid |= NFS_INO_INVALID_CTIME; if (fattr->valid & NFS_ATTR_FATTR_SIZE) { @@ -1460,8 +1460,8 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink) invalid |= NFS_INO_INVALID_OTHER; - ts = timespec64_to_timespec(inode->i_atime); - if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec_equal(&ts, &fattr->atime)) + ts = inode->i_atime; + if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec64_equal(&ts, &fattr->atime)) invalid |= NFS_INO_INVALID_ATIME; if (invalid != 0) @@ -1733,12 +1733,12 @@ int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fa } if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 && (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) { - fattr->pre_ctime = timespec64_to_timespec(inode->i_ctime); + fattr->pre_ctime = inode->i_ctime; fattr->valid |= NFS_ATTR_FATTR_PRECTIME; } if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 && (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) { - fattr->pre_mtime = timespec64_to_timespec(inode->i_mtime); + fattr->pre_mtime = inode->i_mtime; fattr->valid |= NFS_ATTR_FATTR_PREMTIME; } if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 && @@ -1899,7 +1899,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) } if (fattr->valid & NFS_ATTR_FATTR_MTIME) { - inode->i_mtime = timespec_to_timespec64(fattr->mtime); + inode->i_mtime = fattr->mtime; } else if (server->caps & NFS_CAP_MTIME) { nfsi->cache_validity |= save_cache_validity & (NFS_INO_INVALID_MTIME @@ -1908,7 +1908,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) } if (fattr->valid & NFS_ATTR_FATTR_CTIME) { - inode->i_ctime = timespec_to_timespec64(fattr->ctime); + inode->i_ctime = fattr->ctime; } else if (server->caps & NFS_CAP_CTIME) { nfsi->cache_validity |= save_cache_validity & (NFS_INO_INVALID_CTIME @@ -1946,7 +1946,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) if (fattr->valid & NFS_ATTR_FATTR_ATIME) - inode->i_atime = timespec_to_timespec64(fattr->atime); + inode->i_atime = fattr->atime; else if (server->caps & NFS_CAP_ATIME) { nfsi->cache_validity |= save_cache_validity & (NFS_INO_INVALID_ATIME diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 447a3c17fa8e..d3d3a9a0aa72 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -706,14 +706,14 @@ unsigned int nfs_page_array_len(unsigned int base, size_t len) } /* - * Convert a struct timespec into a 64-bit change attribute + * Convert a struct timespec64 into a 64-bit change attribute * - * This does approximately the same thing as timespec_to_ns(), + * This does approximately the same thing as timespec64_to_ns(), * but for calculation efficiency, we multiply the seconds by * 1024*1024*1024. */ static inline -u64 nfs_timespec_to_change_attr(const struct timespec *ts) +u64 nfs_timespec_to_change_attr(const struct timespec64 *ts) { return ((u64)ts->tv_sec << 30) + ts->tv_nsec; } diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index cbc17a203248..d4e144712034 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c @@ -234,7 +234,7 @@ static __be32 *xdr_encode_current_server_time(__be32 *p, return p; } -static __be32 *xdr_decode_time(__be32 *p, struct timespec *timep) +static __be32 *xdr_decode_time(__be32 *p, struct timespec64 *timep) { timep->tv_sec = be32_to_cpup(p++); timep->tv_nsec = be32_to_cpup(p++) * NSEC_PER_USEC; diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c index 602767850b36..2a16bbda3937 100644 --- a/fs/nfs/nfs3xdr.c +++ b/fs/nfs/nfs3xdr.c @@ -463,7 +463,7 @@ static __be32 *xdr_encode_nfstime3(__be32 *p, const struct timespec *timep) return p; } -static __be32 *xdr_decode_nfstime3(__be32 *p, struct timespec *timep) +static __be32 *xdr_decode_nfstime3(__be32 *p, struct timespec64 *timep) { timep->tv_sec = be32_to_cpup(p++); timep->tv_nsec = be32_to_cpup(p++); diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index ab07db0f07cd..c917fb24c56f 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -4065,17 +4065,17 @@ static int decode_attr_space_used(struct xdr_stream *xdr, uint32_t *bitmap, uint } static __be32 * -xdr_decode_nfstime4(__be32 *p, struct timespec *t) +xdr_decode_nfstime4(__be32 *p, struct timespec64 *t) { __u64 sec; p = xdr_decode_hyper(p, &sec); - t-> tv_sec = (time_t)sec; + t-> tv_sec = sec; t->tv_nsec = be32_to_cpup(p++); return p; } -static int decode_attr_time(struct xdr_stream *xdr, struct timespec *time) +static int decode_attr_time(struct xdr_stream *xdr, struct timespec64 *time) { __be32 *p; @@ -4086,7 +4086,7 @@ static int decode_attr_time(struct xdr_stream *xdr, struct timespec *time) return 0; } -static int decode_attr_time_access(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time) +static int decode_attr_time_access(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec64 *time) { int status = 0; @@ -4100,11 +4100,11 @@ static int decode_attr_time_access(struct xdr_stream *xdr, uint32_t *bitmap, str status = NFS_ATTR_FATTR_ATIME; bitmap[1] &= ~FATTR4_WORD1_TIME_ACCESS; } - dprintk("%s: atime=%ld\n", __func__, (long)time->tv_sec); + dprintk("%s: atime=%lld\n", __func__, time->tv_sec); return status; } -static int decode_attr_time_metadata(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time) +static int decode_attr_time_metadata(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec64 *time) { int status = 0; @@ -4118,12 +4118,12 @@ static int decode_attr_time_metadata(struct xdr_stream *xdr, uint32_t *bitmap, s status = NFS_ATTR_FATTR_CTIME; bitmap[1] &= ~FATTR4_WORD1_TIME_METADATA; } - dprintk("%s: ctime=%ld\n", __func__, (long)time->tv_sec); + dprintk("%s: ctime=%lld\n", __func__, time->tv_sec); return status; } static int decode_attr_time_delta(struct xdr_stream *xdr, uint32_t *bitmap, - struct timespec *time) + struct timespec64 *time) { int status = 0; @@ -4135,8 +4135,8 @@ static int decode_attr_time_delta(struct xdr_stream *xdr, uint32_t *bitmap, status = decode_attr_time(xdr, time); bitmap[1] &= ~FATTR4_WORD1_TIME_DELTA; } - dprintk("%s: time_delta=%ld %ld\n", __func__, (long)time->tv_sec, - (long)time->tv_nsec); + dprintk("%s: time_delta=%lld %ld\n", __func__, time->tv_sec, + time->tv_nsec); return status; } @@ -4186,7 +4186,7 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap, return status; } -static int decode_attr_time_modify(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time) +static int decode_attr_time_modify(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec64 *time) { int status = 0; @@ -4200,7 +4200,7 @@ static int decode_attr_time_modify(struct xdr_stream *xdr, uint32_t *bitmap, str status = NFS_ATTR_FATTR_MTIME; bitmap[1] &= ~FATTR4_WORD1_TIME_MODIFY; } - dprintk("%s: mtime=%ld\n", __func__, (long)time->tv_sec); + dprintk("%s: mtime=%lld\n", __func__, time->tv_sec); return status; } diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index a87fe854f008..47266870a235 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -171,7 +171,7 @@ struct nfs_server { struct nfs_fsid fsid; __u64 maxfilesize; /* maximum file size */ - struct timespec time_delta; /* smallest time granularity */ + struct timespec64 time_delta; /* smallest time granularity */ unsigned long mount_time; /* when this fs was mounted */ struct super_block *super; /* VFS super block */ dev_t s_dev; /* superblock dev numbers */ diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 9b8324ec08f3..db5c01001937 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -62,14 +62,14 @@ struct nfs_fattr { struct nfs_fsid fsid; __u64 fileid; __u64 mounted_on_fileid; - struct timespec atime; - struct timespec mtime; - struct timespec ctime; + struct timespec64 atime; + struct timespec64 mtime; + struct timespec64 ctime; __u64 change_attr; /* NFSv4 change attribute */ __u64 pre_change_attr;/* pre-op NFSv4 change attribute */ __u64 pre_size; /* pre_op_attr.size */ - struct timespec pre_mtime; /* pre_op_attr.mtime */ - struct timespec pre_ctime; /* pre_op_attr.ctime */ + struct timespec64 pre_mtime; /* pre_op_attr.mtime */ + struct timespec64 pre_ctime; /* pre_op_attr.ctime */ unsigned long time_start; unsigned long gencount; struct nfs4_string *owner_name; @@ -143,7 +143,7 @@ struct nfs_fsinfo { __u32 wtmult; /* writes should be multiple of this */ __u32 dtpref; /* pref. readdir transfer size */ __u64 maxfilesize; - struct timespec time_delta; /* server time granularity */ + struct timespec64 time_delta; /* server time granularity */ __u32 lease_time; /* in seconds */ __u32 nlayouttypes; /* number of layouttypes */ __u32 layouttype[NFS_MAX_LAYOUT_TYPES]; /* supported pnfs layout driver */ From patchwork Mon Nov 11 20:16:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179140 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7148767ilf; Mon, 11 Nov 2019 12:22:24 -0800 (PST) X-Google-Smtp-Source: APXvYqzBeS9u3sa8OLxjbSEDaJ6IpZ1hzJ6hgIoQ770fQ6Z9BvTF3fePTJvLsWxov+2ORBj3zrbV X-Received: by 2002:a17:906:b246:: with SMTP id ce6mr23932617ejb.298.1573503744548; Mon, 11 Nov 2019 12:22:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503744; cv=none; d=google.com; s=arc-20160816; b=HlBPfraf0vmzb/CC5uKzm9a5OCxhMFMW89TcPh1eqelHcx02NphDI7wfS0s1Tz/PlM 3q+E9LehaIga9mQQL+AQuhm0CCLPuxfE7LERvZFFCm/iCxnP92btmnyyiQJ6l6RhKQKA yWNmkUpGGRjRqFyBos5apCGXC3j7hqvaGKG3/7yHs9JeK/t8o6hW453a402yrJ/bgMhq Lg91XW5x8wziwHONAbhhuOBLeT04KE4G8FnfG4cyqg+CfHq7Q/vxnm8DMmb2aW6xqtbL yfp4Oi7D+bjBAsqNIi174Gh1gu/0N96eyROELjQjYGhctZJv1QrwKu9mQ2Q7uvXEa+Gv Ok+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=zSCyqCyK56NumZQ0HO5fbFhlH9YWgF0Af3f4TYdJaGU=; b=CRV0ROrDs6kwaUNg+EbLW0uzPFjQlPyRjTCBd+1zwFIvpV1ybWtKPeAexqDcEwb6T2 iTL+7OI98DeU0tIG5D9fP+ykYjyADy9CPSD8GgODCUHlGk0wOoKaUQpKDpAg1nguXedD Bp3+Yqf42c99488Kvh9J3kxgMvMz/uJhf8oCjA5RJNM6epDwPQq2sJ3aRcu7lGrRr5vB RR7xeGwHC5OeRkgSO4Y0ehi332n6NinNrLk6Nq65OqsMrEvKVsR2q5uPV7d5c/b9TLZo YBF+yAMLHgfWs+9L6T1wG9B648+sEJba/KElSXmtS5meYzOAsdVIpUbNghJAyq24ofQ8 0FFQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bs2si10363532edb.354.2019.11.11.12.22.24; Mon, 11 Nov 2019 12:22:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727667AbfKKUWB (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:01 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:37069 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727183AbfKKUV7 (ORCPT ); Mon, 11 Nov 2019 15:21:59 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1M3DFj-1iStbG1rY5-003bdi; Mon, 11 Nov 2019 21:16:47 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 04/19] nfs: callback: use timespec64 in cb_getattrres Date: Mon, 11 Nov 2019 21:16:24 +0100 Message-Id: <20191111201639.2240623-5-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:KWYyInVBUVuj//LzWFbXW2jcS7+5FTXV3dKVlBIHKk1L18WZled 7C3tZe/xX+O/9EMFYukOjVwOsPlCnHzCiYNH4glxd86c+Ov99enjaCjXGhJe+FG5h9878Jh qoAKEUCaNqnuToo37uYLLqhhgga4HRmi/8gaidBeQFst7aaYFBdi8OiC+uidAOCuK1FEDC2 Zg8whbTLZiKS5Pv0t3A/A== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:6JTjadtS4S4=:RpCZNcIkzsq0/oqcUn9z9o BK7x0h11eGMyUUW2CZDKK4vMwxFNZeBbfStAzocF9OMM12o4NGObOWCZDhKxiPyUyHMQ9Y8jd aMH7pJnBmLqxe39j6+OHfGKyjcCwkaNjMtFPB0fKF7o70u94XKK7JRrLtRaeLMSnRiZHulWMi 1QjJCXvyYIL4Bs+4PtLRWJl64uLIsQKtzbaLO4OUIZ1psMRGsJObrjtAH5HzKF1P81s7e2I3D nshvpjQS+5TrnUsNYzFEMF1ezf/NMeb3yVaA3h1SOvj/4Ffg1mJKcV8lwRSDa28ESk6V/rxSn 9/dhiHSXH1k2ax7vwQgvZVUX38hIH4/vI0TPB3oO+0gFkXm3m82SprbcD2MWt3D9Jp62wycfP NXt8rOuqXcSjeTh8RNxjZjFFGcCCA2oti4iG1r6MUEprMcb/0Hy4yVJLJZn+nqDV08wXn7VPS W4v0NCHpFWFE9ThZ1PSYNI+h0EE/lzljpbFynfgBlVma8pGoYwTc9NWO+TPfQWr6n4Acl5KnQ 9GUyKYRTOnZj6YLNpUkW6KihWbe6Gp1f9N8vP5SXKHuKoVJYRNxwehWZLS+HcIY0CaL9Iq8Pe 1hqQpAvkNgkPhdTfUGjT8XTcAZOfbOc1x0KPCF2E+GbrrM8b4rfd3tDSwu/qtzrIIE90h4zk1 E2gCZc+IVbnVjvXGq961uoffpBe6148zvpb4RPrMDx2RatWufLIRiYthhEZO3y9FPXwFV3A7E LUaYjOAkQV51mq6of1Q7JC5HNJ22wiQ+rvDHfaRFOVGCmOtktJpqrCrUyKk3iBScPQe9+9Y+8 zIg1clgKST1iUaFvj/2ewDGl1sdlmSOQ37bRqUQ1wdYXBOKfhmuRnIl6zDejzPbnPCtuwkbmX H4DHvRimHDUkukdJskiQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Make this use 64-bit timestamps to not lose information on 32-bit architectures. As both the input and the ouput are 64-bit wide, this is the obvious step. Signed-off-by: Arnd Bergmann --- fs/nfs/callback.h | 4 ++-- fs/nfs/callback_proc.c | 4 ++-- fs/nfs/callback_xdr.c | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) -- 2.20.0 diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h index 8f34daf85f70..549350259840 100644 --- a/fs/nfs/callback.h +++ b/fs/nfs/callback.h @@ -72,8 +72,8 @@ struct cb_getattrres { uint32_t bitmap[2]; uint64_t size; uint64_t change_attr; - struct timespec ctime; - struct timespec mtime; + struct timespec64 ctime; + struct timespec64 mtime; }; struct cb_recallargs { diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index f39924ba050b..db3e7771e597 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c @@ -56,8 +56,8 @@ __be32 nfs4_callback_getattr(void *argp, void *resp, res->change_attr = delegation->change_attr; if (nfs_have_writebacks(inode)) res->change_attr++; - res->ctime = timespec64_to_timespec(inode->i_ctime); - res->mtime = timespec64_to_timespec(inode->i_mtime); + res->ctime = inode->i_ctime; + res->mtime = inode->i_mtime; res->bitmap[0] = (FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE) & args->bitmap[0]; res->bitmap[1] = (FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY) & diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c index 73a5a5ea2976..03a20f5716c7 100644 --- a/fs/nfs/callback_xdr.c +++ b/fs/nfs/callback_xdr.c @@ -627,7 +627,7 @@ static __be32 encode_attr_size(struct xdr_stream *xdr, const uint32_t *bitmap, u return 0; } -static __be32 encode_attr_time(struct xdr_stream *xdr, const struct timespec *time) +static __be32 encode_attr_time(struct xdr_stream *xdr, const struct timespec64 *time) { __be32 *p; @@ -639,14 +639,14 @@ static __be32 encode_attr_time(struct xdr_stream *xdr, const struct timespec *ti return 0; } -static __be32 encode_attr_ctime(struct xdr_stream *xdr, const uint32_t *bitmap, const struct timespec *time) +static __be32 encode_attr_ctime(struct xdr_stream *xdr, const uint32_t *bitmap, const struct timespec64 *time) { if (!(bitmap[1] & FATTR4_WORD1_TIME_METADATA)) return 0; return encode_attr_time(xdr,time); } -static __be32 encode_attr_mtime(struct xdr_stream *xdr, const uint32_t *bitmap, const struct timespec *time) +static __be32 encode_attr_mtime(struct xdr_stream *xdr, const uint32_t *bitmap, const struct timespec64 *time) { if (!(bitmap[1] & FATTR4_WORD1_TIME_MODIFY)) return 0; From patchwork Mon Nov 11 20:16:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179137 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7148538ilf; Mon, 11 Nov 2019 12:22:13 -0800 (PST) X-Google-Smtp-Source: APXvYqwr+ubngfm2hCujPh0b4oPsTHbGdUqUu5zs2hLX9yZbCdWyw1BMugBY8okB2WvUYKhSMqzQ X-Received: by 2002:a17:906:4a0c:: with SMTP id w12mr24700318eju.306.1573503732962; Mon, 11 Nov 2019 12:22:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503732; cv=none; d=google.com; s=arc-20160816; b=wt+yz0ytQVThdQRy+h7RmE+UAk41RU+knPFsvRI8Q/9OuRA3tMfwxfQ6+yAjg9TwdI 14YErhzCeuyrNtp5Gr1prQIu4thNTCEsoZ5V+iPUuifnIlpC9cYjjGSKys71f8yBMboj j4+nlOzCaAgBKEM4ZTGCCY+kJY7gxJ7urXicYk6r63n2jlxa08b0xOTiEmckAy0XWQo9 Q1GNQXyYEJoj9OW2vQR+bI6A0FXe+KPNCJM9YLGgC75XfT6YBE9e8y0Uiz+Hdvbzzvj5 SpegVxRdUm4HRiHbNZPC7YHdkqlBjBmTDEaKzOvK36dHyzk+FWexdklJxODapiQl/wgg yrrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=UIcpQU5ThaBTR9M+FoOKr6ZgZbc2LPgn8fhLykCRIk8=; b=kEa2Drf7JIZV7iGb4ujNRDs0PwEY/Y8M7y5Dlss09fr1oyUuh/bRA7PwhESSG/BxA6 apeGssQjxT2wApuQYqsMRP5d+sTNSygDmSqFrUGvjsJOdCM1UD91gWWQL9iCwjBmXm0w DrPNoZixoFGkbDeHLdOpar6Jp6uEjDK5clO+nRCKU6zwTHNC4C/UOl57L/CY7vFrkexu h/DS48vVVOOJsP5tUEHxSllXMBChw/XiDOyf8cUOfv8n4UmZ3oYTeN5ecbkAY9KZDa+R 9+7U+pgqH0dUz+9jgy1mqXWJCTsWtDnjq4019d4NTwTo/5Ztjfol9yydnrTSBtrrI561 t+vA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ce16si10501121ejb.118.2019.11.11.12.22.12; Mon, 11 Nov 2019 12:22:12 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727814AbfKKUWH (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:07 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:35595 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727183AbfKKUWC (ORCPT ); Mon, 11 Nov 2019 15:22:02 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MhUHt-1hzcGS466d-00eYkO; Mon, 11 Nov 2019 21:16:48 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann , David Howells Subject: [PATCH 05/19] nfs: fscache: use timespec64 in inode auxdata Date: Mon, 11 Nov 2019 21:16:25 +0100 Message-Id: <20191111201639.2240623-6-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:R85AnppbPpRbASBN+qeQQkooI5x2H4Dl4b39qnIy/84P06Psutx 1UgpJewoA+26kC3RGAFzMl4tr537CnsdCYpMzZpqaquzBmda48YFiq1sp4JBpKVAm/6hG6B T+xjyEzQBA78TjjLjPu3UkZokiY0Cf7wC2JTPJNzmWhI28vtCMwD+TomKV1+kSoNGHlQIcf llNfgK00g8glajmY6FJtQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:2/4Mf+qV6d4=:n2dwiOweaOHyBIYwZrNd0B lW+2gm7GVpKURbp6YNWNUA8VTknHJ7ALNzPgpoTOVu3r7Wg9S4I2Px9rDC0QfF/SE6EldpIbo CJvNUVX4ltU9rErfId/9EY8HKSvEbnHWwVCcgoYgoy7DdMtkFEdFWxilBJ/c+l8gONahbmerQ NPrmWqfZaBHWY2ycepLz/G1MTFalmgp6VtSk1amgbw6cfSazCx8AcUTgP7clC8QxDpivYDRM6 5hDAlsr95+SXafhF3L+ZtPOYHciUXr/wd0TtVLLoueMzlW8J40VLmIei6wh9vIRFeoG7PTSyx om8Pt1ty7SX7kPnFDeyYDCSaRvtp2Th7OpO+M3/NWeY5XIsb5QhIn+o3dN3chTD+MVn0hRc+8 ycsqCJ4xnF2NqOZveetUawN2/rU++A8EOC9F/533Pg8Ir1E9mnjdEPRdibWtZZ2al+62ZeYZ1 t4Zg5Qkf1sanO5G9h5hs50/zPeEBQNTMPwULx+ZP1G2rXdGnxjwWbt9cFvsoopQCWC3OwGnhA n8PG53tvIf4XHMKpR3afjThw8ETdOcVTfvrvT5j2cUpHh8naebWzhaHxG0gcx5EL4ywuefUk1 w1oLs1mq+UMkGKyosBlEm42IR6lrxD892zI02mL7Z11qJv3WlVglJmFBQUUWnwxNeQKB9+tu7 mDYTgpW6KIE2/+MiHdC2zc8mp+57bcTONSgqdwte/taLeXcMtMUJBeyG/5adgslOhg20m+WA6 +UVgE5D+RV6VMrgvrNiK6Va91JEr2RFCCzUHq3c0GSD0davk251oOKxp+LbLeFau6k25cOiy1 QqkTYcHcnHIPNrWY3eF8pxvBR7bOs+mw7UrSQfKwSxMsGHsq6vSw+/t5Sg8i8YDO7R4S3fSr4 +mKI+XhmaPHChuLJPLhg== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org nfs currently behaves differently on 32-bit and 64-bit kernels regarding the on-disk format of nfs_fscache_inode_auxdata. That format should really be the same on any kernel, and we should avoid the 'timespec' type in order to remove that from the kernel later on. Using plain 'timespec64' would not be good here, since that includes implied padding and would possibly leak kernel stack data to the on-disk format on 32-bit architectures. struct __kernel_timespec would work as a replacement, but open-coding the two struct members in nfs_fscache_inode_auxdata makes it more obvious what's going on here, and keeps the current format for 64-bit architectures. Cc: David Howells Signed-off-by: Arnd Bergmann --- fs/nfs/fscache-index.c | 6 ++++-- fs/nfs/fscache.c | 18 ++++++++++++------ fs/nfs/fscache.h | 8 +++++--- 3 files changed, 21 insertions(+), 11 deletions(-) -- 2.20.0 diff --git a/fs/nfs/fscache-index.c b/fs/nfs/fscache-index.c index 15f271401dcc..573b1da9342c 100644 --- a/fs/nfs/fscache-index.c +++ b/fs/nfs/fscache-index.c @@ -84,8 +84,10 @@ enum fscache_checkaux nfs_fscache_inode_check_aux(void *cookie_netfs_data, return FSCACHE_CHECKAUX_OBSOLETE; memset(&auxdata, 0, sizeof(auxdata)); - auxdata.mtime = timespec64_to_timespec(nfsi->vfs_inode.i_mtime); - auxdata.ctime = timespec64_to_timespec(nfsi->vfs_inode.i_ctime); + auxdata.mtime_sec = nfsi->vfs_inode.i_mtime.tv_sec; + auxdata.mtime_nsec = nfsi->vfs_inode.i_mtime.tv_nsec; + auxdata.ctime_sec = nfsi->vfs_inode.i_ctime.tv_sec; + auxdata.ctime_nsec = nfsi->vfs_inode.i_ctime.tv_nsec; if (NFS_SERVER(&nfsi->vfs_inode)->nfs_client->rpc_ops->version == 4) auxdata.change_attr = inode_peek_iversion_raw(&nfsi->vfs_inode); diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c index 3800ab6f08fa..7def925d3af5 100644 --- a/fs/nfs/fscache.c +++ b/fs/nfs/fscache.c @@ -238,8 +238,10 @@ void nfs_fscache_init_inode(struct inode *inode) return; memset(&auxdata, 0, sizeof(auxdata)); - auxdata.mtime = timespec64_to_timespec(nfsi->vfs_inode.i_mtime); - auxdata.ctime = timespec64_to_timespec(nfsi->vfs_inode.i_ctime); + auxdata.mtime_sec = nfsi->vfs_inode.i_mtime.tv_sec; + auxdata.mtime_nsec = nfsi->vfs_inode.i_mtime.tv_nsec; + auxdata.ctime_sec = nfsi->vfs_inode.i_ctime.tv_sec; + auxdata.ctime_nsec = nfsi->vfs_inode.i_ctime.tv_nsec; if (NFS_SERVER(&nfsi->vfs_inode)->nfs_client->rpc_ops->version == 4) auxdata.change_attr = inode_peek_iversion_raw(&nfsi->vfs_inode); @@ -263,8 +265,10 @@ void nfs_fscache_clear_inode(struct inode *inode) dfprintk(FSCACHE, "NFS: clear cookie (0x%p/0x%p)\n", nfsi, cookie); memset(&auxdata, 0, sizeof(auxdata)); - auxdata.mtime = timespec64_to_timespec(nfsi->vfs_inode.i_mtime); - auxdata.ctime = timespec64_to_timespec(nfsi->vfs_inode.i_ctime); + auxdata.mtime_sec = nfsi->vfs_inode.i_mtime.tv_sec; + auxdata.mtime_nsec = nfsi->vfs_inode.i_mtime.tv_nsec; + auxdata.ctime_sec = nfsi->vfs_inode.i_ctime.tv_sec; + auxdata.ctime_nsec = nfsi->vfs_inode.i_ctime.tv_nsec; fscache_relinquish_cookie(cookie, &auxdata, false); nfsi->fscache = NULL; } @@ -305,8 +309,10 @@ void nfs_fscache_open_file(struct inode *inode, struct file *filp) return; memset(&auxdata, 0, sizeof(auxdata)); - auxdata.mtime = timespec64_to_timespec(nfsi->vfs_inode.i_mtime); - auxdata.ctime = timespec64_to_timespec(nfsi->vfs_inode.i_ctime); + auxdata.mtime_sec = nfsi->vfs_inode.i_mtime.tv_sec; + auxdata.mtime_nsec = nfsi->vfs_inode.i_mtime.tv_nsec; + auxdata.ctime_sec = nfsi->vfs_inode.i_ctime.tv_sec; + auxdata.ctime_nsec = nfsi->vfs_inode.i_ctime.tv_nsec; if (inode_is_open_for_write(inode)) { dfprintk(FSCACHE, "NFS: nfsi 0x%p disabling cache\n", nfsi); diff --git a/fs/nfs/fscache.h b/fs/nfs/fscache.h index ad041cfbf9ec..6754c8607230 100644 --- a/fs/nfs/fscache.h +++ b/fs/nfs/fscache.h @@ -62,9 +62,11 @@ struct nfs_fscache_key { * cache object. */ struct nfs_fscache_inode_auxdata { - struct timespec mtime; - struct timespec ctime; - u64 change_attr; + s64 mtime_sec; + s64 mtime_nsec; + s64 ctime_sec; + s64 ctime_nsec; + u64 change_attr; }; /* From patchwork Mon Nov 11 20:16:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179143 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7149065ilf; Mon, 11 Nov 2019 12:22:40 -0800 (PST) X-Google-Smtp-Source: APXvYqyfvOG8nsWWmBAID976yCtfUFmLzVR8wf3S4B67pdSz/x+2TZzA1/AumwmFR1/ZysVGFShi X-Received: by 2002:a50:ac2c:: with SMTP id v41mr28207347edc.11.1573503760202; Mon, 11 Nov 2019 12:22:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503760; cv=none; d=google.com; s=arc-20160816; b=nAfiXbkMx91lBMbs5O+ldn+R4E43JLGJxXOYBipMHBQ8+FjDl0YbFaWu0u3jrMelqm PxgPtTLlf/T3Pbw4E30D2hex0IOLmlazkV0VvB+ivLsG8IGZNJdJCpzTTIIHj4SIWoOl W9pVZ+Tz8z+YQUlK0tOfUeg9GA/svfJj3nTRRAreBkdHkF2CWUIcEGLx4sWfB9fHr4lE UG3X9OOrj0kMMQZYb8AzBqoOKmn+LkUyUXoanhUOdgtqEPFFFcaURNyZ390cr7LYpZAl gOOMTUjIpMax4V+3b7sIBvpp+GutWuUtPCN32WtKkbe214sYYqhyOcH+Ne9w15WYETdc DSFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iVcndDxjvG/tJEOL8Rb4N6Su2EeYc5I7ml+XHxQNeWI=; b=Quv5C3Kq97E4Qsk5OBBpHXy8IwSc+wm5K9qWJyCNx8PAdnPoks/6cxWyIhf0fJOLas LKdLOJFzSmahvA/maQnz4EKbBjqh+6h23NAIs4e5znV98z3plwOqGIT5pzbvA7IhF/8t KkLkbgxxwnbHBNennlePo+jSAYMLstsk1YvYFq8lSaptVG11AFZeNqB0vevXyIwMPCWH WdqGtdueoSpR++3HhDa7wdinWyMta0P5dlIEpQEzN/2e1kzZJ1oL9tRTESIROJrotLvz 7tUW8FEjDw1TZJR8lslElWeUN6e6/mJMukKuFimHz3M5BkDL2MW1sKVbM0CUn3EpfSZX CMNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e25si13119864ede.335.2019.11.11.12.22.40; Mon, 11 Nov 2019 12:22:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727899AbfKKUWd (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:33 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:45651 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727189AbfKKUWA (ORCPT ); Mon, 11 Nov 2019 15:22:00 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1N5mSj-1hoaiJ1FJj-017Gmq; Mon, 11 Nov 2019 21:16:48 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 06/19] nfs: remove timespec from xdr_encode_nfstime Date: Mon, 11 Nov 2019 21:16:26 +0100 Message-Id: <20191111201639.2240623-7-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:ulASBF1+CypKgZmdr6vqqtC9sCzj5wAM7ZBT75ycuyRcFZxDp04 /y7j6iTDtCT5FVA0XpdkisAIwMRr+P6BqY97mKbHKceiGRMlZOUT5cmroSnuPqoyMBgmxvr +S8shOyk/fEUiXb+v721FKElnQXwtuPK++YwwtdoGuyKpOEsQ2Mnczt75989eM7HtLCsYXp GlC1a//CTD/vBd63J7thg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:dpvDW4n6B/4=:YETI2cfdvFQ4xu3uLthOma RBzBrLw2HtpGAfMpjBV8DcKbFcyfkSImvkN77jooiPBUaLNmSu62YWqg8i1tkI1jITJ4nWf7w t+1Y6saqriu7gQ8OHyKfO4tO8xRcpZaT7EOazvPEF0KdCEMBp5fXbf5/dAiHJj84nDmWaQxHQ S2zoGTVGLFO1G8E+aUxX2Jy7splEvJZcTCjD8Kmwghrn6fflZKsBDJaoFjDbV/SlfbhtPI0+z FfwFssNeXXfyO7nLcY4OY6eVkcncTbXywqPY4R2DqtoNiMpZvDrNF2I63W8AjPERp5SY+o8vU 8n871FVoO2fFmbvk95wynoxqeoC6HvYd+fRGlaW11Er/x/4YJxofySBc5OygYufW0CtTzx0tH GWdaZc7O94Q+E572DdFA4euZzVw2IB3NqtHBD+Il2NWyqNK2GWIO9euDaeXV73F/21GU9SQWP JtZlYEDFppWs+A43vX9atqBsMElGDamJ3StMz8w2SCRWlxXuBM75eCxUaAiU+lqIRqLRwvKRy hBCw6oKwjGanafA/KSugVm7JWps4izDpCn60e4GRyhxrpEaUYlipua2URgr82rzQMrh5mrOY2 H5GxzrycciatLyQP3CxqcrFXwPqPlgS0xhJD0kzzeVT6G2BhELbXqykAHQiWqQgulzD3HK8Hp xDfsfJt5ozqdYRm+DjAsMajLQLSK/RY7cUd3WB84XQk97FEUZyExG31li9loFBo84qR3CDYPs iTlF5KTi2f4hovimeexveq/1m3Qm+AGp+OPFP7yKBshksBWmWgG1RUmJGiJbnUw7uEtSF0xLJ Kiv27Q7b5guyXjhw3/fvvwEaQHObozSLWNdVOuazmN2lAct+Y7aoqaXFsh8MkMb064Z4vTOo/ gvp7vjUPeOGqms10vsZA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For NFSv2 and NFSv3, timestamps are stored using 32-bit entities and overflow in y2038. For historic reasons we truncate the 64-bit timestamps by converting from a timespec64 to a timespec first. Remove this unnecessary conversion step and do the truncation in the final functions that take a timestamp. This is transparent to users, but avoids one of the last uses of 'timespec' and lets us remove it later. Signed-off-by: Arnd Bergmann --- fs/nfs/nfs2xdr.c | 31 +++++++++++++------------------ fs/nfs/nfs3xdr.c | 12 ++++-------- include/linux/nfs_xdr.h | 2 +- 3 files changed, 18 insertions(+), 27 deletions(-) -- 2.20.0 diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index d4e144712034..0b8399fee8f7 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c @@ -209,9 +209,9 @@ static int decode_fhandle(struct xdr_stream *xdr, struct nfs_fh *fh) * unsigned int useconds; * }; */ -static __be32 *xdr_encode_time(__be32 *p, const struct timespec *timep) +static __be32 *xdr_encode_time(__be32 *p, const struct timespec64 *timep) { - *p++ = cpu_to_be32(timep->tv_sec); + *p++ = cpu_to_be32((u32)timep->tv_sec); if (timep->tv_nsec != 0) *p++ = cpu_to_be32(timep->tv_nsec / NSEC_PER_USEC); else @@ -227,7 +227,7 @@ static __be32 *xdr_encode_time(__be32 *p, const struct timespec *timep) * Illustrated" by Brent Callaghan, Addison-Wesley, ISBN 0-201-32750-5. */ static __be32 *xdr_encode_current_server_time(__be32 *p, - const struct timespec *timep) + const struct timespec64 *timep) { *p++ = cpu_to_be32(timep->tv_sec); *p++ = cpu_to_be32(1000000); @@ -339,7 +339,6 @@ static __be32 *xdr_time_not_set(__be32 *p) static void encode_sattr(struct xdr_stream *xdr, const struct iattr *attr, struct user_namespace *userns) { - struct timespec ts; __be32 *p; p = xdr_reserve_space(xdr, NFS_sattr_sz << 2); @@ -361,21 +360,17 @@ static void encode_sattr(struct xdr_stream *xdr, const struct iattr *attr, else *p++ = cpu_to_be32(NFS2_SATTR_NOT_SET); - if (attr->ia_valid & ATTR_ATIME_SET) { - ts = timespec64_to_timespec(attr->ia_atime); - p = xdr_encode_time(p, &ts); - } else if (attr->ia_valid & ATTR_ATIME) { - ts = timespec64_to_timespec(attr->ia_atime); - p = xdr_encode_current_server_time(p, &ts); - } else + if (attr->ia_valid & ATTR_ATIME_SET) + p = xdr_encode_time(p, &attr->ia_atime); + else if (attr->ia_valid & ATTR_ATIME) + p = xdr_encode_current_server_time(p, &attr->ia_atime); + else p = xdr_time_not_set(p); - if (attr->ia_valid & ATTR_MTIME_SET) { - ts = timespec64_to_timespec(attr->ia_atime); - xdr_encode_time(p, &ts); - } else if (attr->ia_valid & ATTR_MTIME) { - ts = timespec64_to_timespec(attr->ia_mtime); - xdr_encode_current_server_time(p, &ts); - } else + if (attr->ia_valid & ATTR_MTIME_SET) + xdr_encode_time(p, &attr->ia_atime); + else if (attr->ia_valid & ATTR_MTIME) + xdr_encode_current_server_time(p, &attr->ia_mtime); + else xdr_time_not_set(p); } diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c index 2a16bbda3937..927eb680f161 100644 --- a/fs/nfs/nfs3xdr.c +++ b/fs/nfs/nfs3xdr.c @@ -456,9 +456,9 @@ static void zero_nfs_fh3(struct nfs_fh *fh) * uint32 nseconds; * }; */ -static __be32 *xdr_encode_nfstime3(__be32 *p, const struct timespec *timep) +static __be32 *xdr_encode_nfstime3(__be32 *p, const struct timespec64 *timep) { - *p++ = cpu_to_be32(timep->tv_sec); + *p++ = cpu_to_be32((u32)timep->tv_sec); *p++ = cpu_to_be32(timep->tv_nsec); return p; } @@ -533,7 +533,6 @@ static __be32 *xdr_decode_nfstime3(__be32 *p, struct timespec64 *timep) static void encode_sattr3(struct xdr_stream *xdr, const struct iattr *attr, struct user_namespace *userns) { - struct timespec ts; u32 nbytes; __be32 *p; @@ -583,10 +582,8 @@ static void encode_sattr3(struct xdr_stream *xdr, const struct iattr *attr, *p++ = xdr_zero; if (attr->ia_valid & ATTR_ATIME_SET) { - struct timespec ts; *p++ = xdr_two; - ts = timespec64_to_timespec(attr->ia_atime); - p = xdr_encode_nfstime3(p, &ts); + p = xdr_encode_nfstime3(p, &attr->ia_atime); } else if (attr->ia_valid & ATTR_ATIME) { *p++ = xdr_one; } else @@ -594,8 +591,7 @@ static void encode_sattr3(struct xdr_stream *xdr, const struct iattr *attr, if (attr->ia_valid & ATTR_MTIME_SET) { *p++ = xdr_two; - ts = timespec64_to_timespec(attr->ia_mtime); - xdr_encode_nfstime3(p, &ts); + xdr_encode_nfstime3(p, &attr->ia_mtime); } else if (attr->ia_valid & ATTR_MTIME) { *p = xdr_one; } else diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index db5c01001937..22bc6613474e 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -869,7 +869,7 @@ struct nfs3_sattrargs { struct nfs_fh * fh; struct iattr * sattr; unsigned int guard; - struct timespec guardtime; + struct timespec64 guardtime; }; struct nfs3_diropargs { From patchwork Mon Nov 11 20:16:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179144 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7149069ilf; Mon, 11 Nov 2019 12:22:40 -0800 (PST) X-Google-Smtp-Source: APXvYqzVipxzRfA+zXcp6FJ5LlC4e/hlqAhmqinZb3dELvFWr1FUtfqueFmAHSJsoesuMR1NAN2G X-Received: by 2002:a05:6402:4c5:: with SMTP id n5mr15161610edw.157.1573503760678; Mon, 11 Nov 2019 12:22:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503760; cv=none; d=google.com; s=arc-20160816; b=m9SnBENy4aWWs8xXsWuUj12fWnqEoBMiYdep1lcSdN5Y+ESemIrsPT+l7PthxMd1Kl aKgegzz8gUZ5Er6uNfx4ongBMyQ8utljKhxfqimybtXxGLgiSEjbOdF7a9B1/mtR5H27 xVAFRg+wUFATXdLlNiO6GtPeCcAFgtDl6pde76+9h77rIWRqgzkNaqRcV0y+nb+UdOud wQMN05SXAjjv1byhTTI0aT+VESWlgqCWpsa8YF4h2TCGnNzPex1RiaW7yRCq8oRnnEN/ b9M7Dnao68Ed0UYZf5CqomzYxwjE2a0EDrsfjL+6JSLYZ8BwXI2ovMq9yCNn9vw4Jc0g Q7kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=yBz3/+ei14FYNylFL9v1rRjcJqjlwyaOkSfPLx6SgaM=; b=ZeUEz0ppCodIhfsDhbwyLwah4obsN3mGexBGR1wIivbV5BXu7uLV5+4/ASoWzBFCLK HOMrItvJSs8cRvNbq0Wb49xm8F+Dc0Z+2m0a8zUwXXq4DefmWKDH31HSWXt0QOf3Teri XAet32J+2yt/yLjmYRnYRfqhZ00NP/m4o6/rvJIzZCKM4vzFZn7k/XdljAcLT33yo47M pGqMLHRJhggzGwqxn3kZymxFCYXYncDbcO0uBGWIP6cYOui3bZrz1rkjC6lULACxKYCN cEIlvU2YQyNn+DvhIISYri1O/f5satYW1OpUPgtkqegi8DIal/PHJ652bSt3vfz4JWkj iMqw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e25si13119864ede.335.2019.11.11.12.22.40; Mon, 11 Nov 2019 12:22:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727915AbfKKUWh (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:37 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:39699 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727341AbfKKUV7 (ORCPT ); Mon, 11 Nov 2019 15:21:59 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MtfVx-1hcRe32Xgl-00v9pY; Mon, 11 Nov 2019 21:16:48 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 07/19] nfs: encode nfsv4 timestamps as 64-bit Date: Mon, 11 Nov 2019 21:16:27 +0100 Message-Id: <20191111201639.2240623-8-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:dtnG94xvD5MjjNlVyWDb5eaSykSgG9mq8dv6e4ANjmnmD4CH84d +nhvBnRu5porjpw0HIFP8ug4gFRLEyIZPisAIuOq9ZMj/rNA+1OYaj1HYy7+4eGlc6Pf9qI 1kNf+O/muQQjPnMZzNDYlMHN4bLVVU2nz/bFzylh1TfhzZyPwf7V+nbOAGjRQj5xXDRrYb+ Sx4obN97lC+jV8jSmnboQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:Xb2NUiu3Utc=:xVTipUWlDL+FBIPGUFolAo seAacejDCYMT+ZhqgGDEceUE+W57sAZZKPKMykwNARU24vZY8ZC1FsBv4cUi2Is3n8hux0ixs odeh1g2FdZbV8pGZdolOF4J0Ca4eDb4gvuqYO7MMVue9dUEYhfQLvcPJohRnhjTKr5r7i7it4 vpY/saUXnzQpJ8TuILGyE7W3f5JAJQyRAdHErgEys3Ukje4EDUiZcf4Cip1dL6LOP1n/zXSQn c3xMNghoxiBhrl4lxLsBYc8019hvCyciYZhNT4QtBP1ZqrKyIl17sVLTA4NO/FzX7j9r50w6n 8lZvs0ZzOt6kLgyCvKHo1LcHQcxVZ7p+gKg0hcTe960/9Bza+2IPYXdscB0KhSFsJ1JKXShMN +n4TPoC7t2+PVUhuI0+FcKHFLGkfoRLUWqZeaSQNceNCgANuQnaTUyAgE2aGJmEJXfGY4NgBM rI7ovIAan2TYM0eVPUmdrR/D3g4f1GBZU2LFx8LD2hcyGkYHYJyZLyd3/fFNDEqQdZslDZXRO Mj+Vw7jyuGyCWb5SmAWj+w3iVwLdsJB1Mk07JhwHa/3E7MXMh24XHSuBXEY34xXv4gat6oPP9 QVK4Dk791/MfJX+ibE5RC13IOu15KCd2qd1vEuVrXJUcGUSjworyO8OFTJR7asIJj3mRksWAF AQgnbJkm0BeAACUg5/Tkn6db2IS4iWmMax4LqJJ4VIV7Vxgo4USdfFcYSd46Ym3lzhXhewFiW W7kxgSPPzKkH67nFMnnlhkhMgyW9c89M5VK/zDzJrS8e9PloSSGfbKUJC0tl0su9pi5AT463L N8nz6E+JwS1f9nT9SgPx7wZK2YuGgpriSe9fLj69YZq4f2yL3Xs5H2ltYZfHBK1k2wkwdkXCl UTwMF3mE7po1hOkWbAdA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 32-bit architectures, xdr_encode_nfstime4() needlessly truncates timestamps to a 32-bit value in the range between year 1902 and 2038. Change it to use 'struct timespec64' to allow the entire range of values supported by the server. Signed-off-by: Arnd Bergmann --- fs/nfs/nfs4xdr.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) -- 2.20.0 diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index c917fb24c56f..a5737f0bac4d 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -1059,9 +1059,9 @@ static void encode_nfs4_verifier(struct xdr_stream *xdr, const nfs4_verifier *ve } static __be32 * -xdr_encode_nfstime4(__be32 *p, const struct timespec *t) +xdr_encode_nfstime4(__be32 *p, const struct timespec64 *t) { - p = xdr_encode_hyper(p, (__s64)t->tv_sec); + p = xdr_encode_hyper(p, t->tv_sec); *p++ = cpu_to_be32(t->tv_nsec); return p; } @@ -1072,7 +1072,6 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const struct nfs_server *server, const uint32_t attrmask[]) { - struct timespec ts; char owner_name[IDMAP_NAMESZ]; char owner_group[IDMAP_NAMESZ]; int owner_namelen = 0; @@ -1161,16 +1160,14 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, if (bmval[1] & FATTR4_WORD1_TIME_ACCESS_SET) { if (iap->ia_valid & ATTR_ATIME_SET) { *p++ = cpu_to_be32(NFS4_SET_TO_CLIENT_TIME); - ts = timespec64_to_timespec(iap->ia_atime); - p = xdr_encode_nfstime4(p, &ts); + p = xdr_encode_nfstime4(p, &iap->ia_atime); } else *p++ = cpu_to_be32(NFS4_SET_TO_SERVER_TIME); } if (bmval[1] & FATTR4_WORD1_TIME_MODIFY_SET) { if (iap->ia_valid & ATTR_MTIME_SET) { *p++ = cpu_to_be32(NFS4_SET_TO_CLIENT_TIME); - ts = timespec64_to_timespec(iap->ia_mtime); - p = xdr_encode_nfstime4(p, &ts); + p = xdr_encode_nfstime4(p, &iap->ia_mtime); } else *p++ = cpu_to_be32(NFS4_SET_TO_SERVER_TIME); } From patchwork Mon Nov 11 20:16:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179127 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7142663ilf; Mon, 11 Nov 2019 12:17:14 -0800 (PST) X-Google-Smtp-Source: APXvYqww9cY3wvEOZ9PRG88BAn76jIGKxOUenlmDz68B7276BSGrX/vzx0zHjLSz4k6/eQ/2N792 X-Received: by 2002:a05:6402:148d:: with SMTP id e13mr21528698edv.290.1573503434497; Mon, 11 Nov 2019 12:17:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503434; cv=none; d=google.com; s=arc-20160816; b=hSnpIZUMvx1ej7J8WAgTYH3RVzFJuZHh4xjIiJrfLMtP0+xUhp2YJtqXBF3Ur0HRU1 m0F0TvaunHS/e0F1o9tm77JfRoTUSuSmsRE1SegjUH9H3GTkIQtEy/rBnJ30E67TfeeJ Q15mH7jCwaMBSv4oGTYgvrN3SOLXATjLKrxVSHw+RAkewtdX4tdq5c9kD2nyOfE1OSv1 X3ZCOGYr5N2LjfpCrgP2xieOJ9rWcXEwjuev9gIoimX8LA2gAQPhhoDu/xh97LLhXB1q dQe6g53KP4JnongaRDxWeKa9EB6Bur5iD9IkzN67KNoOgtiiWdnudStMbu5zl5VmguQc orOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=64Bm/GXeQauWOzYXjT+rCOe22msHa5OYRWJSbHAj5lk=; b=W3Mnc1dijUADIiWiqB6E6ltJSfpSeSRWzAWEpqdh5XpZ+UtmpEJbwwysPH7+entndS y6ZeeV8JuZYAwKTwVajB1Sn+rv9IlF60GyrtvQhSJOSE1Ep30BSxbDkrFS2yfVrITYiK eDnfe5sEVTqieAMlyPHmnnpy47G/w7ikBb438aW0rYnNvNW2g0R0SvBjGAzrNmrwL5vY TXA9M6b0VDCDtj7oQjI4ceJKJrwag71Q4Ow/m55X4dplol69Dp78WUEm5KKATORXV6nn NvcwYXZeiV1yGWM4/5Nfir33umqcg7w+xhrsM5Wak7OTpTYpMWN4tHJHeY0MNQXcFsMC WmhQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f12si13161486edc.1.2019.11.11.12.17.14; Mon, 11 Nov 2019 12:17:14 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727614AbfKKURI (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:08 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:35251 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727103AbfKKURD (ORCPT ); Mon, 11 Nov 2019 15:17:03 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MXoxG-1iOksW3uyi-00YDU3; Mon, 11 Nov 2019 21:16:49 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 08/19] nfsd: use ktime_get_seconds() for timestamps Date: Mon, 11 Nov 2019 21:16:28 +0100 Message-Id: <20191111201639.2240623-9-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:prYR0ybWZtYGIQZYrlV+P2u6nCi8TfYizkBHaraboVlw4qnbxig LQKMg4gkL6vA2s1NikusRiqqI1Bm3OJMCVQrHmiRdY33vKAPBSyBCBpoYNX09gkc2Gbejkw ddVEJ7y9RckGfWslXKbXu8O9Uc0NAxW1C97J9iekWWr5QEcA/bmNwrwMb43PJTBZgPhdTjZ d9ZmLBmTnKXMJseMexgHQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:pIvNkoEd/l4=:HQOWQXYKVwj2Av0ucDw3uJ gyl0crXndujLUH0aGyy6jX2F875PqFZIjKrmP8pwRiawQi0YLcZHsWq3f58TZWzalfob+XAnn SK8zcqmmD/t/A3VVrQYN0cADSqaNRMA5TG7zT9zI0KOHAuLWB4Er0qgx7aYy0jrM+KBDUqhJK 5Fbn5lUQuT46mkh0hkk/7rE8UEgiEwsRl3t+SeJxI7uvQssrdQuQ07SSvoNUwGeCwlSt7c2sm SsPpkPW67qOkg0rOESXyfsAWr3AIFyQ1j80Uu+9YH3GoI/DdwAKh8OQSfENGAaKzD29od0Phy axtrQv3uYapyNkaCl7VQZK/AAfzddTUhis5THTkazM5KeNCG90BTTFF9DEGXCBi62KTDzBpsG 2XyXLqCetAuOxTMuT+CdBSqf3K+bwyF0XRKvbDPtOMG7jVbeqZhj9wN0TyKZXcSlouhk+JSWR qHlPFHgvDweA6NonMgYZAsKOcWha0ZWg6pWgDvxmxEM+Sd6qbNrwS7Cntdj6BnMSWsUA7a3Vw Nq7JplT2GLVv5r8VmkW4aVwiI+SXwt7NYyqx/7ZlvjZfQZuKLDYtVAWnmq785+Ab7g/JlwOb1 mXgOtQzwlf42WoewNuvlARh1wmnh04b2/kKeLqb6AN+6afwYtHN4wZBd7pLEnN0/CMcGPPzVF tsd8XTbip8+sokjx+D5M4DGL0U1JuJ8PjRy07/V39bBNFg/p5PnvKhKT8JuioBOS0nO1/w9KG mE06b8MDMVBLj8jaQD/vRPSIThibBKmVh/g40f6ikaXxWgGTEuHYTHa84lyEs5S6oP6FzGcHK GBUFoQTS0IDSN9LCwpVTQswvG1VaW32lyREB5/+IguvViGvgbr5OikajuDLcuoXTtuO1jDgNG DpQhiP63FLJgQbAX8L3g== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The delegation logic in nfsd uses the somewhat inefficient seconds_since_boot() function to record time intervals. Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs4state.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index c65aeaa812d4..a20795b5053c 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -806,7 +806,7 @@ static void nfs4_free_deleg(struct nfs4_stid *stid) static DEFINE_SPINLOCK(blocked_delegations_lock); static struct bloom_pair { int entries, old_entries; - time_t swap_time; + time64_t swap_time; int new; /* index into 'set' */ DECLARE_BITMAP(set[2], 256); } blocked_delegations; @@ -818,15 +818,15 @@ static int delegation_blocked(struct knfsd_fh *fh) if (bd->entries == 0) return 0; - if (seconds_since_boot() - bd->swap_time > 30) { + if (ktime_get_seconds() - bd->swap_time > 30) { spin_lock(&blocked_delegations_lock); - if (seconds_since_boot() - bd->swap_time > 30) { + if (ktime_get_seconds() - bd->swap_time > 30) { bd->entries -= bd->old_entries; bd->old_entries = bd->entries; memset(bd->set[bd->new], 0, sizeof(bd->set[0])); bd->new = 1-bd->new; - bd->swap_time = seconds_since_boot(); + bd->swap_time = ktime_get_seconds(); } spin_unlock(&blocked_delegations_lock); } @@ -856,7 +856,7 @@ static void block_delegations(struct knfsd_fh *fh) __set_bit((hash>>8)&255, bd->set[bd->new]); __set_bit((hash>>16)&255, bd->set[bd->new]); if (bd->entries == 0) - bd->swap_time = seconds_since_boot(); + bd->swap_time = ktime_get_seconds(); bd->entries += 1; spin_unlock(&blocked_delegations_lock); } From patchwork Mon Nov 11 20:16:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179138 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7148672ilf; Mon, 11 Nov 2019 12:22:20 -0800 (PST) X-Google-Smtp-Source: APXvYqyrbypPSLFRhBnklXAMHpEIOeRTJYphKPMvNJjmfiRCfjiBwxKtaJD7qwFU1qzNBP//BEYq X-Received: by 2002:aa7:dbd4:: with SMTP id v20mr29247060edt.58.1573503739987; Mon, 11 Nov 2019 12:22:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503739; cv=none; d=google.com; s=arc-20160816; b=DMPNnbTTci4J7VoI3GvwnMAZs0w9yseVCzmOaFTev2Jl1esFuz5iNBAhGHL+dFSZtV WkZQbVHF+VIAFjxJAwuSm/u7fjhPRuE2ArQOyr0+EOYElhsBqb3FFTx8dCphRxRjyBm9 v264LD6dPy1gGUN8i3DEWmF0Ufa4N4F6grIYOjoUEXA6DD8dIzK7jglFbBdH8gBxVAJ2 8Kp8aajx24+TUMIuEy8XVJ3td1svbgiM9kQeszPhfYpqT4YMmxgnytIAZHjyxOI2ioVd FaO4uBxDpHhHo4MdAndxqYrKpgllLlwddgQDYlgHDh1DQ8WzD98AtjZnNwyV6NFeYuQc cvlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=E9B5uqlBh2dd7G4ZTHSFWVSGbWlmUG/MQA1a8VQG+8M=; b=dNv6cDFSpSV3LI/zD4CH0mMjyzog/InT3MVMO8BSlqRpYpzYsFSvWzC173uaHJ1oX2 HHoAJmPnEkBJlXAn/2kPdeC9NwphGw2j9YYxYE95rP1LQ+iX0L9DIy9k8OHneD16JYRJ bEdq75exku+INry2MDjZIXhrgM25b83XaOoaob/wSPMS3xMxRPGCqysIAxyWGPwVJljT I6FOE2NtNEwExmlkpP+ALOpr0V/TXF0Iqn8X4svT/LkGD7HAooTcQUI2nkZIO2pv931P QxzlZU7XGCRMzcqz01sBnHTWB7RFsPbFuR+BWqDyMXeoZSnzAIMWP+g7zB9pHPPCGZtP XLxQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c57si11779371edc.386.2019.11.11.12.22.19; Mon, 11 Nov 2019 12:22:19 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727729AbfKKUWD (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:03 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:34829 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727483AbfKKUWA (ORCPT ); Mon, 11 Nov 2019 15:22:00 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1Mw9Hm-1heMNx137E-00s7xT; Mon, 11 Nov 2019 21:16:49 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 09/19] nfsd: print 64-bit timestamps in client_info_show Date: Mon, 11 Nov 2019 21:16:29 +0100 Message-Id: <20191111201639.2240623-10-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:seMJ42v1081bEPvwevwNuzbDoR7i4rBfE32rXv/gDtp4js7XnsP 3mzBJKVOUnKQzd/TGe/g65oEGys9jaUxG0wIzDBcSa+JTTscwYceqlTvZUCW+8c4PrwGNvV CdeUvJniXZuKdka9Ghw1sJqdwNPM9MM6rEo3zek+pKcuyxqshdiOXcVNYhowEWAWp7ReExJ BJBq5/czH5wa1umRKjtQA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:K1X4+M5ldbg=:eF0eHB+aTr06giF3z8cGgN 84/NB54bm3WbUg9w+tbttFcqp+6u0p859BIRQYodo/PbBtjm0ALNVgTft7nIEcmQnSpVvl2Oa urm78C7A5dVRl2ykLyxoFaKSwmG7vYFiHeioxVIFwZpduF830CAC9ddzCzClpLCP9H+b7KUoN 9BR3HTN2ddA5hPwcuzU1fTNgU0zI0RNtEP+VKaplIrh6o6PC1A8qm0qIpQqoM8gj56/qz4zeW DhhG0fiSpc47p4ca3LOjRI85/OjvA+VuRcR+4IxAHzxo90TuTG/QpGhgi80uhQDOaU8GChksw J1+KbaIQOw4JbA6GuhKtwJEcD6Xve9dcUcPyBfhvTPNwuxyay0Oyd+fS7K82oBhzR0J93uX9W H3ZjGuFA6VsnCPOeHRfCQ2JEou/IMvZeQUWeIP1VKASfYm/pylNTzxZwv2IobYj7jx1R33v0C wApZ3sF4ub3LhOD9i1LNq6RzdUwWryOkXLUFKUgL6zflcBNLTq4kkHcRUfZU+qQm1JyeJ/Lh5 Ouf0LvGvtZh0xwCSrBcMwPeXaBS2uJGMjk6H68HiC+nQrRVP51AhOj8fY/EIwcwhV1HZIfnhF J6pz3Eb9StxeSOYUgKHBHuSmi4wjFkI5sTqLe5m0dAKrsrlgkGcffD0LLXkZs4+ZRxWWf3ZgW eY+yZ0K8rGTFp4sMdHxns6YG1G+cYk+sQR37/sbotvq6Y9JfbA2ZOwQ7p9BBIwnYjtemIlmbD 9FfP2pk2Ml+HEY4IUzGGE9izUggir7KspodBvNZWol1V1Z8Iwo+aai9TGojjaCIZxvaFlxrUp /m7adYvW9mQS8xbITdpN+cH38UFRMQK2O644oT4upRfXcRM8r4FR5DA4uJK6Nh5EwekCwg22J zSUwzSRZPyzeVhMzJdQQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The nii_time field gets truncated to 'time_t' on 32-bit architectures before printing. Remove the use of 'struct timespec' to product the correct output beyond 2038. Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs4state.c | 5 ++--- fs/nfsd/state.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index a20795b5053c..2333924d7c6b 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -2292,7 +2292,7 @@ static int client_info_show(struct seq_file *m, void *v) clp->cl_nii_domain.len); seq_printf(m, "\nImplementation name: "); seq_quote_mem(m, clp->cl_nii_name.data, clp->cl_nii_name.len); - seq_printf(m, "\nImplementation time: [%ld, %ld]\n", + seq_printf(m, "\nImplementation time: [%lld, %ld]\n", clp->cl_nii_time.tv_sec, clp->cl_nii_time.tv_nsec); } drop_client(clp); @@ -2946,8 +2946,7 @@ static __be32 copy_impl_id(struct nfs4_client *clp, xdr_netobj_dup(&clp->cl_nii_name, &exid->nii_name, GFP_KERNEL); if (!clp->cl_nii_name.data) return nfserr_jukebox; - clp->cl_nii_time.tv_sec = exid->nii_time.tv_sec; - clp->cl_nii_time.tv_nsec = exid->nii_time.tv_nsec; + clp->cl_nii_time = exid->nii_time; return 0; } diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index 46f56afb6cb8..ce32ba445343 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h @@ -320,7 +320,7 @@ struct nfs4_client { /* NFSv4.1 client implementation id: */ struct xdr_netobj cl_nii_domain; struct xdr_netobj cl_nii_name; - struct timespec cl_nii_time; + struct timespec64 cl_nii_time; /* for v4.0 and v4.1 callbacks: */ struct nfs4_cb_conn cl_cb_conn; From patchwork Mon Nov 11 20:16:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179141 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7148839ilf; Mon, 11 Nov 2019 12:22:28 -0800 (PST) X-Google-Smtp-Source: APXvYqy9hBtlOnvlKlyc0Grs41Z8q3dXylHpnSSgCQKIjHrMknw0fHE6I0ISPI7iLQzaeTSVRVhh X-Received: by 2002:a05:6402:213:: with SMTP id t19mr28978980edv.7.1573503748423; Mon, 11 Nov 2019 12:22:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503748; cv=none; d=google.com; s=arc-20160816; b=NLxDy10zO+TX95X6tRZlxWImHVJEC2nzBqt4YIy1ly1b/+XxKyfOKZnCrlQyiVi+w6 avAsMmHCZP8P7Yceyl0QThkfWdLOgO2Z+rgjXjhtmS3vW5hKoTVZd0E/vPkPxlOxJzFP paErQ91OjS1EsC7dBl5dBAg6Hnie74mkAgvrpery2Z8f7nn/HASGicEgJxqbkBOPMBGc s/5qHaO72ll/L0uRPRhYtAVRunIiNu7210Zey2cX0Utzedlie1IksNl1GFT39r0HzIYh yurREf5wI3cljdmnXPsiMD8Ah/T/5eH80GVx9UR5pZQB5J3cQj2r7dMCFHPy2jeWkToY YaEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=k9bF0TSMGutNvejbClUz6w4ViNI9w3PIxJb2jkY1hk0=; b=PJMBncte5wdRcY0/ChQ9r4iKsycQOGx8blAFvZbFvBnLOruWaas+Jii4iCQw92QeLw OqOA/rDQZNErbNrq8qO8wxS4z5t6m/NptSEwkOCwO7vQAQVyC0Ih0aN+bkVi0t4fn9ar pLIrrIXcSxiBSahRjt8epFsUBQcph08W4+wMqjhW6W5z9pNjrVR/Cyp7CmUUdQB+1r7w usd6qJVcyMHBjQS0lZSrZ+gOBz37XfEjomHq3cud5UBZ7gKSkALXBIYindZCDj9uo5Tf nms8GquAYfFHSGP1xd3ia1V67UDggflxNh9puF4uqEsHIXzt2NHdoan5TnpCq/8JO5gl rOlw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bs2si10363532edb.354.2019.11.11.12.22.28; Mon, 11 Nov 2019 12:22:28 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727879AbfKKUW0 (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:26 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:42093 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726951AbfKKUWB (ORCPT ); Mon, 11 Nov 2019 15:22:01 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MWRe1-1iNvX02Mbz-00Xvy8; Mon, 11 Nov 2019 21:16:49 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 10/19] nfsd: handle nfs3 timestamps as unsigned Date: Mon, 11 Nov 2019 21:16:30 +0100 Message-Id: <20191111201639.2240623-11-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:rPopYro8ot3vLlYHqs08jMA1iOzd8VcnAKyD2rY2jki6oPrgMuC NMGPjcrqJPo4F7Hv4mWpkXL7P7rZ0uqLZqthPPFHrqkaJCPF4kUxwpgsd0Q90ggeVevdXQ0 Qu4IxpZiHxBnIELSSTw4S9YFddZrgmJte3CIth/TX06xSZuEZvB80mQTjUBfIQHX+bIH0b4 FmP6G4mdZrSkaB2LDS/Fw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:eh3FrkVqo3Y=:1LVmj81qB3Y4wqPvxpklk1 L/pfT10ZZt30XKSVX63ABfJ99hxhIrRa/nBLh/2yvzZBOuQPzLBsY4uRVZ5/KkPOOj3sgVpgW ReVeLk1YeDguLJIZLf1HTds0zbIqLz4a7Lqq6PgNKZlymipsDS6TNRAtqtqdiAwM8j/4BDaO4 qLitjwO1/pnuY2qY21fwSvkEQAiBQen1bSfCeM8nDhK0R0XAogya6RrCzf0L+VfhUcoPT5f6+ jI2gPjVDKDcDGex1Hq2xlIEtQDiIew1+mcbw938FihpHfB5w0ZAUvHSZ/WDcz8RZeKwmWxGWi W19Ai7s47/FRuwTzwaBwpmS9p01jNRSOt0a+Y4idT+HFi2jEHOT+GZyqefAlwxIFk5uSP8SAN VUw9/mMmFTub4ijxyxt5Xf8Cg3T+ESfC+FrA1ME79guspX4TwnfbzJvWGH1hfbw84nc3Ao00K Hq97kdktbmiLmJFj+01RcEWRgVmyC/FXJRLmR4He6gymExyQM4f4Z5EBGYuZROt85gSnfrklz Yj8gH6bc9uYnI+KRvv+R7K83zuQm6Xy3S47ihJR+LjJi+eJMiVeoOMkHHR5aSqPwFFnrJHo1e tYrTDGgpW6PzfdZgrPEb1EZqM10yNixAZJrBoQen25mTbFIEqkWHJVXKS3XO/KHik36/dbUeG T9Zz832RLTeNft4G3v8uhi0s2Fk+zKKmx+yRZnjKec4B7YobktNLiU+mqStfLXvrUqbGdOZgr PFrjdwqU/B2Z9vA77eOzpdARrHb3FlkgtruZTKWqRBAt3EJG22H8uCgeFE4m1HvyxIlX+S7yd fYkndMsUQJASnkzX03cGns6BHc9Zzr9ZVr7YJtptAmMQw6TU6ivKkR1SyXyHZUubu05VaYW7b ERkM881HLqzHq4S9EZ7Q== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The decode_time3 function behaves differently on 32-bit and 64-bit architectures: on the former, a 32-bit timestamp gets converted into an signed number and then into a timestamp between 1902 and 2038, while on the latter it is interpreted as unsigned in the range 1970-2106. Change all the remaining 'timespec' in nfsd to 'timespec64' to make the behavior the same, and use the current interpretation of the dominant 64-bit architectures. Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs3xdr.c | 20 ++++++++------------ fs/nfsd/nfsfh.h | 4 ++-- 2 files changed, 10 insertions(+), 14 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c index 86e5658651f1..0ace5ae0775c 100644 --- a/fs/nfsd/nfs3xdr.c +++ b/fs/nfsd/nfs3xdr.c @@ -32,14 +32,14 @@ static u32 nfs3_ftypes[] = { * XDR functions for basic NFS types */ static __be32 * -encode_time3(__be32 *p, struct timespec *time) +encode_time3(__be32 *p, struct timespec64 *time) { *p++ = htonl((u32) time->tv_sec); *p++ = htonl(time->tv_nsec); return p; } static __be32 * -decode_time3(__be32 *p, struct timespec *time) +decode_time3(__be32 *p, struct timespec64 *time) { time->tv_sec = ntohl(*p++); time->tv_nsec = ntohl(*p++); @@ -167,7 +167,6 @@ encode_fattr3(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat) { struct user_namespace *userns = nfsd_user_namespace(rqstp); - struct timespec ts; *p++ = htonl(nfs3_ftypes[(stat->mode & S_IFMT) >> 12]); *p++ = htonl((u32) (stat->mode & S_IALLUGO)); *p++ = htonl((u32) stat->nlink); @@ -183,12 +182,9 @@ encode_fattr3(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, *p++ = htonl((u32) MINOR(stat->rdev)); p = encode_fsid(p, fhp); p = xdr_encode_hyper(p, stat->ino); - ts = timespec64_to_timespec(stat->atime); - p = encode_time3(p, &ts); - ts = timespec64_to_timespec(stat->mtime); - p = encode_time3(p, &ts); - ts = timespec64_to_timespec(stat->ctime); - p = encode_time3(p, &ts); + p = encode_time3(p, &stat->atime); + p = encode_time3(p, &stat->mtime); + p = encode_time3(p, &stat->ctime); return p; } @@ -277,8 +273,8 @@ void fill_pre_wcc(struct svc_fh *fhp) stat.size = inode->i_size; } - fhp->fh_pre_mtime = timespec64_to_timespec(stat.mtime); - fhp->fh_pre_ctime = timespec64_to_timespec(stat.ctime); + fhp->fh_pre_mtime = stat.mtime; + fhp->fh_pre_ctime = stat.ctime; fhp->fh_pre_size = stat.size; fhp->fh_pre_change = nfsd4_change_attribute(&stat, inode); fhp->fh_pre_saved = true; @@ -330,7 +326,7 @@ nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p) p = decode_sattr3(p, &args->attrs, nfsd_user_namespace(rqstp)); if ((args->check_guard = ntohl(*p++)) != 0) { - struct timespec time; + struct timespec64 time; p = decode_time3(p, &time); args->guardtime = time.tv_sec; } diff --git a/fs/nfsd/nfsfh.h b/fs/nfsd/nfsfh.h index 755e256a9103..495540a248a1 100644 --- a/fs/nfsd/nfsfh.h +++ b/fs/nfsd/nfsfh.h @@ -42,8 +42,8 @@ typedef struct svc_fh { /* Pre-op attributes saved during fh_lock */ __u64 fh_pre_size; /* size before operation */ - struct timespec fh_pre_mtime; /* mtime before oper */ - struct timespec fh_pre_ctime; /* ctime before oper */ + struct timespec64 fh_pre_mtime; /* mtime before oper */ + struct timespec64 fh_pre_ctime; /* ctime before oper */ /* * pre-op nfsv4 change attr: note must check IS_I_VERSION(inode) * to find out if it is valid. From patchwork Mon Nov 11 20:16:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179126 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7142491ilf; Mon, 11 Nov 2019 12:17:06 -0800 (PST) X-Google-Smtp-Source: APXvYqzLWXqQ1ffPgbSauCvMaN8/nh+srqgp2XDxQpIJGBnKhziQlgwZNuDysSHkJP9x28EkdhIk X-Received: by 2002:a50:9269:: with SMTP id j38mr28309954eda.5.1573503426082; Mon, 11 Nov 2019 12:17:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503426; cv=none; d=google.com; s=arc-20160816; b=tw/I1Q4laz5SztlsIZIZkjtYSDs22Dqf+imHq7pEVDdHcAkSTRq7cBAIfxxr1l7AYq n541ceEwGhS9YU5pRTSTH5oT15HzAtCVOpGnmG54HU55lCPB4912ZCvA61c38V+x7uio OwqMk3QpQZxYXJOIkf7c6fd5PS5Jdrb5jvSvCnJZgDflRwqpr1udPt/vVMdwNhXBygSj M5o4zOX5zf68N+CvPZWpJVWC7soe4BcaVSCQ1TVijjBJ7yVFXv2LhJR3/sJ/O+lyTOkN Wloz1sNDS1AQvHACT6iy0I6imR2CJ0xkbH5hqD7ile36BiRlsY6tkszEBFnZ1X4GDDmR IohQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=9nQG8zOdve03HsrrawcW1oUNDZyr3hrL/dxUcYcW2E0=; b=ZthAarThqpbrpEcylT2vgL4Q1/RBipiwyljrMDKVXxwWvj1mo0qqnAor0mDhhMrQKW YGcBe2hehKUfkrEMQM8VSgJY4+ENPpnuwPlliA3U1A8g07ZhckSMKlEVXMqgVKQtFLBR wc878HfbLB0W0oBEGwfmdwjfSD6HPoUF1bnWDMGs5c3pQwQUMxEIClfhGIXo9rayuMyW rGnIxmG6bVuGAADmTlZ4DAjIbsoOWI3iWBjTI0TF6Cc0zAoUzrqeXzhjKsFE6IpvHfsZ oLdB7FW7k6JzDYrEv9yk7Fu0QXjPevcCBqRTnneRZJ5hmGYVD0rWjD9RyU33BtOfp/Jp 9Lrw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h26si10159141ejy.355.2019.11.11.12.17.05; Mon, 11 Nov 2019 12:17:06 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727537AbfKKURE (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:04 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:47321 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727049AbfKKURC (ORCPT ); Mon, 11 Nov 2019 15:17:02 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MDhth-1ieTNm3gZT-00AmNk; Mon, 11 Nov 2019 21:16:50 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 11/19] nfsd: use timespec64 in encode_time_delta Date: Mon, 11 Nov 2019 21:16:31 +0100 Message-Id: <20191111201639.2240623-12-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:zBEHU7LOQ8BR+RvLscuFxq5Q8uP7KpIKmRblB/0JRwtkA5oax2n vTwmcYsK8Belkc2C9pPRkpxv9FO+mMRz4UGcaVU1rtmz641TyQdeWBICy8LAW2WMHOUZay2 GwlOYDJzKFtZm7mAL5WBUfqjdYDxR55pYrhyv4E8Hd0fs6UiP21IceExVdpjEE44XEV02An hNZoR15EcnN6SPGGexKFw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:+4sYNMt7F9Q=:M3AyrELI81yH0KXCinQXj1 izGRACW/Q+P5BQUA/EHio1Y0Qx5vawQ4Ti0Hsahd/my+mlXpfH7XisKxbIDUbEW3cpMMT3wuc 7tTX1zrpkLfYXAyTVdYFKuYz02QN3fgFtfNsOLzKqxB3JEfsy4V/ihvWinx+mascGq7FyuxkP IqfE2VSPFUJ/dIgVlR4tYeieXQ9E0UMu8iVrGAge/rR2HJbQbJOPBXPsKTkdwEoFpRjI1ZydA o+DllKKIYDaxAsz86d0VtZgjDXEyfnkbCbMDDiATRR1ZNBrwv/d4GpcT6OLXbZtzi8wcMv2rh TKpvekjvUJ4OlF2HrwoRxcCV+JF4VPYz7pjgZKvxHTtnbMnrS1z83tPJGjmwIE9/eI+Xfp4Ca sM9oesbDfuyzqVY0VH65JtBvdlKiHJQ0mIW0LRgTZWymcMoJqfdcOghXaI1iLJYHX1/ZODNsW P/B26nui60xr3mIUHJHOMBrGAEnsUuFrGbZYek+pN7bzUi1zX+EDY8yzl4ix6eB9ecU3p/Y1J Zokb7/hFED6sYkosupilI7GHPO36mX6G5EZrCWu18DvQcon9qm9EH+khNLIuiP6XpNdHVs4xz aSKkEMHpg8YDAt2iCuPZIOIqfNQ7Mv0oThau/CpKEeKAH3QGkVLsZEyooQD06S4W731YGxbp/ LJWZnI25MxEH0SUqa29hNl4Oa8BbR2jbgSmrxqIZe05b/QUbqH/ynTQN0dEmGDFNQ5bHdxZ38 Iq0tOOGp5a7VlL0A7d/A+Jf+3m5+V3tUxAmkhLv8S2jJ9bGQSVDoviyVUJozmhExYi7KLiE+b QHzMENIaZV7xDkQkCQ6q1gXSYZlV5WjW4Il+PjgzDTtt96dhvnXyd1dSGylKI+95DkpmJ1C1B r1KCi0NYqNlg8KpXnXXA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The values in encode_time_delta are always small and don't overflow the range of 'struct timespec', so changing it has no effect. Change it to timespec64 as a prerequisite for removing the timespec definition later. Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs4xdr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 533d0fc3c96b..d8234d9e89fe 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -2024,11 +2024,11 @@ static __be32 *encode_change(__be32 *p, struct kstat *stat, struct inode *inode, */ static __be32 *encode_time_delta(__be32 *p, struct inode *inode) { - struct timespec ts; + struct timespec64 ts; u32 ns; ns = max_t(u32, NSEC_PER_SEC/HZ, inode->i_sb->s_time_gran); - ts = ns_to_timespec(ns); + ts = ns_to_timespec64(ns); p = xdr_encode_hyper(p, ts.tv_sec); *p++ = cpu_to_be32(ts.tv_nsec); From patchwork Mon Nov 11 20:16:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179133 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7143023ilf; Mon, 11 Nov 2019 12:17:33 -0800 (PST) X-Google-Smtp-Source: APXvYqyVVJ/o68OGw0sv4tKspOk0PP+58pv9wQFQ2QM1cxIZaMVxUKxkp/94TB6rT6JzpC1V1Fov X-Received: by 2002:a17:906:1c92:: with SMTP id g18mr24515022ejh.33.1573503452897; Mon, 11 Nov 2019 12:17:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503452; cv=none; d=google.com; s=arc-20160816; b=0xZhYvDVSvAQrVNJroakWyT2Vrx1n3niROrlrGMMlsYd3o2hHo/OJIEUDS5Pog0eMQ 4loQk80MH8G4kb7AKUJIpXxhlyJHG+7Sn4nXw1BuYHAZvwDfzihxk88wVIiozgmQZwpJ DoCee+G4QEe1St2hfPC8CmJBbujrgnSSLaCkxxEnOgfdKEPYEODsY4LvB/Fl2j/FYlCf rAhpYEqbwCGU7Q+hBMGALH6rDXgIIegs1eZL4Wqxp5V43yHiz8OF8dJYU+1fdMukQUea eoyTr9hS1taDl0kSRqY2Qg6q7NTVv9BaMVRH3vkUHeQymR2msrblfwthFtakwu9ZfIeQ PX2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=yrFMJ/askeOGrsNMiAIntsZaFBifTVPnW1eZ1B6+L20=; b=OoHbHLQvKyLkQamwlP8IkFj9mVx9rb7+8DGWAjOyz2zVsckmKBMVMQ+5M4cqSg+U0o CniEKczwu3d0uH0W7awULp0kA6oopMc5z37oehc7dnZ3zcmhFOUB8Y6yBBLcn9u4gQpn Xos5Dqv46P/6XP1/1JsmxZJA0CZklVKGln+Z7AfEHiBsW/rj52vQUThrICeNn7LAqGK3 zV/GK+yIsaI2jL0RPU2OGNZyyE128bJWtgok854FmXVppcfR2VRRMyiEYurXwTYMoZY6 ruEA6QYPsu/T/dnuGOnMPyNDx9kkAr3bZfYyu3Sq0UHM2vNA+6mQ/hcXZIYs9nL6DY34 rQtA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w27si11947807eda.296.2019.11.11.12.17.32; Mon, 11 Nov 2019 12:17:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727762AbfKKURb (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:31 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:40119 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727521AbfKKURF (ORCPT ); Mon, 11 Nov 2019 15:17:05 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1M3lkT-1iUXEP10T5-000qDU; Mon, 11 Nov 2019 21:16:50 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 12/19] nfsd: make 'boot_time' 64-bit wide Date: Mon, 11 Nov 2019 21:16:32 +0100 Message-Id: <20191111201639.2240623-13-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:PNkdbjcRtbrbVMRUiZLzF1eXOvEElAym2CbUzxCHUKM+UeD/ENv tZVtNhCjbb2R4CVQ+tuX82riybqvHgcczH+XNNeLunytNXK/EbG2xqn3kK0fUKr8EeW5kpF dy1F8JS4y9BaNphHp0AymV3uTXSjvQj9jeAyN/k7nF71NOFb9DUUCkD16P6ZDapfzJ23GDB 7HqaAcq95pfqVAiyM1bQw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:/yjMXGGT/RU=:VwPh1w9NN0xV/iIK32b7vP YC1VtjUpL+gsfAzSWXfi3kOOL3eJkV98x3H8KJ8xA+kY70mP1UxFewtvs2K1Y9G2nqjVpzwlV sRUxWMYkJiHylw0/DXcGJ44sffRgVCwNk5Zfh7+MR4e5y2TSfqpM1UfeSo2kP9UbvJRJbFr75 jOxglXbZhAKAQcm9W4E31RtjYRNSUuU3AUKb6XKaVR28FPUmxClGTeFcLxdTkSAXFUY9Xom8D ja8hBN9eVxwxdH/db4oZMLvc/j9wNNxy03Yq1jX7gJOFux2RZgxV5Nhj22jQ9xvz2gIobB3di k2sxZkc7iMHoLeDb8t+nMbfX1ZEYgAgxFAZ56BTFPwC9KF9O5MoYCOaNcSKfprqTMVZD3Mil8 TFe2GPPdtrCPUdMtcKGkujS9HjMDBrxKf1Kq/6J9lH9Sm8Q5FcZJIFYbOGn5lPiMsyLTh9MnH RnoUOVHy68exfFtErzN35HEFWjipQqOlSlIy/fOQqKxLi6xuXTphG67dmS50BEEaMh8jeFgss h5xYWQJNcYlqXxwYr7MOKPqoyVqCbvTy5zYJJ2+gp/sIPhAkMTXpHMec3wzJC7I/6Jbxc4tf2 rT9+NbY3QAvPGgyHCHFeLrKT7SkM5xbSs6MxYeFenzk46GmpCWK+BOQDWsst/YFpGzdk2oM0l 6qZWf10BRKsbNw1DbwrFkIYFiA5ebcFfreeuJih9KRWmoPMKaKuQm1CzExVyrJq5apwD2piix ktLmIHFJGEgnZtzdPbz7R77YHMWLz9NcQWxFuEli6y0abS31jteaU43ZdzepPzuUAWOIlVKG4 Ao5oFJSexKHAQyf5WXtov7Scq8usGfR/L2QU3KJZkoPl/JRoK+D6iIoGGsdnj1pB4ThpOmm7N Hbln6rq6npnm1K29b5pw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The local boot time variable gets truncated to time_t at the moment, which can lead to slightly odd behavior on 32-bit architectures. Use ktime_get_real_seconds() instead of get_seconds() to always get a 64-bit result, and keep it that way wherever possible. It still gets truncated in a few places: - When assigning to cl_clientid.cl_boot, this is already documented and is only used as a unique identifier. - In clients_still_reclaiming(), the truncation is to 'unsigned long' in order to use the 'time_before() helper. Signed-off-by: Arnd Bergmann --- fs/nfsd/netns.h | 2 +- fs/nfsd/nfs4recover.c | 8 ++++---- fs/nfsd/nfs4state.c | 14 +++++++------- 3 files changed, 12 insertions(+), 12 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index 9a4ef815fb8c..29bbe28eda53 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h @@ -40,7 +40,7 @@ struct nfsd_net { struct lock_manager nfsd4_manager; bool grace_ended; - time_t boot_time; + time64_t boot_time; /* internal mount of the "nfsd" pseudofilesystem: */ struct vfsmount *nfsd_mnt; diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index cdc75ad4438b..d51334f38e3b 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c @@ -1445,7 +1445,7 @@ nfsd4_cld_grace_done_v0(struct nfsd_net *nn) } cup->cu_u.cu_msg.cm_cmd = Cld_GraceDone; - cup->cu_u.cu_msg.cm_u.cm_gracetime = (int64_t)nn->boot_time; + cup->cu_u.cu_msg.cm_u.cm_gracetime = nn->boot_time; ret = cld_pipe_upcall(cn->cn_pipe, &cup->cu_u.cu_msg); if (!ret) ret = cup->cu_u.cu_msg.cm_status; @@ -1780,7 +1780,7 @@ nfsd4_cltrack_client_has_session(struct nfs4_client *clp) } static char * -nfsd4_cltrack_grace_start(time_t grace_start) +nfsd4_cltrack_grace_start(time64_t grace_start) { int copied; size_t len; @@ -1793,7 +1793,7 @@ nfsd4_cltrack_grace_start(time_t grace_start) if (!result) return result; - copied = snprintf(result, len, GRACE_START_ENV_PREFIX "%ld", + copied = snprintf(result, len, GRACE_START_ENV_PREFIX "%lld", grace_start); if (copied >= len) { /* just return nothing if output was truncated */ @@ -2007,7 +2007,7 @@ nfsd4_umh_cltrack_grace_done(struct nfsd_net *nn) char *legacy; char timestr[22]; /* FIXME: better way to determine max size? */ - sprintf(timestr, "%ld", nn->boot_time); + sprintf(timestr, "%lld", nn->boot_time); legacy = nfsd4_cltrack_legacy_topdir(); nfsd4_umh_cltrack_upcall("gracedone", timestr, legacy, NULL); kfree(legacy); diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 2333924d7c6b..70a953b03be4 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -753,7 +753,7 @@ int nfs4_init_cp_state(struct nfsd_net *nn, struct nfsd4_copy *copy) if (new_id < 0) return 0; copy->cp_stateid.si_opaque.so_id = new_id; - copy->cp_stateid.si_opaque.so_clid.cl_boot = nn->boot_time; + copy->cp_stateid.si_opaque.so_clid.cl_boot = (u32)nn->boot_time; copy->cp_stateid.si_opaque.so_clid.cl_id = nn->s2s_cp_cl_id; return 1; } @@ -1862,7 +1862,7 @@ STALE_CLIENTID(clientid_t *clid, struct nfsd_net *nn) */ if (clid->cl_boot == (u32)nn->boot_time) return 0; - dprintk("NFSD stale clientid (%08x/%08x) boot_time %08lx\n", + dprintk("NFSD stale clientid (%08x/%08x) boot_time %08llx\n", clid->cl_boot, clid->cl_id, nn->boot_time); return 1; } @@ -2222,7 +2222,7 @@ static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn) static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn) { - clp->cl_clientid.cl_boot = nn->boot_time; + clp->cl_clientid.cl_boot = (u32)nn->boot_time; clp->cl_clientid.cl_id = nn->clientid_counter++; gen_confirm(clp, nn); } @@ -5178,9 +5178,9 @@ nfsd4_end_grace(struct nfsd_net *nn) */ static bool clients_still_reclaiming(struct nfsd_net *nn) { - unsigned long now = get_seconds(); - unsigned long double_grace_period_end = nn->boot_time + - 2 * nn->nfsd4_lease; + unsigned long now = (unsigned long) ktime_get_real_seconds(); + unsigned long double_grace_period_end = (unsigned long)nn->boot_time + + 2 * (unsigned long)nn->nfsd4_lease; if (nn->track_reclaim_completes && atomic_read(&nn->nr_reclaim_complete) == @@ -7635,7 +7635,7 @@ static int nfs4_state_create_net(struct net *net) INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]); nn->conf_name_tree = RB_ROOT; nn->unconf_name_tree = RB_ROOT; - nn->boot_time = get_seconds(); + nn->boot_time = ktime_get_real_seconds(); nn->grace_ended = false; nn->nfsd4_manager.block_opens = true; INIT_LIST_HEAD(&nn->nfsd4_manager.list); From patchwork Mon Nov 11 20:16:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179131 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7142947ilf; Mon, 11 Nov 2019 12:17:29 -0800 (PST) X-Google-Smtp-Source: APXvYqwxcMc1JlPHG3or/h3xAn0Awert9sdU0Uo1Z9Z9hJ4J43GlhqZaz2YKTgrP6/mtmca1+YHZ X-Received: by 2002:aa7:c987:: with SMTP id c7mr28467348edt.232.1573503449016; Mon, 11 Nov 2019 12:17:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503449; cv=none; d=google.com; s=arc-20160816; b=Ouc/Wi+lylkGQBtaJqfbrjMECcap8ixeH1hokwwtQUu1r/SAz8xPT+wulAMmRH7iF2 4iegckRcJvzJV0pThTMHKgU3rftrR3qRKEkhedR6RdbwAGdRDnK72BolgtMu2fuxn9L9 hcf0rYf9Odw1oTruoP+KaVN1DgVo4cNXRAKnN8PRHY6pIIVVv8xVCl+U65qm9rvP7VuA EnXHeK/PfmZWhd2rUez3feZA/AwLMO5w9+Lytv1XN5+vGHwLKw5NJc6BXTolV5LWtCh6 Agy19ENVA3uVQKyqSm2CtdfQXAQDGtW4stpbkMcWecqBzGZfpos6I6yWCpfblIxqCUPC l5tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=cpINnEpnTZGMkMNfQpQ5aZMdWaOi7F+kmghKHUan91s=; b=dKa7vH69thWy40ZSC700BUx8oKiEsMiily6THXk+As4bugV2wffx/QNQAR04KBWP9y Om3vG3oX1qArP74dfcn5DECnRsUoG8rxvc7VPB5/HzoATAuN6TSd1yboNx4K1ob32SnI NZLay5ZDLosdvvnoh3kka8n2ZrKSp6hI+cap5c5pk89ePT72wmyRRLPG4e2Xgl/yg5G+ 4BXJxzRrqyPvU7zh6J5g4s+UwCw63Uj/z2qjEgdLijTC4fO5DFAYEwVBgMvn+j8RG/e1 PUj/zUK+wwWrqaBBlh51PsHVN3s9sg63QXvCFryQkzuMra3syV7GvQ/cE48xby+crhgV czfQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w27si11947807eda.296.2019.11.11.12.17.28; Mon, 11 Nov 2019 12:17:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727569AbfKKURG (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:06 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:46059 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727122AbfKKURD (ORCPT ); Mon, 11 Nov 2019 15:17:03 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MLi0U-1iCajy2JKi-00HggB; Mon, 11 Nov 2019 21:16:50 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 13/19] nfsd: pass a 64-bit guardtime to nfsd_setattr() Date: Mon, 11 Nov 2019 21:16:33 +0100 Message-Id: <20191111201639.2240623-14-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:kLySL1mN/IbrXNjESYmaI6C+j074UjXObT3NY8Zh8ekkuS+uGiG Kj8dvAktcB3tOiZo3og8i056LSHUdn0D7km2lUWgZIbBftxuoem47Z+BdkW/wHX2D6zpO98 youZi5pEJlJpXniJjrlfuCqmhm4l9u20ZN3aKE6hpoF13SwsDvkB1/hsa6WrYAdWhmxFzeM 4f8NrugPR+cKJd/cvcVVA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:PceNcs0aF4Q=:xgF0+4N3RzcxQHQGv6CGQ+ SPx11DLoRJ/NQ+jeEo68iyeTHz7RBI4rYODKJWvqJYXMKI2aMsBbbpht+jKiEnDXwV+o6kkSy eFwXUT5vSCJaxsWCZdrdW3+8B7y/KgZkGdl0LIXfuTLl1TnZgB6Ye9KOW730jDWPcM0KU3U6Z z0j9MdnrnGZCVtqEW0V6wHhazGRNjIvZ1h8pmoV3/+4Ip/wm0bBjFXGlU1tga1O+QCFmFRgJp xSHqNx1XrJ8zRvzDArnk+t1343QntBwxX6XTbHVgYtziom20hh6Co+mn/6QHp5q2xZxACI1XF QD2LYsL1Y9l+y01gWk7UaCCiqiXb+k9zDtRitcJXJ7gmD+unyCxXtT3YM5w/rvPC+JYBtJBpX zSgWYZ1OJa6TYwprQOLU5Qo6v33yYqJ6yPySYkEbuCPjHAI4Of92khqSmtkGIiVu9ePVjOKWZ 9iFBBtqFc8Y4X5Oh2/DV+V2DUQzLTrzNYWYTgOZ3YkV0er8UcoBNs5g6u7gnzHpBDdJDBddw1 UyM471VCUdTtrScbJ/H+sOjXYCQ7Z3+tnzkGcWDNZK7GhrBy1pWhxO9gC5JzlYOQ9oLB1/hjS Mqa4YYTXfEsUhwxE+Ls+D+ZD0ArkQhPLeACjqaiBrTXqVWgtASu6ix5Z52OG71g01HDmoEsLW 46tsLMM8sTxFcdaIh6PIX8kvNAniNhdW/ks3UVgjrzB3pa1DUsCVZJbapgEk2h3sL28CfqYNF tZMPFLF2gF3yDOthI5wg29rruQy6lDRnNh6YO6rgSvcmb/+ud/4fat4v0efS1DmHaJts+gN9F 37aPm0iR4wwkH74mfZOkcZzSq9bM+jQ9KERB2DRbEUPjtRENqLCvwWbCC0jBERFxqdbiN3S0R b3gF5nLUJcQ5Yu2vDLqQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Guardtime handling in nfs3 differs between 32-bit and 64-bit architectures, and uses the deprecated time_t type. Change it to using time64_t, which behaves the same way on 64-bit and 32-bit architectures, treating the number as an unsigned 32-bit entity with a range of year 1970 to 2106 consistently, and avoiding the y2038 overflow. Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs4proc.c | 2 +- fs/nfsd/nfs4state.c | 2 +- fs/nfsd/nfsproc.c | 4 ++-- fs/nfsd/vfs.c | 4 ++-- fs/nfsd/vfs.h | 2 +- fs/nfsd/xdr3.h | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 4e3e77b76411..b595f6d6d0d9 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -975,7 +975,7 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, if (status) goto out; status = nfsd_setattr(rqstp, &cstate->current_fh, &setattr->sa_iattr, - 0, (time_t)0); + 0, (time64_t)0); out: fh_drop_write(&cstate->current_fh); return status; diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 70a953b03be4..1ea7a40f8d4e 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -4666,7 +4666,7 @@ nfsd4_truncate(struct svc_rqst *rqstp, struct svc_fh *fh, return 0; if (!(open->op_share_access & NFS4_SHARE_ACCESS_WRITE)) return nfserr_inval; - return nfsd_setattr(rqstp, fh, &iattr, 0, (time_t)0); + return nfsd_setattr(rqstp, fh, &iattr, 0, (time64_t)0); } static __be32 nfs4_get_vfs_file(struct svc_rqst *rqstp, struct nfs4_file *fp, diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index c83ddac22f38..aa013b736073 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c @@ -113,7 +113,7 @@ nfsd_proc_setattr(struct svc_rqst *rqstp) } } - nfserr = nfsd_setattr(rqstp, fhp, iap, 0, (time_t)0); + nfserr = nfsd_setattr(rqstp, fhp, iap, 0, (time64_t)0); done: return nfsd_return_attrs(nfserr, resp); } @@ -380,7 +380,7 @@ nfsd_proc_create(struct svc_rqst *rqstp) */ attr->ia_valid &= ATTR_SIZE; if (attr->ia_valid) - nfserr = nfsd_setattr(rqstp, newfhp, attr, 0, (time_t)0); + nfserr = nfsd_setattr(rqstp, newfhp, attr, 0, (time64_t)0); } out_unlock: diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index bd0a385df3fc..c0d8fdfd3b90 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -358,7 +358,7 @@ nfsd_get_write_access(struct svc_rqst *rqstp, struct svc_fh *fhp, */ __be32 nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, - int check_guard, time_t guardtime) + int check_guard, time64_t guardtime) { struct dentry *dentry; struct inode *inode; @@ -1117,7 +1117,7 @@ nfsd_create_setattr(struct svc_rqst *rqstp, struct svc_fh *resfhp, if (!uid_eq(current_fsuid(), GLOBAL_ROOT_UID)) iap->ia_valid &= ~(ATTR_UID|ATTR_GID); if (iap->ia_valid) - return nfsd_setattr(rqstp, resfhp, iap, 0, (time_t)0); + return nfsd_setattr(rqstp, resfhp, iap, 0, (time64_t)0); /* Callers expect file metadata to be committed here */ return nfserrno(commit_metadata(resfhp)); } diff --git a/fs/nfsd/vfs.h b/fs/nfsd/vfs.h index a13fd9d7e1f5..07e612b90757 100644 --- a/fs/nfsd/vfs.h +++ b/fs/nfsd/vfs.h @@ -48,7 +48,7 @@ __be32 nfsd_lookup_dentry(struct svc_rqst *, struct svc_fh *, const char *, unsigned int, struct svc_export **, struct dentry **); __be32 nfsd_setattr(struct svc_rqst *, struct svc_fh *, - struct iattr *, int, time_t); + struct iattr *, int, time64_t); int nfsd_mountpoint(struct dentry *, struct svc_export *); #ifdef CONFIG_NFSD_V4 __be32 nfsd4_set_nfs4_label(struct svc_rqst *, struct svc_fh *, diff --git a/fs/nfsd/xdr3.h b/fs/nfsd/xdr3.h index 99ff9f403ff1..0fa12988fb6a 100644 --- a/fs/nfsd/xdr3.h +++ b/fs/nfsd/xdr3.h @@ -14,7 +14,7 @@ struct nfsd3_sattrargs { struct svc_fh fh; struct iattr attrs; int check_guard; - time_t guardtime; + time64_t guardtime; }; struct nfsd3_diropargs { From patchwork Mon Nov 11 20:16:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179139 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7148759ilf; Mon, 11 Nov 2019 12:22:24 -0800 (PST) X-Google-Smtp-Source: APXvYqzGgQ98Z1+P1M4wLzK2uejRwkkR9ULhqTrd8HFy+CF6MiKTaEyezOG80kmfA7Qkrr1Gh5VP X-Received: by 2002:a17:906:a388:: with SMTP id k8mr23898378ejz.223.1573503744135; Mon, 11 Nov 2019 12:22:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503744; cv=none; d=google.com; s=arc-20160816; b=nViPAvCSkUdl3KJqoJRYGVp+P6JycbTvJbeyH3Vlgwp5nQJD0E9cod0ImpJDYBeaOF ASZn7gUBasDHksNO+QDpcmld6RVzLMk0TvBfpQhhKlweQMst2E+yLJm+Ymzz0hXO/AkU plxOPLP/IiY8i/BvMg7jO5r91hZSbREWJTKJHuQlDy0UtiCqyfOXWcSdPITj88QrK77G L3cp36y7VAkhJECkz9rLyPHsUSm2eaJ2lOcxLSPO8dNj6LklEUhMiY5P6wcLwhhuVS7H lU6CTq45U1dQEJ+a1aM0KamthqiPfx6eJpXk7U0EpWIK0iOL6cmmS9z4qorxw6cW3R1h EXtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=MAnuPeH8MQ7Zv2N6hh8mt/CD+gsk+ZTHINwLn0K3ukg=; b=R+s4Y0h2RdvY6Ef3d2q4+tq/MJWW0TWvOaTN8FV4imAr7JeWEKXhCf6wFFDNmbw2K9 rHyYAMzxjIX1QDBI85XB481DybIQE52Uq3bLjsK1Dyc3R5GCl2Ha+QtM5iBaQjSG8oAa UrNMvs8cy3zIr5z82XCK1x0QTcU1QkXG5adQB9vDaNLdin3PwybQxl7K2NvYmnF6SV1R 8PN/IffpBQBBCokUNkD7GEqNimgAyN5ScQqDCcIx+TLsN6tLJsX+0b7YpTMlZBcl73+O tpFr4BsVfLG8auOFHLP03O6Vmr5/rXofyZ7W1je9WdccBHSXDr56Q/OsbLHaq1DYOy5S YZIQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bs2si10363532edb.354.2019.11.11.12.22.23; Mon, 11 Nov 2019 12:22:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727857AbfKKUWT (ORCPT + 26 others); Mon, 11 Nov 2019 15:22:19 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:42475 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727693AbfKKUWC (ORCPT ); Mon, 11 Nov 2019 15:22:02 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1N8XLj-1hqEL53gMD-014Vte; Mon, 11 Nov 2019 21:16:51 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 14/19] nfsd: use time64_t in nfsd_proc_setattr() check Date: Mon, 11 Nov 2019 21:16:34 +0100 Message-Id: <20191111201639.2240623-15-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:bZJ6dABjb/h5bnFGHvp5XdGnpOQ48DZK/y9xvfcHGKpTQoH3/bT 1UeC7EXkGuZ29jsdi41tFt6HfOuEKjy2GfgdYIX/v+IXZR1U1EcEqzS/o8ilLDIy+b9S6kr GcfvrHS9+6QfIMVctOIbx3+o1NRJAZJYtvryMigWubxt8VxFp91emStVv1L6jsg8J2tG1am HXOJqCfyLJUodT6uk5vKw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:dbRhCZ12aTc=:oN8DIUR5xf8YebZvljt4E8 jPI/c8keSlfSxzvYD/z5yoA72BNX/qGRs04Ak8r5YoeQbEnFdEyxmsWWOFzmMbEhO/5xY+twG H/iQpwPjy9TOqbZ2SDar1vulM1B0gwjZ+E/endUeaCpK6XwffIbE2qOcgrGr/uCVWjtlHZutV xMlPe4j5UUk3iCbAbFRtBovVfpWc+7x75nnMEygcuZy+DlVpkfeOLcYGKhQW6kjZgGPVu8jag 9E5OXqI9x7LAzZwMSWnqAI/Exo3vycLihrEZ7wSLEAayyQf8EtnV9tY8w+NIszevrwD10RVOG 1InLkIUpLSYaVFy0tkT7sT/kIQ5mcdnmF23o+tlySVQEbfrKeJYcSqvtJAR0dfSpMZEDA3A04 ZNgH01oG2db9GXQ7G3XIlyFZmiBh9Pw/XxlA3BVIthiktvBr7v3Pr5aFfmz9iKPtTZKR6paVW LWl+13SSBK37GAXxxt9UVwvGyE+eT0luaWfAHlwoJgf12+98EYTll+eBWZtKcxGouH6UsmArP mBFd4I7/fUqeaIr88b+aOTG00jWnVhw4XqksfWo3XoDSMnpqyfF2DSRikjv64nC6LlXllFOiB WFPKOzj6XOhVWerSKTVmbXc95MRtN/IyyaLF+2wG3TG57AFtj6b5ZGoJb2d79DY6yqQfQseJJ BZQeezjtsxE9vCZZmZbZy9rRjDqouKzKzquMSPfvyiNkoBGQ/BRAzHiixkArQ04qG7yCesSfP kqAS4UyDLfdekrxB+Zo61Gz+aoTQmpDLP1u9yqJQQYjCf00YRR39Ie+XNLuN9miN5KGcfqQ37 Kr+Fm0MMLspmle0KiTpkVRRQe5pYtLPa981QTn50S/BCs5rI5G9hnugAQivEv6Uam6wIY9LKR Z/Zx6iJNL0/SMqiwPm3A== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Change to time64_t and ktime_get_real_seconds() to make the logic work correctly on 32-bit architectures beyond 2038. Signed-off-by: Arnd Bergmann --- fs/nfsd/nfsproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.20.0 diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index aa013b736073..b25c90be29fb 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c @@ -94,7 +94,7 @@ nfsd_proc_setattr(struct svc_rqst *rqstp) * Solaris, at least, doesn't seem to care what the time * request is. We require it be within 30 minutes of now. */ - time_t delta = iap->ia_atime.tv_sec - get_seconds(); + time64_t delta = iap->ia_atime.tv_sec - ktime_get_real_seconds(); nfserr = fh_verify(rqstp, fhp, 0, NFSD_MAY_NOP); if (nfserr) From patchwork Mon Nov 11 20:16:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179134 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7143208ilf; Mon, 11 Nov 2019 12:17:41 -0800 (PST) X-Google-Smtp-Source: APXvYqw2HXOnR5daZfI84sG/ke9F936jfYOAGQrgNAQMX3Sl1xiBcVdIW2PpUIuyXlDhwJYNS9wB X-Received: by 2002:a05:6402:104c:: with SMTP id e12mr22044866edu.199.1573503461623; Mon, 11 Nov 2019 12:17:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503461; cv=none; d=google.com; s=arc-20160816; b=PEToAT4djcc4Y0WIpRQL6+URFBOOVGH117MEUYxcwzCivclI0/tQ6EzlIo0xL/pfTs MmO9BMou8or+zjvUrNRDOAhi1gZ5dZpWKX8/enu3gxjFEpOTVeUHicTPI4ShZd/07wf0 osDe0hNZFxNkAByf1PeVxrzFZ7PfZ2zh+I54hQHThXjQSXtoPyNAHxd2KVH7GDWIHl8z 9G/tZ9vgGLfxtK8AAL34mHOBSGy/vSeuzPx+EICn+PmBcAeqJtJlNccUiGgGk9MDxk8m 8e6pYIiFZxOzBkSipPGIo+RIDlAxKjUkDx+Cgbpu6/GVsPaDaam1sj4GArcm3XCFD/dq hOKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=y5u09Q2uGLzFAPd29bVuz8BA6CP1XYaqAfo4C0KZH9c=; b=WwBS9qGIUoRwtKD0Qi7hg9i0ahaLsLqI4cGepoEX/Nbf2KpuG0Jh4wr1ld9MTs04Qr cEqnTE2VwR7ZdbaqbYGWJDkW+3wuB067DdP68tmqO5UpocUiL6JtE59D9IGStCGcmDyv HhOuNpEEFaoCH953is7FU5MxDx0cudZlEqJ5xL4HKtT0UpJ8JwAyXhW5TLx935EU0D7e H/+8gv0PcPJxfpPigjc0X2ZZMENLufEQGFA2FBC4w3DkYGLjRx/t257/TqR7zYGVx776 KNGOQNv299HdeRopDZZb1Uilo2B1e5Q30GuMWy+YHOTTR9MJODob/7XF3FuEfwe1K1Ls eivA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 63si12912279edp.302.2019.11.11.12.17.41; Mon, 11 Nov 2019 12:17:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727450AbfKKURD (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:03 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:33919 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726924AbfKKURC (ORCPT ); Mon, 11 Nov 2019 15:17:02 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1N6svJ-1hphAy14rX-018NFQ; Mon, 11 Nov 2019 21:16:51 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 15/19] nfsd: fix delay timer on 32-bit architectures Date: Mon, 11 Nov 2019 21:16:35 +0100 Message-Id: <20191111201639.2240623-16-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:gmiJexBFvqElF3mq4b9b+BZDQ8d72Q7kCeZTPOCjS6AhS6bzlDu NXJLMSB2hdsvgNmtvpikLv8CkbAUuuLITgyvau37mTIqgnGMh2E9z2Kqjdm+HVfcFTkEsgE 9/kcOOnOXlfAtr/6WB+MFLMVjWxlTuUuJmcpK3g5R/UWsE22dELI9rGE5eFOqYyEefJsgrh 5uj7yStbDDRkV90oaUamg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:OuSNcZeVEos=:x5ZXKdsBl17wIelyNU21r3 8HywO3EQnZh63jP5CdexIy9kbzHofX+dQ9vWCbGyNW6gxNBDmMoQdYNIOkN7oiQqhOxKT5miN LMLI3zCfLbaVnWqKzXHzkh4SXd60raLsDj6FZ9cqxRnLegxn+ujtQhmJ8O1qrAJ9uGHdZLEyo YYrIHvXt9yrS3dOKUH6D9er6OY6AE3pYEn6niAs26nWvtg31Oh8kIrebSr00Jfwq4uyVMUtMa LovWvlMjgjNNVvy2GM4CZgAc8qjB3IpKNM3Dk2tAM5WyUQRDj1rXtPNk0llxXBskdSmHWOGmM O01Z0XOSo8gBiTaL6JKDtCZPN7/mOK/La4BlGKGPel9nlWIqQdYIRC1lAQSz5LxrOdJNHNCQo c4Yeb6MDh1XYxzXp7hEifvWn65XWZ7EmeYVA8nlUZXm4F9K9Pl6WhGZjrqe15yqHsbxDtEyso zFCbNi+U+ezxW5uyTCO1WGPAhb5r84NSFv0BtGGH2jHcyiYKlhpDoxFXmco9e4u1oP9gxaqpV Coh9Kb8379K2/S45ksuq0DhJCSXfK2+/mVQS5ONJ/KKkCZeqe0VdQvVBVyEdyVL2cQZ6s2Eg4 2SWHkhksSI61c9TmpFxbCv5LIguBAC0j6yaj8sesQwBzjdB8Mqo51GEzubeCjZR2t4nnupwMF oATxST3QYVtUyEn+jyRsq1kCOMrKwM/LWp90kFyffh6rm3nE6VkM+HxbBRHOnuszqT5w59STU lpDJzUcRO0AazmApNe0Emg7YfFD1DDH1qopZZnpp6IhPj6fwpCXEvyn0ltAA5wp4hbWOfP4sh qgUW/h5GeiZ266/UeL//8fY8p9NQIQ9M6LE7YJzHNOR12p1iBWrbBBawW5Lv3hC4nCTp2Nh2e 47wyLsKwTNhlghaiTKhQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The nfsd4_cb_layout_done() function takes a 'time_t' value, multiplied by NSEC_PER_SEC*2 to get a nanosecond value. This works fine on 64-bit architectures, but on 32-bit, any value over 1 second results in a signed integer overflow with unexpected results. Cast one input to a 64-bit type in order to produce the same result that we have on 64-bit architectures, regarless of the type of nfsd4_lease. Fixes: 6b9b21073d3b ("nfsd: give up on CB_LAYOUTRECALLs after two lease periods") Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs4layouts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.20.0 diff --git a/fs/nfsd/nfs4layouts.c b/fs/nfsd/nfs4layouts.c index 2681c70283ce..e12409eca7cc 100644 --- a/fs/nfsd/nfs4layouts.c +++ b/fs/nfsd/nfs4layouts.c @@ -675,7 +675,7 @@ nfsd4_cb_layout_done(struct nfsd4_callback *cb, struct rpc_task *task) /* Client gets 2 lease periods to return it */ cutoff = ktime_add_ns(task->tk_start, - nn->nfsd4_lease * NSEC_PER_SEC * 2); + (u64)nn->nfsd4_lease * NSEC_PER_SEC * 2); if (ktime_before(now, cutoff)) { rpc_delay(task, HZ/100); /* 10 mili-seconds */ From patchwork Mon Nov 11 20:16:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179132 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7142972ilf; Mon, 11 Nov 2019 12:17:30 -0800 (PST) X-Google-Smtp-Source: APXvYqwpFDabFfpUCfjwAy5puqKv4j1vZSb43uJMgjyoyAwFVJuAfocQHVRzCgPvY2QUkzGh6G1Q X-Received: by 2002:a17:906:14d4:: with SMTP id y20mr24691009ejc.21.1573503450101; Mon, 11 Nov 2019 12:17:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503450; cv=none; d=google.com; s=arc-20160816; b=UaLRJLvQkJ/T9nL3+wRS5ofn5HFCiliXgTVkAXC+YzkXJptyzlZoUZYqVu/07CAS1o naIQqZlLy7oKRhQctcaH0P2fq45DcrHuh7rWoMj3vOe6qfUQsDe44H8TAafRzeYDZOx3 VTszoombBhBHHl8b8vW7QT0Kpq9RGNVYxqfrIsTJmd63oH4/avmyE3KDaOHVKQIu75u/ BqkD5v1d/iYazkTrn+/rDyWaAUOIiWdZ6sVlKNNLC1rvopiV2+IFFvzrMcSjI5iNPXaG RcLVZsBYioVQQhGvSBS1tB1cuYv+SHXT2Q3NbrsXPTODrJCQDS3Vw/ZbWjrfAAVQDnIz dQrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=NgSuRYXD25egMNBNk8g0f3hUNh0bK7dnM17BNUKDNgQ=; b=O4XNYt6qEkQdtBqMrdBEKVwEQMwA5YDTZLzs9lFd5Shs8GqFOctLfRA8xapFP3L243 Oe8mK8Of2byFf9GdLEuiwMMGpNA3/IgunfTVqJek4KZRmRmVTiI6b0qGY12i25PY2G0j WwU0SbZkzVt+MlLPLOP7VxEB/4pCuBW7WDM3CgdtnU0GGnim3UeoFuTnEkYgztWicNni hgkUJuW34MH6DRF8XDuD7D8bxVf4h2mJGV8GHW+2RBt7UCnipyspdvEvHpYj4Izysidw LK/EcbwA4TDQnDkctArUIHBY2BdW84JpyRBcJLheahrncPv6AWzRy3/fYDKR2/Klz0Ar oR7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w27si11947807eda.296.2019.11.11.12.17.29; Mon, 11 Nov 2019 12:17:30 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727735AbfKKUR1 (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:27 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:53755 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727531AbfKKURF (ORCPT ); Mon, 11 Nov 2019 15:17:05 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1Mwwm5-1hfl1c2bHv-00yR5A; Mon, 11 Nov 2019 21:16:51 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 16/19] nfsd: fix jiffies/time_t mixup in LRU list Date: Mon, 11 Nov 2019 21:16:36 +0100 Message-Id: <20191111201639.2240623-17-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:AH8i1QyjBnmOgX+Hph5q/HZDFvvmSil4F4O+Bsp1GBARUSPR52L oJj8k7tJxTPm8H3PYTDBGT5Kf6ImwYCV/Mbg0OPMDkv9pdGxcDg/0bjWFERI6HLp8xzSX9J ixTYcoCBHyaZoFmRJMdqLFk79jkYGlaOW0hPkIPun8C++agV/XpkFXdIHMbwNrryvm4P3ix d2L6RsC6qjcI08EKf5UEw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:Sh4EoJu1FJ0=:q2VPo+fnLWnNCS+UeuYzw1 qXUBzU4zX7fHNjgxQ0AyM0uzAWi4xzEdFhvP0TmDK5iNplav4fmxRGBgqZVrSDvIpwut0QFHt 5JLrWLuUfdwoikzjVFQfEZupDo0PZjEzaPn5rEmNuvuwK0IJAONBwAqll6mbnkE3Y+QQcRcwP XzdggbnvtlViky0kxRMLr0QeofeNoyMivV9W8HGY5ajhutREIDm/KohHoJCIUc4V59uOv7MSU Ly3oyeM1PIzngbIgbIJGGc26x2JYmUuL7YhlVh8dKGoowAODJyDcIimuo7ltqhH9eTcuI75Ud FhGMdFIA1vQvxKkBaf5SkhAYr+PEIbwylF6aI38HWbEnyFMNrwG9/nWtxQs26Iqfdz3TJfgx5 DOhO9Bq66P8xC3kiQKg7HkwLp1lepCiDYs1vcBbtpI/yZ/nyOkU3JrvDANePniQk1fKIpuwUs 768DD/FuK5uhEBtZNTvq624Ec2PccKq/vXXtLT7gMUJ7FM+F1iS/CU3qtJl5KS+q9c9nn5Yu9 5ZV4p2SXsYb1pAlRWxaURIGOT5JvU2kf378Lzz8EvyEJf+Q/WJa4pgLx/ih9p9xn8NDx/LHN6 c5DPqSRfybLg9JIU3r52w5+5cM8BeqwCtSF5IK9/VmPk9xpovGNnhuW75FwtKzn+aNarlHCyu y9kPmuCagplHhxHTjEVuZJDGj8U+wHmATkc8zLts5Y0GUoWdrsdSWocjUHTioMw3g0cE3aEek rYFB4pPXY5VHDixHp5l6f/PLq0AXg2Dq207bhzKvncw7dfWVU1SLTcS+7vyonPUgRYRuqRU4L GGBNA4pAOtllJNOZts6xRfnLhSfhNVmLBOEi9/4AHDjj4F5wIHbYMB4s8QOv75LYW+lu3MuqV Qo5nh3wRaSrLPB2SDs6w== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The nfsd4_blocked_lock->nbl_time timestamp is recorded in jiffies, but then compared to a CLOCK_REALTIME timestamp later on, which makes no sense. For consistency with the other timestamps, change this to use a time_t. This is a change in behavior, which may cause regressions, but the current code is not sensible. On a system with CONFIG_HZ=1000, the 'time_after((unsigned long)nbl->nbl_time, (unsigned long)cutoff))' check is false for roughly the first 18 days of uptime and then true for the next 49 days. Fixes: 7919d0a27f1e ("nfsd: add a LRU list for blocked locks") Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs4state.c | 2 +- fs/nfsd/state.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 1ea7a40f8d4e..551068f4b836 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -6544,7 +6544,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, } if (fl_flags & FL_SLEEP) { - nbl->nbl_time = jiffies; + nbl->nbl_time = get_seconds(); spin_lock(&nn->blocked_locks_lock); list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked); list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru); diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index ce32ba445343..c1bb6a5ecf57 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h @@ -605,7 +605,7 @@ static inline bool nfsd4_stateid_generation_after(stateid_t *a, stateid_t *b) struct nfsd4_blocked_lock { struct list_head nbl_list; struct list_head nbl_lru; - unsigned long nbl_time; + time_t nbl_time; struct file_lock nbl_lock; struct knfsd_fh nbl_fh; struct nfsd4_callback nbl_cb; From patchwork Mon Nov 11 20:16:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179128 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7142682ilf; Mon, 11 Nov 2019 12:17:15 -0800 (PST) X-Google-Smtp-Source: APXvYqy4cRpdbGkE4vCEfU6wHcLEKRknJVF34B93pDSFnwL7K9GLZUva4AD7wFMeiIY5kE0T0gw/ X-Received: by 2002:a50:c20a:: with SMTP id n10mr29170057edf.120.1573503435312; Mon, 11 Nov 2019 12:17:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503435; cv=none; d=google.com; s=arc-20160816; b=I8kLXbh4n5ZoTlrPg+tRgvICVziAe0E1ycptNqNPJkAxi4OIAisyXEubSxpM1RztUx gAdat32f8RNn9dLgFpdvowkUrcUkLmgsyJPXU27JA6wnPgMMW7Cje1qbU/gDwB9jo0Vc e4sQRSi10DtNemF2vNAU29dSSPQnCePvbm/7sWjeteYL0xVO+xSLXpSUImgwAlRPy4Ns UvVhmcrgZS+PVJrgcj1eW7ezeDszPLYw7aGoT/nStrnJRKHvdC0BBRS9ugJzyfed11XR qsnTN9LFDtoKVcFKVKtJgJAohf5me8RofVoJfknNqlKy9jeR8f4hOl4+u9bFZBJo9xaI 6s2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=LYDSV6XfroyONjnILYxoVVjkfBp+vDeTSEdzv72xM68=; b=IX9Ej7SDkPJNrsHuwZbUTnCwJIDRFYsoH9ZWWQqZXJy4mD0syjPgJRmrVHjQqOIAqX XG/RME+AQzQMirWmqkMHxErrakCNlm8MHhZMb3Ll9b+AC5s1ID6ySYyhaMEHURDfZPbH G48LwwMbWVNaYWydS35kbR+vYZkPIASeBLQAEv7j0NllZhaGL+NLxPh/m4zrSkPK1HjQ 0djKqkv35pcXoNr9hIhVjTQVvAHCr7DtVXDdIwxYnoNAHSg14Opd5D2HsRpXqX9WNjHR JOPyY3foCu3ivd0AsENbri9vUn8F6pp5lprErL8rY0jzSZgTFV+dSmyt+Ab1yob7n6JH +mdQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f12si13161486edc.1.2019.11.11.12.17.15; Mon, 11 Nov 2019 12:17:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727201AbfKKURL (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:11 -0500 Received: from mout.kundenserver.de ([212.227.17.24]:35781 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727547AbfKKURH (ORCPT ); Mon, 11 Nov 2019 15:17:07 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1N9Mh8-1hrbux3uHE-015LNL; Mon, 11 Nov 2019 21:16:52 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 17/19] nfsd: use boottime for lease expiry alculation Date: Mon, 11 Nov 2019 21:16:37 +0100 Message-Id: <20191111201639.2240623-18-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:jPdZ360zyY+5fgLUezOKUhaYVusjS3JiPnSGPwbGfHdxE8ChLyl QCxLepfo+Nh/rOuaNg5KTSFilvaLGm0cXqKCdEi50APYCi2fJMaDLusGbc079mnWU8ejCht aTKblR/tki2TmfYAqS4L09shHHFYPaVTBPER54BEdBsBStLhslI1ZNXBduyLJ97lLL1j0C6 FTg+fYKU/cCBXKbYepnbQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:7UrD5xUtniU=:KU7tbX6EJjFUAHWv8yHM6z 51R9Ejw9e2d3L/P0HTAzKenS60OGiTVvpfsVPVZHgTLNdUmNVe4D3TnuRWnkw/yE32hwD7R7/ JzpJzqYiSZmlC5CEvHUFBmsAqm5UZjjCqQN+zTG85dy3pcwuFwoA3UXbOmComEsQydYhUlnRa Em5iBM+XAH3ujxQxEf18heWnUV+P4/h2KTEzw1+NVrjs1IlDyM9w/MEZglhlfOdQQWLifYoL0 uDrniDCLXs7maMhFsigQnp59G1ixJXa2ISm3sMySLo2BMnUe/ywMZSD+CxWhuxagFROC8/3Jn fx+eHM6/KnIXH0bvALIfxney4fIKb5OOiKAZhUPTOLd5+8dvVLVR20CNlfjIfEsUttZIyW3fd gDdiqdkZQjcyHbMw1vA4O2xqF0O26rRFmSTUag2P59HepGA3MPwcFBtsbm6JmkAuzlkGarZ3f OjQQ1RLLLoN9zwNMP1nFyAHRKYr8e8gk4XoHIZk4FPR8XsF0kB6omBK9tHJA6E/FV8ni9Cm6B aHj8hJJyUvBHqUUqPatTga0ZTiDRybvzmD/o9+EBTHcxdYDTlI0inLfGcuJQoP4UdYBiEpmOr IHc8S74uSEdqqqrTHUH5240CULXOwJwo0KkCUxwYMBM8ndlMP9qZvFqmXHJ7pF835I1PqH+3j dEMRQYJ7tTSAg0yFapvPoQxIArux5afyj3sQyNTiTfNFwUirN0nOEIzDsZASPyV85h+z+SA/s K8xdnsULQMW4g4ElvxRQWgBf1XMqnD8wQr7wv6yIdaHT4xNChdMV3UswTsRviLK7WOGZ/fFa9 /rMjHdjqvsDgkCe3hcmnUJl+mVyBAen4X5WQoYwHNSCVuBA5qR2DXmBLPKxmC78+y2GsfMTAu x8qcRzx73KyB2/a6U0Jw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A couple of time_t variables are only used to track the state of the lease time and its expiration. The code correctly uses the 'time_after()' macro to make this work on 32-bit architectures even beyond year 2038, but the get_seconds() function and the time_t type itself are deprecated as they behave inconsistently between 32-bit and 64-bit architectures and often lead to code that is not y2038 safe. As a minor issue, using get_seconds() leads to problems with concurrent settimeofday() or clock_settime() calls, in the worst case timeout never triggering after the time has been set backwards. Change nfsd to use time64_t and ktime_get_boottime_seconds() here. This is clearly excessive, as boottime by itself means we never go beyond 32 bits, but it does mean we handle this correctly and consistently without having to worry about corner cases and should be no more expensive than the previous implementation on 64-bit architectures. The max_cb_time() function gets changed in order to avoid an expensive 64-bit division operation, but as the lease time is at most one hour, there is no change in behavior. Signed-off-by: Arnd Bergmann --- fs/nfsd/netns.h | 4 ++-- fs/nfsd/nfs4callback.c | 7 ++++++- fs/nfsd/nfs4state.c | 41 +++++++++++++++++++---------------------- fs/nfsd/nfsctl.c | 6 +++--- fs/nfsd/state.h | 8 ++++---- 5 files changed, 34 insertions(+), 32 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index 29bbe28eda53..2baf32311e00 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h @@ -92,8 +92,8 @@ struct nfsd_net { bool in_grace; const struct nfsd4_client_tracking_ops *client_tracking_ops; - time_t nfsd4_lease; - time_t nfsd4_grace; + time64_t nfsd4_lease; + time64_t nfsd4_grace; bool somebody_reclaimed; bool track_reclaim_completes; diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 524111420b48..b03d6bf1b1bc 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -823,7 +823,12 @@ static const struct rpc_program cb_program = { static int max_cb_time(struct net *net) { struct nfsd_net *nn = net_generic(net, nfsd_net_id); - return max(nn->nfsd4_lease/10, (time_t)1) * HZ; + + /* nfsd4_lease is set to at most one hour */ + if (WARN_ON_ONCE(nn->nfsd4_lease > 3600)) + return 360 * HZ; + + return max(((u32)nn->nfsd4_lease)/10, 1u) * HZ; } static const struct cred *get_backchannel_cred(struct nfs4_client *clp, struct rpc_clnt *client, struct nfsd4_session *ses) diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 551068f4b836..885a09b3a2c0 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -170,7 +170,7 @@ renew_client_locked(struct nfs4_client *clp) clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id); list_move_tail(&clp->cl_lru, &nn->client_lru); - clp->cl_time = get_seconds(); + clp->cl_time = ktime_get_boottime_seconds(); } static void put_client_renew_locked(struct nfs4_client *clp) @@ -2612,7 +2612,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name, gen_clid(clp, nn); kref_init(&clp->cl_nfsdfs.cl_ref); nfsd4_init_cb(&clp->cl_cb_null, clp, NULL, NFSPROC4_CLNT_CB_NULL); - clp->cl_time = get_seconds(); + clp->cl_time = ktime_get_boottime_seconds(); clear_bit(0, &clp->cl_cb_slot_busy); copy_verf(clp, verf); memcpy(&clp->cl_addr, sa, sizeof(struct sockaddr_storage)); @@ -4277,7 +4277,7 @@ move_to_close_lru(struct nfs4_ol_stateid *s, struct net *net) last = oo->oo_last_closed_stid; oo->oo_last_closed_stid = s; list_move_tail(&oo->oo_close_lru, &nn->close_lru); - oo->oo_time = get_seconds(); + oo->oo_time = ktime_get_boottime_seconds(); spin_unlock(&nn->client_lock); if (last) nfs4_put_stid(&last->st_stid); @@ -4372,7 +4372,7 @@ static void nfsd4_cb_recall_prepare(struct nfsd4_callback *cb) */ spin_lock(&state_lock); if (dp->dl_time == 0) { - dp->dl_time = get_seconds(); + dp->dl_time = ktime_get_boottime_seconds(); list_add_tail(&dp->dl_recall_lru, &nn->del_recall_lru); } spin_unlock(&state_lock); @@ -5178,9 +5178,8 @@ nfsd4_end_grace(struct nfsd_net *nn) */ static bool clients_still_reclaiming(struct nfsd_net *nn) { - unsigned long now = (unsigned long) ktime_get_real_seconds(); - unsigned long double_grace_period_end = (unsigned long)nn->boot_time + - 2 * (unsigned long)nn->nfsd4_lease; + time64_t double_grace_period_end = nn->boot_time + + 2 * nn->nfsd4_lease; if (nn->track_reclaim_completes && atomic_read(&nn->nr_reclaim_complete) == @@ -5193,12 +5192,12 @@ static bool clients_still_reclaiming(struct nfsd_net *nn) * If we've given them *two* lease times to reclaim, and they're * still not done, give up: */ - if (time_after(now, double_grace_period_end)) + if (ktime_get_boottime_seconds() > double_grace_period_end) return false; return true; } -static time_t +static time64_t nfs4_laundromat(struct nfsd_net *nn) { struct nfs4_client *clp; @@ -5207,8 +5206,8 @@ nfs4_laundromat(struct nfsd_net *nn) struct nfs4_ol_stateid *stp; struct nfsd4_blocked_lock *nbl; struct list_head *pos, *next, reaplist; - time_t cutoff = get_seconds() - nn->nfsd4_lease; - time_t t, new_timeo = nn->nfsd4_lease; + time64_t cutoff = ktime_get_boottime_seconds() - nn->nfsd4_lease; + time64_t t, new_timeo = nn->nfsd4_lease; dprintk("NFSD: laundromat service - starting\n"); @@ -5222,7 +5221,7 @@ nfs4_laundromat(struct nfsd_net *nn) spin_lock(&nn->client_lock); list_for_each_safe(pos, next, &nn->client_lru) { clp = list_entry(pos, struct nfs4_client, cl_lru); - if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) { + if (clp->cl_time > cutoff) { t = clp->cl_time - cutoff; new_timeo = min(new_timeo, t); break; @@ -5245,7 +5244,7 @@ nfs4_laundromat(struct nfsd_net *nn) spin_lock(&state_lock); list_for_each_safe(pos, next, &nn->del_recall_lru) { dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru); - if (time_after((unsigned long)dp->dl_time, (unsigned long)cutoff)) { + if (dp->dl_time > cutoff) { t = dp->dl_time - cutoff; new_timeo = min(new_timeo, t); break; @@ -5265,8 +5264,7 @@ nfs4_laundromat(struct nfsd_net *nn) while (!list_empty(&nn->close_lru)) { oo = list_first_entry(&nn->close_lru, struct nfs4_openowner, oo_close_lru); - if (time_after((unsigned long)oo->oo_time, - (unsigned long)cutoff)) { + if (oo->oo_time > cutoff) { t = oo->oo_time - cutoff; new_timeo = min(new_timeo, t); break; @@ -5296,8 +5294,7 @@ nfs4_laundromat(struct nfsd_net *nn) while (!list_empty(&nn->blocked_locks_lru)) { nbl = list_first_entry(&nn->blocked_locks_lru, struct nfsd4_blocked_lock, nbl_lru); - if (time_after((unsigned long)nbl->nbl_time, - (unsigned long)cutoff)) { + if (nbl->nbl_time > cutoff) { t = nbl->nbl_time - cutoff; new_timeo = min(new_timeo, t); break; @@ -5314,7 +5311,7 @@ nfs4_laundromat(struct nfsd_net *nn) free_blocked_lock(nbl); } out: - new_timeo = max_t(time_t, new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT); + new_timeo = max_t(time64_t, new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT); return new_timeo; } @@ -5324,13 +5321,13 @@ static void laundromat_main(struct work_struct *); static void laundromat_main(struct work_struct *laundry) { - time_t t; + time64_t t; struct delayed_work *dwork = to_delayed_work(laundry); struct nfsd_net *nn = container_of(dwork, struct nfsd_net, laundromat_work); t = nfs4_laundromat(nn); - dprintk("NFSD: laundromat_main - sleeping for %ld seconds\n", t); + dprintk("NFSD: laundromat_main - sleeping for %lld seconds\n", t); queue_delayed_work(laundry_wq, &nn->laundromat_work, t*HZ); } @@ -6544,7 +6541,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, } if (fl_flags & FL_SLEEP) { - nbl->nbl_time = get_seconds(); + nbl->nbl_time = ktime_get_boottime_seconds(); spin_lock(&nn->blocked_locks_lock); list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked); list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru); @@ -7704,7 +7701,7 @@ nfs4_state_start_net(struct net *net) nfsd4_client_tracking_init(net); if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0) goto skip_grace; - printk(KERN_INFO "NFSD: starting %ld-second grace period (net %x)\n", + printk(KERN_INFO "NFSD: starting %lld-second grace period (net %x)\n", nn->nfsd4_grace, net->ns.inum); queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_grace * HZ); return 0; diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index 11b42c523f04..aace740d5a92 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c @@ -956,7 +956,7 @@ static ssize_t write_maxconn(struct file *file, char *buf, size_t size) #ifdef CONFIG_NFSD_V4 static ssize_t __nfsd4_write_time(struct file *file, char *buf, size_t size, - time_t *time, struct nfsd_net *nn) + time64_t *time, struct nfsd_net *nn) { char *mesg = buf; int rv, i; @@ -984,11 +984,11 @@ static ssize_t __nfsd4_write_time(struct file *file, char *buf, size_t size, *time = i; } - return scnprintf(buf, SIMPLE_TRANSACTION_LIMIT, "%ld\n", *time); + return scnprintf(buf, SIMPLE_TRANSACTION_LIMIT, "%lld\n", *time); } static ssize_t nfsd4_write_time(struct file *file, char *buf, size_t size, - time_t *time, struct nfsd_net *nn) + time64_t *time, struct nfsd_net *nn) { ssize_t rv; diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index c1bb6a5ecf57..e5795aad0404 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h @@ -132,7 +132,7 @@ struct nfs4_delegation { struct list_head dl_recall_lru; /* delegation recalled */ struct nfs4_clnt_odstate *dl_clnt_odstate; u32 dl_type; - time_t dl_time; + time64_t dl_time; /* For recall: */ int dl_retries; struct nfsd4_callback dl_recall; @@ -310,7 +310,7 @@ struct nfs4_client { #endif struct xdr_netobj cl_name; /* id generated by client */ nfs4_verifier cl_verifier; /* generated by client */ - time_t cl_time; /* time of last lease renewal */ + time64_t cl_time; /* time of last lease renewal */ struct sockaddr_storage cl_addr; /* client ipaddress */ bool cl_mach_cred; /* SP4_MACH_CRED in force */ struct svc_cred cl_cred; /* setclientid principal */ @@ -448,7 +448,7 @@ struct nfs4_openowner { */ struct list_head oo_close_lru; struct nfs4_ol_stateid *oo_last_closed_stid; - time_t oo_time; /* time of placement on so_close_lru */ + time64_t oo_time; /* time of placement on so_close_lru */ #define NFS4_OO_CONFIRMED 1 unsigned char oo_flags; }; @@ -605,7 +605,7 @@ static inline bool nfsd4_stateid_generation_after(stateid_t *a, stateid_t *b) struct nfsd4_blocked_lock { struct list_head nbl_list; struct list_head nbl_lru; - time_t nbl_time; + time64_t nbl_time; struct file_lock nbl_lock; struct knfsd_fh nbl_fh; struct nfsd4_callback nbl_cb; From patchwork Mon Nov 11 20:16:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179130 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7142810ilf; Mon, 11 Nov 2019 12:17:22 -0800 (PST) X-Google-Smtp-Source: APXvYqyaiCEXi8V/0pOJnSOW8MJlbveU4h0R3dKeAHv9UHgUIGuVoUJkU1NMwlTlWfuYkqMHHBRU X-Received: by 2002:a50:fb8d:: with SMTP id e13mr27907712edq.213.1573503441843; Mon, 11 Nov 2019 12:17:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503441; cv=none; d=google.com; s=arc-20160816; b=JJAQkyaXwVOLka1ni6lCfnpH6uBKNsEXo2I9/NCKZTLe1LK5yt9G0RFJloDgPY90nL o39GMO0OLBik6rOCX1AR1INxPB6LbNYSJRntML/hPoqrFn8bzrfpci28Sb2oU2FEI8UU Dlc5zAtIlXevX481KttscekH5f6KYcV7i5kXITjUHh7wUH70SOlT+llBXK7ngl+O3pek yEWOYs9B0+QsB6rVcN2Z5jhwwsXOiq0P6/QKqUnWHAefxhZFk+gjJlhE/EGjxalCl9l3 bjLTgq8VB80rF/kr5Iz4K4HTIocnMCudOSFfOSX7lQsyx39fbblADGEPKRcEwm5HXR2c DlQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=OqYbjmIJzt7lEdwMnYpEAS/QwUMH5BbFgt3BMU5l97o=; b=bo8L2CJQZ7qWbq189CIyUKUpqQIvmFSIVV4/HFj5WnLh5exVtyE7ZPKKLov2/9MC+U FAQVvoWVYiIikjuUW4Mf5WEhOr2qBCm3P5SWsxDld6AjkWf2X6XrMo3pDyl26hF7KcbA EYi2w5Q32+xoP+3m+DiE7WK6FViUbbXgV10inajnQBVOVFH7DeKHN/IEF7YaJYhuaL0o +Je765XYn13jbESYeSLpWTqPO4n5E0WpDp28svWRUpPRD9GkKFfXiuiwnekB3mRts5N9 3tqE5hHo9MUUFY6yp0SnqxpQnX6M/xHhpuVlQvdLsA2/GcrP1W+bmMNEhR0VJfipgsnf PQpA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id gr19si2263040ejb.232.2019.11.11.12.17.21; Mon, 11 Nov 2019 12:17:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727709AbfKKURT (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:19 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:54213 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727103AbfKKURK (ORCPT ); Mon, 11 Nov 2019 15:17:10 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1Mate1-1ht0Yh12Ed-00cNxc; Mon, 11 Nov 2019 21:16:52 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 18/19] nfsd: use ktime_get_real_seconds() in nfs4_verifier Date: Mon, 11 Nov 2019 21:16:38 +0100 Message-Id: <20191111201639.2240623-19-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:3MZ/g5jxoKowkWLqlAfuJN7w4g+Y5UGMW9ve+71EABUtr76lYR3 6Aay31QafEpf1haodQTU7BXFpmYpzicHHH9yi4z7JPgP9ViZds/DpxNh5frARpPdRQqm+0R uktE0QcKl8CDcOeJWR27whgguX5Bw1UmVC4KfMw63AZdZMR9XkwlMcxMafA6QE28cAdQ32o s8VXRovcg4h4RrRCsiSxQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:z0WOA+1LHJI=:5SchLrpliskcZbSi2buxVb lagvOeB0sNZIRBE0oR0YRFXsSzh+M15xiFTdplHM7hJNqWffA4CiwxDahtpYjI1Cu4zvwJBh5 s3TEaHVY8I0BOC/LrzvFmOBR0AkQbYWT+VQmCzPHE4f2cx6ZmZwEwl2SpPpoW7W+qdA802jPA xBgX3qoLC5ORVM4cV4AIvbH0uxobO/xbris+BxQYjLtsIKucEfo628TurEeKTXc8Aw3SPq5I7 5aGa0C9ZP/oVAixGYOD1tk6Rrjy5ACuaYCvoXm08x6k9u6BvtiSXyAv0DAWyDwATt+eDXFdAF kWhvy0HOdxsKY592R5ZOgf1qMgW2PXrfRlI0PKEM5rO5tLpuP2Ibtst7IqJJOSuXgDUftc7+N R7Rpl5LjZaMdj7p1ZLK4NtzLLqbfPAmdD2O5tul8BvSI5JMtqu3JxCjEirGYPKrKj/8nJ3mqd LuNMzhM8gMIN2VFYXZBVGkXUabcolx3XriQh9GrTBoqCqR+8YF0Le0L5sj32DkUyDKCEYUSPL R8V2kJoq0UDrY3rAKCckZ+3DwpIEw9IEeCTTfdVcDXcWxRYs96aX/aivEzlBSA11M68ieMoOg U4kQtBQfHaBb1tpafDDBD5Ci3Xgqy9eK05C6Amr6689o+2WNdmGDZdXJW9HOGcD2x9xe2FSoD LTaRkXo1Q7b8498ijT6YhTvWh9rDBLFYCvK4UqBhGPLZBVhy0gLKaRjHKeAbqoLDGWM80r5So 8ljr6kfb6W8AS9FMXTQ/2vcLpn5vVqeztV/Jab1Xo0DSbZTR5zFV3p+w0w/ljKXhKxFGCA/c6 /p2f5wL7A0IxlZhHS8JUTCkqnJcjqqfef7ybbRnkloDRAHNcmSIudCh1NLRqs0cz+KVXf41NS IHAZvSYCDqlyofiEiSNQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org gen_confirm() generates a unique identifier based on the current time. This overflows in year 2038, but that is harmless since it generally does not lead to duplicates, as long as the time has been initialized by a real-time clock or NTP. Using ktime_get_boottime_seconds() or ktime_get_seconds() would avoid the overflow, but it would be more likely to result in non-unique numbers. Signed-off-by: Arnd Bergmann --- fs/nfsd/nfs4state.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.20.0 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 885a09b3a2c0..cb416b9f6536 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -2215,7 +2215,7 @@ static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn) * This is opaque to client, so no need to byte-swap. Use * __force to keep sparse happy */ - verf[0] = (__force __be32)get_seconds(); + verf[0] = (__force __be32)(u32)ktime_get_real_seconds(); verf[1] = (__force __be32)nn->clverifier_counter++; memcpy(clp->cl_confirm.data, verf, sizeof(clp->cl_confirm.data)); } From patchwork Mon Nov 11 20:16:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 179135 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp7143292ilf; Mon, 11 Nov 2019 12:17:44 -0800 (PST) X-Google-Smtp-Source: APXvYqzVqT6EcXJ51KaMzQyH/veMT2wMSj/i9m2rBCJRep5iRp5zuBdI3NuAxALGV4abpU6QN/r1 X-Received: by 2002:a50:ff12:: with SMTP id a18mr28120310edu.200.1573503464593; Mon, 11 Nov 2019 12:17:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573503464; cv=none; d=google.com; s=arc-20160816; b=ID3TsICSbw1scdafkqk5+x+g/ZcA+4jeK26xt2WAMy3Wu8rjQp3aoJV8b2KicAenVz ETdgPgVtJTGA7+NAa9DL912RXRnR7Viy1DIbVIr0hvsx2rHz0gKUGyR5NS0JjnhopXU5 JpewOJ2z5zfKzk5EB+1BDvGb5olYgAuZAggCgqLTisAYzowZtZkcouBJTvj2MdlfRMiW 2pvyh0piPRSS3Zb2cdxv926cDFsgJoqfwP7mL3ghNVq/9KvqCAy34+53j8kWW/SPCWhC kvxKxdIb3A05JwODlqtp6HtkyVbnM7HRs6ON06u9oa57POuViTvpX4GHzWR3bhpinOTz H5qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=YnRPHpBOfVS5oUT0+a0ZtJDLH3UmaGs07nwmi2mwJ9o=; b=dd2qF/2rY/gW53iTUxiXCTmQNiZE9hwNxSE1MSxQCmWLA+MnrJDit0inhRE5x19a/r /Jp0PHpWHFz4XzWBmHx00rNsoqiOnfYQVzHpEmm/u2kITo6Dd7VfFb8zMzE2N4MdCULu QQa7O5jmgiV07tAHO69ra2go1CFu4dLO8Xv0HUI6U8SwwVqBVJASuIsHMHhQhCcBbNdP Z0s/SSZ4DRfEWW7GJkxfOs9fxNvINDHdxlqtKALJNinRnEV8UyjPIEklO981c0mHQyZk JljURvVed+nd8EtYhuOJFuudur2BlV4mB5s4TXkdInkIwbBILZrONRkfTCzen39Gc7nj 9RNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 63si12912279edp.302.2019.11.11.12.17.44; Mon, 11 Nov 2019 12:17:44 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727790AbfKKURm (ORCPT + 26 others); Mon, 11 Nov 2019 15:17:42 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:42367 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727059AbfKKURD (ORCPT ); Mon, 11 Nov 2019 15:17:03 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MiJdI-1i0zpq2YCs-00fOE5; Mon, 11 Nov 2019 21:16:52 +0100 From: Arnd Bergmann To: linux-nfs@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Trond Myklebust , Anna Schumaker Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: [PATCH 19/19] nfsd: remove nfs4_reset_lease() declarations Date: Mon, 11 Nov 2019 21:16:39 +0100 Message-Id: <20191111201639.2240623-20-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191111201639.2240623-1-arnd@arndb.de> References: <20191111201639.2240623-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:iafSuqH4Bp5e/AWz4sqAojsBIoYJnl02pkxascDjDPERrJsK5XY LuEVM2fqvh7m8JQnJKf732b2ymBeNnsygXViheIEE3f6FrCguecj23HqhwZRfpUdu80LURB gckupp9jrTa2thabVPppYnnMb8tsb6lU4wvWKhYMJg5DALwIuE3EC/1jiQkFqODqYrE958R YtJs0Lv6+joejC+leu3ZQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:xGriYet1jFg=:/7jxH/nP273V1JjwioFy5f weSwzG82+77qaVH+KI7EcZrjwsUGhIVamdtpqMdnbCs36cuBxpsagITBnkyJngB6ZGKtZ/1kk lXrvwbV4AXeKGg1GnNOXhTM0GP4rP7rfBY7mEfeqiu9upppe0mKPZTlIVcip841Qcqx3Ma0nn vePqUtm2Y7a2NU1NHIeBQemiMDkQfV/Z+tCobAE2xfIsTLpi99QRU0FZnGbg7fldgd2XWy8V0 JpwSqlZKos7f1wWwb7VgMYAHaLisxIzb3JX81eFVmTLbX0uNKMD0voZNZ+cWheh3i+HJaqbsF tKIOQ0ll6Y+Q6hndX7mZWCQdVFUeLAMDBSBgoLUs1nbH5a0xdOX7a6gz6ItLyU+BqP4KXH2DV rDFIpKRqnZqWvvYTdVqLx23v++HLYTnOu8E7My6GxofEUC3ePXcYWIRR8hp65uR15AdFRV/MS CLPyY0OiYkmJh7SU8TaQNza5iokt60ZZfr/rVVCv827HunPlTwtGV/AuAxLsMV2WYFGAg48P7 Qb69Dlyva9zd4MpPR06pUmR5em8CsMZRDsmynkKANk1Xu6ZpJeQ/388Shfw8bo9PhTVlWZ2n7 QAJx6wb8JPs7O0Wr12Hw2Ia0MvWpv1iA2vrcuoqlQ83cQLkywWKHRy0Lbrer7uG5YE+NuZByH SbTt0S3526fDNdnV8L9Yy2AAdw33Uz61+oC37Rx68D2Oc9JVDqrXcE66K1MIx/I5q2aVTcsPv c3SQzwHmdgY8Ub3y3w4m/EicJHOWEJZtHHr/RQiDBOa7uxazVPKTyk+onqlmKdEX+pFXM1jdX i754BZt1xhazqH80w7YY2OHBa7aaZ4CMa4ltQuuH/DfirTbR/AAZy3V6/VagRnhk31J7oFSZ4 7GX3Mi2TvHQhTkiGcQZw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The function was removed a long time ago, but the declaration and a dummy implementation are still there, referencing the deprecated time_t type. Remove both. Fixes: f958a1320ff7 ("nfsd4: remove unnecessary lease-setting function") Signed-off-by: Arnd Bergmann --- fs/nfsd/nfsd.h | 2 -- 1 file changed, 2 deletions(-) -- 2.20.0 diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h index af2947551e9c..e74979b5849e 100644 --- a/fs/nfsd/nfsd.h +++ b/fs/nfsd/nfsd.h @@ -142,7 +142,6 @@ int nfs4_state_start(void); int nfs4_state_start_net(struct net *net); void nfs4_state_shutdown(void); void nfs4_state_shutdown_net(struct net *net); -void nfs4_reset_lease(time_t leasetime); int nfs4_reset_recoverydir(char *recdir); char * nfs4_recoverydir(void); bool nfsd4_spo_must_allow(struct svc_rqst *rqstp); @@ -153,7 +152,6 @@ static inline int nfs4_state_start(void) { return 0; } static inline int nfs4_state_start_net(struct net *net) { return 0; } static inline void nfs4_state_shutdown(void) { } static inline void nfs4_state_shutdown_net(struct net *net) { } -static inline void nfs4_reset_lease(time_t leasetime) { } static inline int nfs4_reset_recoverydir(char *recdir) { return 0; } static inline char * nfs4_recoverydir(void) {return NULL; } static inline bool nfsd4_spo_must_allow(struct svc_rqst *rqstp)