Re: [PATCH 14/26] NFS: merge _full and _partial read rpc_ops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2012-04-17 at 11:37 -0400, Fred Isaman wrote:
> On Mon, Apr 16, 2012 at 4:28 PM, Myklebust, Trond
> <Trond.Myklebust@xxxxxxxxxx> wrote:
> > On Mon, 2012-04-09 at 16:52 -0400, Fred Isaman wrote:
> >> @@ -64,10 +80,16 @@ void nfs_readhdr_free(struct nfs_pgio_header *hdr)
> >>
> >>  void nfs_readdata_release(struct nfs_read_data *rdata)
> >>  {
> >> +     struct nfs_pgio_header *hdr = rdata->header;
> >> +
> >>       put_nfs_open_context(rdata->args.context);
> >>       if (rdata->pages.pagevec != rdata->pages.page_array)
> >>               kfree(rdata->pages.pagevec);
> >> -     nfs_readhdr_free(rdata->header);
> >> +     if (container_of(hdr, struct nfs_read_header, header) !=
> >> +         container_of(rdata, struct nfs_read_header, rpc_data))
> >> +             kfree(rdata);
> >
> > This looks unnecessarily complicated. How about
> >
> >        if (rdata != &hdr->rpc_data)
> >                kfree(rdata);
> >
> 
> That won't work.  There is no hdr->rpc_data.

Doh! Make that

	struct nfs_read_header *read_header = container_of(hdr, struct....);

	if (rdata != &read_header->rpc_data)
		kfree(rdata);

The reason for preferring the above line is that I can trivially see
that the reason why I don't want to do the kfree() is because I'm
pointing at a field inside the read_header.

-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@xxxxxxxxxx
www.netapp.com

��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux