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

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