Re: [PATCH 1/5] NFSv4/pnfs: Ensure we don't miss a file extension

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 19, 2015 at 11:40 AM, Peng Tao <bergwolf@xxxxxxxxxxxxxxx> wrote:
> On Wed, Aug 19, 2015 at 10:50 AM, Peng Tao <bergwolf@xxxxxxxxxxxxxxx> wrote:
>> Hi Trond,
>>
>> Can we please add following patch to stable as well? It not only fixes
>> pnfs write, but also fixes in band writes when delegations are
>> enabled. Without it, I can always get fstest read_write/mctime.t
>> failure with in band IO.
> ah, nvm, speaking too soon. I can still reproduce fstest
> read_write/mctime.t failure on delegation+inband IO with your testing
> branch...
>
> Looking into it...
>
oh, man, we do need the commit to fix delegation+inband IO. My VM's
time got screwed up and my last tests did not include the commit...
sorry again for more noise :(...

> sorry for the noise.
>
>>
>> Thanks,
>> Tao
>>
>> On Thu, Jul 23, 2015 at 11:48 AM, Trond Myklebust
>> <trond.myklebust@xxxxxxxxxxxxxxx> wrote:
>>> pNFS writes don't return attributes, however that doesn't mean that we
>>> should ignore the fact that they may be extending the file. This patch
>>> ensures that if a write is seen to extend the file, then we always set
>>> an attribute barrier, and update the cached file size.
>>>
>>> Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
>>> ---
>>>  fs/nfs/write.c | 15 +++++++++------
>>>  1 file changed, 9 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/fs/nfs/write.c b/fs/nfs/write.c
>>> index 359e9ad596c9..0e6a2b8786b4 100644
>>> --- a/fs/nfs/write.c
>>> +++ b/fs/nfs/write.c
>>> @@ -1378,24 +1378,27 @@ static void nfs_writeback_check_extend(struct nfs_pgio_header *hdr,
>>>  {
>>>         struct nfs_pgio_args *argp = &hdr->args;
>>>         struct nfs_pgio_res *resp = &hdr->res;
>>> +       u64 size = argp->offset + resp->count;
>>>
>>>         if (!(fattr->valid & NFS_ATTR_FATTR_SIZE))
>>> +               fattr->size = size;
>>> +       if (nfs_size_to_loff_t(fattr->size) < i_size_read(hdr->inode)) {
>>> +               fattr->valid &= ~NFS_ATTR_FATTR_SIZE;
>>>                 return;
>>> -       if (argp->offset + resp->count != fattr->size)
>>> -               return;
>>> -       if (nfs_size_to_loff_t(fattr->size) < i_size_read(hdr->inode))
>>> +       }
>>> +       if (size != fattr->size)
>>>                 return;
>>>         /* Set attribute barrier */
>>>         nfs_fattr_set_barrier(fattr);
>>> +       /* ...and update size */
>>> +       fattr->valid |= NFS_ATTR_FATTR_SIZE;
>>>  }
>>>
>>>  void nfs_writeback_update_inode(struct nfs_pgio_header *hdr)
>>>  {
>>> -       struct nfs_fattr *fattr = hdr->res.fattr;
>>> +       struct nfs_fattr *fattr = &hdr->fattr;
>>>         struct inode *inode = hdr->inode;
>>>
>>> -       if (fattr == NULL)
>>> -               return;
>>>         spin_lock(&inode->i_lock);
>>>         nfs_writeback_check_extend(hdr, fattr);
>>>         nfs_post_op_update_inode_force_wcc_locked(inode, fattr);
>>> --
>>> 2.4.3
>>>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux