Re: [PATCH 12/16] SQUASHME pnfs-submit: reference layout across layoutcommit

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

 



On Mon, Jul 12, 2010 at 2:27 PM, Benny Halevy <bhalevy@xxxxxxxxxxx> wrote:
> On Jul. 12, 2010, 21:09 +0300, "William A. (Andy) Adamson" <androsadamson@xxxxxxxxx> wrote:
>> On Mon, Jul 12, 2010 at 1:25 PM, Boaz Harrosh <bharrosh@xxxxxxxxxxx> wrote:
>>> On 07/08/2010 01:34 AM, andros@xxxxxxxxxx wrote:
>>>> From: Andy Adamson <andros@xxxxxxxxxx>
>>>>
>>>> Signed-off-by: Andy Adamson <andros@xxxxxxxxxx>
>>>> ---
>>>>  fs/nfs/nfs4proc.c |    2 ++
>>>>  fs/nfs/pnfs.c     |   13 +++++++++++++
>>>>  fs/nfs/pnfs.h     |    1 +
>>>>  3 files changed, 16 insertions(+), 0 deletions(-)
>>>>
>>>> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
>>>> index 6acebc3..f763746 100644
>>>> --- a/fs/nfs/nfs4proc.c
>>>> +++ b/fs/nfs/nfs4proc.c
>>>> @@ -5565,6 +5565,8 @@ static void pnfs_layoutcommit_release(void *lcdata)
>>>>       struct pnfs_layoutcommit_data *data =
>>>>               (struct pnfs_layoutcommit_data *)lcdata;
>>>>
>>>> +     /* Matched by get_layout in pnfs_layoutcommit_inode */
>>>> +     put_layout(data->args.inode);
>>>>       put_rpccred(data->cred);
>>>>       pnfs_layoutcommit_free(lcdata);
>>>>  }
>>>> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
>>>> index aa16e5d..d42c5da 100644
>>>> --- a/fs/nfs/pnfs.c
>>>> +++ b/fs/nfs/pnfs.c
>>>> @@ -354,6 +354,15 @@ put_layout_locked(struct pnfs_layout_type *lo)
>>>>  }
>>>>
>>>>  void
>>>> +put_layout(struct inode *inode)
>>>> +{
>>>> +     spin_lock(&inode->i_lock);
>>>> +     put_layout_locked(NFS_I(inode)->layout);
>>>> +     spin_unlock(&inode->i_lock);
>>>> +
>>>> +}
>>>> +
>>>> +void
>>>>  pnfs_layout_release(struct pnfs_layout_type *lo,
>>>>                   struct nfs4_pnfs_layout_segment *range)
>>>>  {
>>>> @@ -1598,6 +1607,9 @@ pnfs_layoutcommit_inode(struct inode *inode, int sync)
>>>>       __clear_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->layout->pnfs_layout_state);
>>>>       pnfs_get_layout_stateid(&data->args.stateid, nfsi->layout);
>>>>
>>>> +     /* Reference for layoutcommit matched in pnfs_layoutcommit_release */
>>>> +     get_layout(NFS_I(inode)->layout);
>>>> +
>>>
>>> Has of your rules this should be now called get_layout_locked
>>
>> OK
>
> Andy, before you crank another version, I've already merged this patchset
> with obvious fixes into my tree so it might be better to fix that up.
>
> I also fixed a couple other less trivial bugs for which I'm going
> to send patches soon, and I fixed up the obj and block layout alloc/free
> methods to agree with the new API.

OK, Thanks. :)

I'll grab it and we can move forward together from there.

-->Andy
>
> Benny
>
>>
>>
>>>
>>>>       spin_unlock(&inode->i_lock);
>>>>
>>>>       /* Set up layout commit args */
>>>> @@ -1606,6 +1618,7 @@ pnfs_layoutcommit_inode(struct inode *inode, int sync)
>>>>       if (status) {
>>>>               /* The layout driver failed to setup the layoutcommit */
>>>>               put_rpccred(data->cred);
>>>> +             put_layout(inode);
>>>
>>> And it is really nice that put_layout takes an inode and get_layout takes an
>>> struct layout_type.
>>>
>>>>               goto out_free;
>>>>       }
>>>>       status = pnfs4_proc_layoutcommit(data, sync);
>>>> diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
>>>> index 9b0fed4..e04b9d4 100644
>>>> --- a/fs/nfs/pnfs.h
>>>> +++ b/fs/nfs/pnfs.h
>>>> @@ -64,6 +64,7 @@ void pnfs_layout_release(struct pnfs_layout_type *, struct nfs4_pnfs_layout_segm
>>>>  void pnfs_set_layout_stateid(struct pnfs_layout_type *lo,
>>>>                            const nfs4_stateid *stateid);
>>>>  void pnfs_destroy_layout(struct nfs_inode *);
>>>> +void put_layout(struct inode *inode);
>>>>
>>>>  #define PNFS_EXISTS_LDIO_OP(srv, opname) ((srv)->pnfs_curr_ld &&     \
>>>>                                    (srv)->pnfs_curr_ld->ld_io_ops &&  \
>>>
>>> I still think they can all go away.
>>> What is the point of a layout without it's nfsi+inode. And who cares if we free the layout_type structure
>>> 2 milliseconds before, and in the error case?
>>>
>>> Boaz
>>> --
>>> 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
>>>
>
--
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