linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH 11/12] NFSv4.1: layoutcommit
@ 2011-03-24 13:57 William A. (Andy) Adamson
  2011-03-24 16:37 ` Benny Halevy
  0 siblings, 1 reply; 15+ messages in thread
From: William A. (Andy) Adamson @ 2011-03-24 13:57 UTC (permalink / raw)
  To: Benny Halevy; +Cc: Fred Isaman, Trond Myklebust, NFS list

>> Only whole file layout support means that there is only one IOMODE_RW layout
>> segment.
>>
>> Signed-off-by: Andy Adamson <andros@netapp.com>
>> Signed-off-by: Alexandros Batsakis <batsakis@netapp.com>
>> Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
>> Signed-off-by: Dean Hildebrand <dhildeb@us.ibm.com>
>> Signed-off-by: Fred Isaman <iisaman@citi.umich.edu>
>> Signed-off-by: Mingyang Guo <guomingyang@nrchpc.ac.cn>
>> Signed-off-by: Tao Guo <guotao@nrchpc.ac.cn>
>> Signed-off-by: Zhang Jingwang <zhangjingwang@nrchpc.ac.cn>
>> Tested-by: Boaz Harrosh <bharrosh@panasas.com>
>> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
>
>The code in this patch is new and different enough from the one I/we
>signed-off originally that they don't make sense here.

Hi Benny

OK with me

>>
>>+             /* references matched in nfs4_layoutcommit_release */
>> +             wdata->lseg->pls_lc_cred =
>> +                     get_rpccred(wdata->args.context->state->owner->so_cred);
>> +             mark_inode_dirty_sync(wdata->inode);
>> +             dprintk("%s: Set layoutcommit for inode %lu ",
>> +                     __func__, wdata->inode->i_ino);
>> +     }
>> +     if (end_pos > wdata->lseg->pls_end_pos)
>> +             wdata->lseg->pls_end_pos = end_pos;
>
> The end_pos is essentially per inode, why maintain it per lseg?
> How do you see this working with multiple lsegs in mind?

The end-pos is per lseg, not per inode - each layoutcommit applies to
a range of WRITES for a layoutsegment over the LAYOUTCOMMIT range.

>From Section 18.42.3
.  The byte-range being committed is
   specified through the byte-range (loca_offset and loca_length).  This
   byte-range MUST overlap with one or more existing layouts previously
   granted via LAYOUTGET


   Also, loca_last_write_offset MUST overlap the range
   described by loca_offset and loca_length.

For the multiple lseg case: if the lsegs are merged, bookeeping
end_pos per lseg just works. If a layoutdriver does not use merged
lsegs, then there is a bit of work to do to walk the list of lsegs and
determine the final end_pos for a given LAYOUTCOMMIT.  If there are
multiple non-contiguous lsegs, each used for WRITEs then multiple
LAYOUTCOMMITs will need to be sent, otherwise the LAYOUTCOMMIT
byte-range will not overlap as required.

>> +pnfs_layoutcommit_inode(struct inode *inode, int sync)
>
> "bool sync" makes more sense

>> +{
>> +     struct nfs4_layoutcommit_data *data;
>> +     struct nfs_inode *nfsi = NFS_I(inode);
>> +     struct pnfs_layout_segment *lseg;
>> +     struct rpc_cred *cred;
>> +     loff_t end_pos;
>> +     int status = 0;
>> +
>> +     dprintk("--> %s inode %lu\n", __func__, inode->i_ino);
>> +
>> +     /* Note kzalloc ensures data->res.seq_res.sr_slot == NULL */
>> +     data = kzalloc(sizeof(*data), GFP_NOFS);
>> +     spin_lock(&inode->i_lock);
>> +
> >+     if (!test_and_clear_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) {
>
> previously (i.e. in the linux-pnfs tree :) this function is called only
> if layoutcommit_needed(), now I worry may waste a kzalloc too frequently.
> I suggest testing (and not clearing) NFS_INO_LAYOUTCOMMIT before doing
> the allocation to prevent that.

Agreed.

>> +     end_pos = lseg->pls_end_pos;
>> +     cred = lseg->pls_lc_cred;
>> +     lseg->pls_end_pos = 0;
>> +     lseg->pls_lc_cred = NULL;
>> +
>> +     if (!data) {
>
> eh?
> why not test this before test_and_clear_bit(NFS_INO_LAYOUTCOMMIT ?

Because we should clear the LAYOUTCOMMIT needed information from the inode.
The LAYOUTCOMMIT for the file layout is an optimization. If the client
can't alloc the required buffer, the compound just won't be sent.

-->Andy

^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [PATCH 11/12] NFSv4.1: layoutcommit
@ 2011-03-24 14:45 William A. (Andy) Adamson
  2011-03-24 17:06 ` Benny Halevy
  0 siblings, 1 reply; 15+ messages in thread
From: William A. (Andy) Adamson @ 2011-03-24 14:45 UTC (permalink / raw)
  To: Benny Halevy; +Cc: Fred Isaman, Trond Myklebust, NFS list

Hi Benny

int sync is used because the struct writeback_control->sync_mode (an
enum) is assigned.

-->Andy

>> +pnfs_layoutcommit_inode(struct inode *inode, int sync)
>
> "bool sync" makes more sense

^ permalink raw reply	[flat|nested] 15+ messages in thread
* [PATCH 00/12] NFSv4.1 pnfs wave5 submission (try 2)
@ 2011-03-23 13:27 Fred Isaman
  2011-03-23 13:27 ` [PATCH 11/12] NFSv4.1: layoutcommit Fred Isaman
  0 siblings, 1 reply; 15+ messages in thread
From: Fred Isaman @ 2011-03-23 13:27 UTC (permalink / raw)
  To: linux-nfs; +Cc: Trond Myklebust

This is try 2 of the submission.  The first accidently had Andy's
LAYOUTCOMMIT patch squashed into one of the other patches.  No other
change was made from version 1.



These are the "wave5" pnfs patches, which implement COMMIT to data
server and LAYOUTCOMMIT, using the new rules from the proposed errata
which has come out of the Feb 2011 interim IETF meeting.  At this
point, the intent is that the files layout pNFS client is spec
compliant, though it has some obvious limitations, such as using only
whole file layouts.

These apply to Trond's trond/nfs-for-next branch, and are also available
at git://linux-nfs.org/~iisaman/linux-pnfs.git under the tag
wave5-submission-02

Fred


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2011-03-25  9:38 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-24 13:57 [PATCH 11/12] NFSv4.1: layoutcommit William A. (Andy) Adamson
2011-03-24 16:37 ` Benny Halevy
2011-03-24 16:48   ` Trond Myklebust
2011-03-24 16:54     ` Fred Isaman
2011-03-24 16:58     ` Benny Halevy
2011-03-24 17:15       ` Trond Myklebust
2011-03-25  9:39         ` Benny Halevy
  -- strict thread matches above, loose matches on Subject: below --
2011-03-24 14:45 William A. (Andy) Adamson
2011-03-24 17:06 ` Benny Halevy
2011-03-23 13:27 [PATCH 00/12] NFSv4.1 pnfs wave5 submission (try 2) Fred Isaman
2011-03-23 13:27 ` [PATCH 11/12] NFSv4.1: layoutcommit Fred Isaman
2011-03-23 20:33   ` Benny Halevy
2011-03-23 21:00   ` Christoph Hellwig
2011-03-23 21:15     ` Trond Myklebust
2011-03-23 21:21       ` Christoph Hellwig
2011-03-23 21:26         ` Trond Myklebust

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