linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jim Rees <rees@umich.edu>
To: Boaz Harrosh <bharrosh@panasas.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>,
	linux-nfs@vger.kernel.org, peter honeyman <honey@citi.umich.edu>
Subject: Re: [PATCH v3 03/25] NFS41: Let layoutcommit handle multiple segments
Date: Wed, 27 Jul 2011 19:40:41 -0400	[thread overview]
Message-ID: <20110727234041.GC14319@merit.edu> (raw)
In-Reply-To: <4E307E6F.6090309@panasas.com>

Boaz Harrosh wrote:

  On 07/27/2011 01:58 PM, Jim Rees wrote:
  >   But I thought for simplicity since this patchset was reviewed then, I've
  >   tested with this patch and it works good as well. If you are going to
  >   break things up, I can test with the minimal patches and report what is
  >   need in Stable. (Is anyone working on it?)
  > 
  > We may have over-squashed that one for block layout.  I can dig up the
  > original patches if necessary, but I'm guessing you probably have them.
  
  Please do. Because by now I'm confused. the first I discovered it was
  by git diff of a branch that worked. I lost tracked of where the code
  was originated from.

Here is just the original multiple segments patch.  This is from the
88-patch set I sent out before Bakeathon.  I don't know if this would still
apply separately.

>From fc3381fa66adfcee4203b5a55ca6605bcfc8dafb Mon Sep 17 00:00:00 2001
From: Peng Tao <bergwolf@gmail.com>
Date: Tue, 31 May 2011 00:42:56 -0400
Subject: [PATCH 03/89] pnfs: let layoutcommit code handle multiple segments

Some layout driver like block will have multiple segments.
Generic code should be able to handle it.
---
 fs/nfs/pnfs.c |   15 ++++++++++++---
 fs/nfs/pnfs.h |    1 +
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index e3d618b..c18cda0 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1193,10 +1193,18 @@ pnfs_try_to_read_data(struct nfs_read_data *rdata,
 static struct pnfs_layout_segment *pnfs_list_write_lseg(struct inode *inode)
 {
 	struct pnfs_layout_segment *lseg, *rv = NULL;
+	loff_t max_pos = 0;
+
+	list_for_each_entry(lseg, &NFS_I(inode)->layout->plh_segs, pls_list) {
+		if (lseg->pls_range.iomode == IOMODE_RW) {
+			if (max_pos < lseg->pls_end_pos)
+				max_pos = lseg->pls_end_pos;
+			if (test_and_clear_bit(NFS_LSEG_LAYOUTCOMMIT, &lseg->pls_flags))
+				rv = lseg;
+		}
+	}
+	rv->pls_end_pos = max_pos;
 
-	list_for_each_entry(lseg, &NFS_I(inode)->layout->plh_segs, pls_list)
-		if (lseg->pls_range.iomode == IOMODE_RW)
-			rv = lseg;
 	return rv;
 }
 
@@ -1211,6 +1219,7 @@ pnfs_set_layoutcommit(struct nfs_write_data *wdata)
 	if (!test_and_set_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) {
 		/* references matched in nfs4_layoutcommit_release */
 		get_lseg(wdata->lseg);
+		set_bit(NFS_LSEG_LAYOUTCOMMIT, &wdata->lseg->pls_flags);
 		wdata->lseg->pls_lc_cred =
 			get_rpccred(wdata->args.context->state->owner->so_cred);
 		mark_as_dirty = true;
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
index 53819d0..c6a9af2 100644
--- a/fs/nfs/pnfs.h
+++ b/fs/nfs/pnfs.h
@@ -36,6 +36,7 @@
 enum {
 	NFS_LSEG_VALID = 0,	/* cleared when lseg is recalled/returned */
 	NFS_LSEG_ROC,		/* roc bit received from server */
+	NFS_LSEG_LAYOUTCOMMIT,	/* layoutcommit bit set for layoutcommit */
 };
 
 struct pnfs_layout_segment {
-- 
1.7.4.2

  reply	other threads:[~2011-07-27 23:40 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-27 18:40 [PATCH v3 00/25] add block layout driver to pnfs client Jim Rees
2011-07-27 18:40 ` [PATCH v3 01/25] pnfs: GETDEVICELIST Jim Rees
2011-07-27 19:33   ` Trond Myklebust
2011-07-28 18:27     ` Benny Halevy
2011-07-27 18:40 ` [PATCH v3 02/25] pnfs: add set-clear layoutdriver interface Jim Rees
2011-07-27 19:36   ` Trond Myklebust
2011-07-27 18:40 ` [PATCH v3 03/25] NFS41: Let layoutcommit handle multiple segments Jim Rees
2011-07-27 20:05   ` Boaz Harrosh
2011-07-27 20:22     ` Trond Myklebust
2011-07-27 20:33       ` Boaz Harrosh
2011-07-27 20:58         ` Jim Rees
2011-07-27 21:09           ` Boaz Harrosh
2011-07-27 23:40             ` Jim Rees [this message]
2011-07-28  0:12               ` Boaz Harrosh
2011-07-28  2:02                 ` tao.peng
2011-07-28  3:19                 ` Jim Rees
2011-07-27 18:40 ` [PATCH v3 04/25] NFS41: save layoutcommit cred after first successful layoutget Jim Rees
2011-07-27 19:47   ` Trond Myklebust
2011-07-28  3:29     ` tao.peng
2011-07-27 18:40 ` [PATCH v3 05/25] pnfs: ask for layout_blksize and save it in nfs_server Jim Rees
2011-07-27 18:40 ` [PATCH v3 06/25] pnfs: cleanup_layoutcommit Jim Rees
2011-07-27 19:53   ` Trond Myklebust
2011-07-27 20:20     ` Boaz Harrosh
2011-07-27 20:25       ` Trond Myklebust
2011-07-27 20:42         ` Boaz Harrosh
2011-07-27 20:59           ` Trond Myklebust
2011-07-27 21:33             ` Boaz Harrosh
2011-07-27 18:40 ` [PATCH v3 07/25] pnfsblock: add blocklayout Kconfig option, Makefile, and stubs Jim Rees
2011-07-27 18:40 ` [PATCH v3 08/25] pnfsblock: basic extent code Jim Rees
2011-07-27 18:40 ` [PATCH v3 09/25] pnfsblock: add device operations Jim Rees
2011-07-27 18:40 ` [PATCH v3 10/25] pnfsblock: remove " Jim Rees
2011-07-27 18:40 ` [PATCH v3 11/25] pnfsblock: lseg alloc and free Jim Rees
2011-07-27 18:40 ` [PATCH v3 12/25] pnfsblock: merge extents Jim Rees
2011-07-27 18:40 ` [PATCH v3 13/25] pnfsblock: call and parse getdevicelist Jim Rees
2011-07-27 18:40 ` [PATCH v3 14/25] pnfsblock: xdr decode pnfs_block_layout4 Jim Rees
2011-07-27 18:40 ` [PATCH v3 15/25] pnfsblock: bl_find_get_extent Jim Rees
2011-07-27 18:40 ` [PATCH v3 16/25] pnfsblock: add extent manipulation functions Jim Rees
2011-07-27 18:40 ` [PATCH v3 17/25] pnfsblock: merge rw extents Jim Rees
2011-07-27 18:40 ` [PATCH v3 18/25] pnfsblock: encode_layoutcommit Jim Rees
2011-07-27 18:40 ` [PATCH v3 19/25] pnfsblock: cleanup_layoutcommit Jim Rees
2011-07-27 18:40 ` [PATCH v3 20/25] pnfsblock: bl_read_pagelist Jim Rees
2011-07-27 20:09   ` Trond Myklebust
2011-07-27 18:40 ` [PATCH v3 21/25] pnfsblock: bl_write_pagelist Jim Rees
2011-07-27 20:11   ` Trond Myklebust
2011-07-27 18:40 ` [PATCH v3 22/25] pnfsblock: note written INVAL areas for layoutcommit Jim Rees
2011-07-27 20:13   ` Trond Myklebust
2011-07-28  2:30     ` tao.peng
2011-07-27 18:40 ` [PATCH v3 23/25] pnfsblock: use pageio_ops api Jim Rees
2011-07-27 20:15   ` Trond Myklebust
2011-07-28  2:27     ` tao.peng
2011-07-28  3:52       ` Trond Myklebust
2011-07-28  4:10         ` tao.peng
2011-07-27 18:40 ` [PATCH v3 24/25] pnfsblock: write_pagelist handle zero invalid extents Jim Rees
2011-07-27 18:40 ` [PATCH v3 25/25] NFS41: Drop lseg ref before fallthru to MDS Jim Rees
2011-07-27 20:16   ` Trond Myklebust

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110727234041.GC14319@merit.edu \
    --to=rees@umich.edu \
    --cc=Trond.Myklebust@netapp.com \
    --cc=bharrosh@panasas.com \
    --cc=honey@citi.umich.edu \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).