lkml.org 
[lkml]   [2021]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 146/329] NFSv4.2 fix handling of sr_eof in SEEKs reply
    Date
    From: Olga Kornievskaia <kolga@netapp.com>

    [ Upstream commit 73f5c88f521a630ea1628beb9c2d48a2e777a419 ]

    Currently the client ignores the value of the sr_eof of the SEEK
    operation. According to the spec, if the server didn't find the
    requested extent and reached the end of the file, the server
    would return sr_eof=true. In case the request for DATA and no
    data was found (ie in the middle of the hole), then the lseek
    expects that ENXIO would be returned.

    Fixes: 1c6dcbe5ceff8 ("NFS: Implement SEEK")
    Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfs/nfs42proc.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
    index 7add6332016a..b85f7d56a155 100644
    --- a/fs/nfs/nfs42proc.c
    +++ b/fs/nfs/nfs42proc.c
    @@ -665,7 +665,10 @@ static loff_t _nfs42_proc_llseek(struct file *filep,
    if (status)
    return status;

    - return vfs_setpos(filep, res.sr_offset, inode->i_sb->s_maxbytes);
    + if (whence == SEEK_DATA && res.sr_eof)
    + return -NFS4ERR_NXIO;
    + else
    + return vfs_setpos(filep, res.sr_offset, inode->i_sb->s_maxbytes);
    }

    loff_t nfs42_proc_llseek(struct file *filep, loff_t offset, int whence)
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-17 17:11    [W:2.328 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site