[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