[pnfs] CVS: nfsv4
Marc Eshel
eshel at almaden.ibm.com
Tue Dec 5 12:39:23 EST 2006
layout_return is what is passed to the file system but we should probably
change it to use nfs4_pnfs_return_layout. Let talk about it in meeting
tomorrow.
Marc.
pnfs-bounces at linux-nfs.org wrote on 12/05/2006 12:09:06 AM:
> Marc, a struct layout_return is defined and initialized in
> nfs4_pnfs_return_layout() but it doesn't seem to be used
> otherwise...
>
> Benny
>
> > @@ -3619,6 +3624,7 @@
> > struct inode *ino = current_fh->fh_dentry->d_inode;
> > struct nfs4_file *fp;
> > struct nfs4_layout *lp = NULL;
> > + struct layout_return lr;
> >
> > dprintk("NFSD: nfs4_pnfs_return_layout\n");
> >
> > @@ -3637,6 +3643,12 @@
> > dprintk("pNFS %s: lp %p\n", __FUNCTION__, lp);
> >
> > if (lp) {
> > + lr.reclaim = 0;
> > + lr.offset = lrp->lr_offset;
> > + lr.length = lrp->lr_length;
> > + lr.iomode = lrp->lr_iomode;
> > + lr.layout_type = lrp->lr_type;
> > + lr.flags = 1; /* update return */
> > if (sb->s_export_op->layout_return) {
> > status =
sb->s_export_op->layout_return(current_fh->fh_dentry->d_inode,
> > lrp);
>
> Marc Eshel (IBM) wrote:
> > CVSROOT: /cvs
> > Module name: nfsv4
> > Changes by: eshel at citi. 2006/12/04 16:42:13
> >
> > Modified files:
> > cvs/pnfs/fs/nfsd: nfs4state.c
> >
> > Log message:
> > Add a flags to nfsd/fs interfaces to indicate if it is a new layout
> > get/return or just update to help the fs to keep track of hold count.
> >
> > ===================================================================
> > RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfsd/nfs4state.c,v
> > retrieving revision 1.18
> > diff -u -r1.18 nfs4state.c
> > --- nfs4state.c 4 Dec 2006 18:10:59 -0000 1.18
> > +++ nfs4state.c 4 Dec 2006 21:35:19 -0000
> > @@ -3414,7 +3414,8 @@
> > lr.offset = lp->lo_offset;
> > lr.length = lp->lo_length;
> > lr.iomode = lp->lo_iomode;
> > - lr.layout_type= lp->lo_layout_type;
> > + lr.layout_type = lp->lo_layout_type;
> > + lr.flags = 0; /* last return */
> >
> > //??? recall layout
> >
> > @@ -3475,6 +3476,8 @@
> > lp->lo_offset = lg->lg_offset;
> > lp->lo_length = lg->lg_length;
> > num_layouts++;
> > + list_add(&lp->lo_perfile, &fp->fi_layouts);
> > + list_add(&lp->lo_perclnt, &clp->cl_layouts);
> > get_nfs4_file(lp->lo_file);
> > dprintk("NFSD alloc_init_layout exit\n");
> > return lp;
> > @@ -3542,6 +3545,19 @@
> > if (fp == NULL)
> > goto out;
> > }
> > + clp = find_confirmed_client((clientid_t *)&lgp->lg_clientid);
> > + dprintk("pNFS %s: clp %p \n", __FUNCTION__, clp);
> > + if (!clp)
> > + goto out;
> > +
> > + lgp->lg_flags = 0;
> > + while (!list_empty(&clp->cl_layouts)) {
> > + lp = list_entry(fp->fi_layouts.next,
> > + struct nfs4_layout, lo_perfile);
> > + //??? if the right layout
> > + lgp->lg_flags = 1; /* update layout */
> > + break;
> > + }
> > if (sb->s_export_op->layout_get) {
> > status = sb->s_export_op->layout_get(current_fh->fh_dentry->d_inode,
> > (void *)lgp);
> > @@ -3566,43 +3582,32 @@
> > if (status)
> > goto out;
> >
> > - while (!list_empty(&fp->fi_layouts)) {
> > - lp = list_entry(fp->fi_layouts.next,
> > - struct nfs4_layout, lo_perfile);
> > - //??? if the right layout
> > - break;
> > + if (!lp) {
> > + lp = pnfs_alloc_init_layout(fp, clp, current_fh, lgp);
> > }
> > - if (lp) {
> > + else {
> > get_nfs4_layout(lp);
> > }
> > - else {
> > - clp = find_confirmed_client((clientid_t
*)&lgp->lg_clientid);
> > - dprintk("pNFS %s: clp %p \n", __FUNCTION__, clp);
> > -
> > - if (clp) {
> > - lp = pnfs_alloc_init_layout(fp, clp, current_fh, lgp);
> > - }
> > - if (lp) {
> > - dprintk("pNFS %s: lp %p\n", __FUNCTION__, lp);
> > - pnfs_hash_layoutget(lp);
> > - goto out;
> > - }
> > - status = nfserr_layouttrylater;
> > -
> > - if (lgp->lg_ops->layout_encode == NULL &&
> > - lgp->lg_type == LAYOUT_NFSV4_FILES)
> > - filelayout_free_layout(lgp->lg_layout);
> > - else
> > - lgp->lg_ops->layout_free(lgp->lg_layout);
> > -
> > - lr.reclaim = 0;
> > - lr.offset = lgp->lg_offset;
> > - lr.length = lgp->lg_length;
> > - lr.iomode = lgp->lg_iomode;
> > - lr.layout_type= lgp->lg_type;
> > - if (sb->s_export_op->layout_return)
> > - sb->s_export_op->layout_return(ino, &lr);
> > + if (lp) {
> > + dprintk("pNFS %s: lp %p\n", __FUNCTION__, lp);
> > + goto out;
> > }
> > + status = nfserr_layouttrylater;
> > +
> > + if (lgp->lg_ops->layout_encode == NULL &&
> > + lgp->lg_type == LAYOUT_NFSV4_FILES)
> > + filelayout_free_layout(lgp->lg_layout);
> > + else
> > + lgp->lg_ops->layout_free(lgp->lg_layout);
> > +
> > + lr.reclaim = 0;
> > + lr.offset = lgp->lg_offset;
> > + lr.length = lgp->lg_length;
> > + lr.iomode = lgp->lg_iomode;
> > + lr.layout_type = lgp->lg_type;
> > + lr.flags = lgp->lg_flags;
> > + if (sb->s_export_op->layout_return)
> > + sb->s_export_op->layout_return(ino, &lr);
> > }
> > out:
> > if (fp)
> > @@ -3619,6 +3624,7 @@
> > struct inode *ino = current_fh->fh_dentry->d_inode;
> > struct nfs4_file *fp;
> > struct nfs4_layout *lp = NULL;
> > + struct layout_return lr;
> >
> > dprintk("NFSD: nfs4_pnfs_return_layout\n");
> >
> > @@ -3637,6 +3643,12 @@
> > dprintk("pNFS %s: lp %p\n", __FUNCTION__, lp);
> >
> > if (lp) {
> > + lr.reclaim = 0;
> > + lr.offset = lrp->lr_offset;
> > + lr.length = lrp->lr_length;
> > + lr.iomode = lrp->lr_iomode;
> > + lr.layout_type = lrp->lr_type;
> > + lr.flags = 1; /* update return */
> > if (sb->s_export_op->layout_return) {
> > status =
sb->s_export_op->layout_return(current_fh->fh_dentry->d_inode,
> > lrp);
> >
> > _______________________________________________
> > pNFS mailing list
> > pNFS at linux-nfs.org
> > http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
More information about the pNFS
mailing list