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