lkml.org 
[lkml]   [2019]   [Aug]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 10/20] fs: nfs: Initialize filesystem timestamp ranges
    Date
    Fill in the appropriate limits to avoid inconsistencies
    in the vfs cached inode times when timestamps are
    outside the permitted range.

    The time formats for various verious is detailed in the
    RFCs as below:

    https://tools.ietf.org/html/rfc7862(time metadata)
    https://tools.ietf.org/html/rfc7530:

    nfstime4

    struct nfstime4 {
    int64_t seconds;
    uint32_t nseconds;
    };

    https://tools.ietf.org/html/rfc1094

    struct timeval {
    unsigned int seconds;
    unsigned int useconds;
    };

    https://tools.ietf.org/html/rfc1813

    struct nfstime3 {
    uint32 seconds;
    uint32 nseconds;
    };

    Use the limits as per the RFC.

    Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
    Cc: trond.myklebust@hammerspace.com
    Cc: anna.schumaker@netapp.com
    Cc: linux-nfs@vger.kernel.org
    ---
    fs/nfs/super.c | 20 +++++++++++++++++++-
    1 file changed, 19 insertions(+), 1 deletion(-)

    diff --git a/fs/nfs/super.c b/fs/nfs/super.c
    index 703f595dce90..19a76cfa8b1f 100644
    --- a/fs/nfs/super.c
    +++ b/fs/nfs/super.c
    @@ -2382,6 +2382,15 @@ void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info)
    sb->s_flags |= SB_POSIXACL;
    sb->s_time_gran = 1;
    sb->s_export_op = &nfs_export_ops;
    + } else
    + sb->s_time_gran = 1000;
    +
    + if (server->nfs_client->rpc_ops->version != 4) {
    + sb->s_time_min = 0;
    + sb->s_time_max = U32_MAX;
    + } else {
    + sb->s_time_min = S64_MIN;
    + sb->s_time_max = S64_MAX;
    }

    nfs_initialise_sb(sb);
    @@ -2402,7 +2411,6 @@ static void nfs_clone_super(struct super_block *sb,
    sb->s_maxbytes = old_sb->s_maxbytes;
    sb->s_xattr = old_sb->s_xattr;
    sb->s_op = old_sb->s_op;
    - sb->s_time_gran = 1;
    sb->s_export_op = old_sb->s_export_op;

    if (server->nfs_client->rpc_ops->version != 2) {
    @@ -2410,6 +2418,16 @@ static void nfs_clone_super(struct super_block *sb,
    * so ourselves when necessary.
    */
    sb->s_flags |= SB_POSIXACL;
    + sb->s_time_gran = 1;
    + } else
    + sb->s_time_gran = 1000;
    +
    + if (server->nfs_client->rpc_ops->version != 4) {
    + sb->s_time_min = 0;
    + sb->s_time_max = U32_MAX;
    + } else {
    + sb->s_time_min = S64_MIN;
    + sb->s_time_max = S64_MAX;
    }

    nfs_initialise_sb(sb);
    --
    2.17.1
    \
     
     \ /
      Last update: 2019-08-18 19:27    [W:5.369 / U:1.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site