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

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

 



On Jul. 12, 2010, 21:28 +0300, "William A. (Andy) Adamson" <androsadamson@xxxxxxxxx> wrote:
> 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.

Super. It's out.
Time for me to call it a day (11 pm here) :-/
Enjoy :)

Benny

> 
> -->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

--
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