> -----Original Message----- > From: linux-nfs-owner@xxxxxxxxxxxxxxx [mailto:linux-nfs-owner@xxxxxxxxxxxxxxx] On Behalf Of Trond > Myklebust > Sent: Wednesday, November 30, 2011 1:43 AM > To: Peng Tao > Cc: linux-nfs@xxxxxxxxxxxxxxx; bhalevy@xxxxxxxxxx; Peng, Tao > Subject: Re: [PATCH 4/4] pnfsblock: do ask for layout in pg_init > > On Wed, 2011-11-30 at 01:25 +0800, Peng Tao wrote: > > On Wed, Nov 30, 2011 at 12:40 AM, Trond Myklebust > > <Trond.Myklebust@xxxxxxxxxx> wrote: > > > On Fri, 2011-12-02 at 20:52 -0800, Peng Tao wrote: > > >> Asking for layout in pg_init will always make client ask for only 4KB > > >> layout in every layoutget. This way, client drops the IO size information > > >> that is meaningful for MDS in handing out layout. > > >> > > >> In stead, if layout is not find in cache, do not send layoutget > > >> at once. Wait until before issuing IO in pnfs_do_multiple_reads/writes > > >> because that is where we know the real size of current IO. By telling the > > >> real IO size to MDS, MDS will have a better chance to give proper layout. > > > > > > Why can't you just split pnfs_update_layout() into 2 sub-functions > > > instead of duplicating it in private block code? > > Because I wanted to differentiate between no layout header and no > > cached lseg, where the pnfs_update_layout() interface is not enough to > > tell the difference. Of course I can put these all into generic layer. > > I will update the patchset to do it. > > > > > > > > Then call layoutget in your pg_doio() callback instead of adding a > > > redundant pnfs_update_layout to > > > pnfs_do_multiple_reads/pnfs_do_multiple_writes... > > I have considered it before but using private pg_doio() means we will > > have as much duplication of pnfs_generic_pg_read/writepages. > > Why? All you need to do is send the layoutget, and then call the > existing pnfs_generic_pg_read/writepages? > > The difference here is that you're adding that step into > pnfs_generic_pg_read/writepages in patch 3/4. Basically you are adding > block-specific code into an otherwise generic function instead of doing > it cleanly in the block-specific callbacks. I see your point. I used to think that pg_desc takes multiple nfs_read/write_data when calling pnfs_do_multiple_reads/write. So I chose to change it there so that each nfs_read/write_data is treated individually. But apparently for blocklayout, we won't call into nfs_flush_multi alike so pg_desc can be treated as a whole. I will make the change as you suggested. Thanks, Tao > > -- > Trond Myklebust > Linux NFS client maintainer > > NetApp > Trond.Myklebust@xxxxxxxxxx > www.netapp.com > > -- > 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 ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥