All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boaz Harrosh <bharrosh@panasas.com>
To: Benny Halevy <bhalevy@panasas.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>,
	NFS list <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH 09/12] SQUASHME: pnfs-obj: Bugs in new global-device-cache code
Date: Tue, 24 May 2011 20:18:27 +0300	[thread overview]
Message-ID: <4DDBE863.5020307@panasas.com> (raw)
In-Reply-To: <4DDBE767.6030803@panasas.com>

On 05/24/2011 08:14 PM, Benny Halevy wrote:
> On 2011-05-24 18:07, Boaz Harrosh wrote:
>> Fix BUGs in the new "Use global-device-cache".
>>
>> One thing I don't understand is why the compiler did
>> not complain when the code was returning the wrong
>> type of structure
>>
>> Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
>> ---
>>  fs/nfs/objlayout/objio_osd.c |   28 +++++++++++++++++++---------
>>  1 files changed, 19 insertions(+), 9 deletions(-)
>>
>> diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c
>> index 167cd1e..faacde2 100644
>> --- a/fs/nfs/objlayout/objio_osd.c
>> +++ b/fs/nfs/objlayout/objio_osd.c
>> @@ -56,6 +56,7 @@ objio_free_deviceid_node(struct nfs4_deviceid_node *d)
>>  {
>>  	struct objio_dev_ent *de = container_of(d, struct objio_dev_ent, id_node);
>>  
>> +	dprintk("%s: free od=%p\n", __func__, de->od);
>>  	osduld_put_device(de->od);
>>  	kfree(de);
>>  }
>> @@ -64,14 +65,18 @@ static struct objio_dev_ent *_dev_list_find(const struct nfs_server *nfss,
>>  	const struct nfs4_deviceid *d_id)
>>  {
>>  	struct nfs4_deviceid_node *d;
>> +	struct objio_dev_ent *de;
>>  
>>  	d = nfs4_find_get_deviceid(nfss->pnfs_curr_ld, nfss->nfs_client, d_id);
>>  	if (!d)
>>  		return NULL;
>> -	return container_of(d, struct objio_dev_ent, id_node);
>> +
>> +	de = container_of(d, struct objio_dev_ent, id_node);
>> +	return de;
> 
> That's not really required as container_of() does the type casting
> for you.
> 

Ye, I know that change is just a left over from a print between the
set and the return. (Else how could I debug this)
I than removed the print because these come a lot in a git clone for
example.

>>  }
>>  
>> -static int _dev_list_add(const struct nfs_server *nfss,
>> +static struct objio_dev_ent *
>> +_dev_list_add(const struct nfs_server *nfss,
>>  	const struct nfs4_deviceid *d_id, struct osd_dev *od,
>>  	gfp_t gfp_flags)
>>  {
>> @@ -79,9 +84,12 @@ static int _dev_list_add(const struct nfs_server *nfss,
>>  	struct objio_dev_ent *de = kzalloc(sizeof(*de), gfp_flags);
>>  	struct objio_dev_ent *n;
>>  
>> -	if (!de)
>> -		return -ENOMEM;
>> +	if (!de) {
>> +		dprintk("%s: -ENOMEM od=%p\n", __func__, od);
>> +		return NULL;
> 
> better return ERR_PTR(-ENOMEM)
> that will percolate up the stack via _device_lookup.
> 

Right missed that one

> Thanks!
> 

What thanks? beers on you next time! ;-)

> Benny
> 
Boaz

>> +	}
>>  
>> +	dprintk("%s: Adding od=%p\n", __func__, od);
>>  	nfs4_init_deviceid_node(&de->id_node,
>>  				nfss->pnfs_curr_ld,
>>  				nfss->nfs_client,
>> @@ -91,11 +99,12 @@ static int _dev_list_add(const struct nfs_server *nfss,
>>  	d = nfs4_insert_deviceid_node(&de->id_node);
>>  	n = container_of(d, struct objio_dev_ent, id_node);
>>  	if (n != de) {
>> -		BUG_ON(n->od != od);
>> +		dprintk("%s: Race with other n->od=%p\n", __func__, n->od);
>>  		objio_free_deviceid_node(&de->id_node);
>> +		de = n;
>>  	}
>>  
>> -	return 0;
>> +	return de;
>>  }
>>  
>>  struct caps_buffers {
>> @@ -117,7 +126,7 @@ struct objio_segment {
>>  	unsigned comps_index;
>>  	unsigned num_comps;
>>  	/* variable length */
>> -	struct objio_dev_ent *ods[0];
>> +	struct objio_dev_ent *ods[];
>>  };
>>  
>>  static inline struct objio_segment *
>> @@ -176,12 +185,13 @@ static struct objio_dev_ent *_device_lookup(struct pnfs_layout_hdr *pnfslay,
>>  		goto out;
>>  	}
>>  
>> -	_dev_list_add(NFS_SERVER(pnfslay->plh_inode), d_id, od, gfp_flags);
>> +	ode = _dev_list_add(NFS_SERVER(pnfslay->plh_inode), d_id, od,
>> +			    gfp_flags);
>>  
>>  out:
>>  	dprintk("%s: return=%d\n", __func__, err);
>>  	objlayout_put_deviceinfo(deviceaddr);
>> -	return err ? ERR_PTR(err) : od;
>> +	return err ? ERR_PTR(err) : ode;
>>  }
>>  
>>  static int objio_devices_lookup(struct pnfs_layout_hdr *pnfslay,
> 


  reply	other threads:[~2011-05-24 17:18 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-24 14:52 [PATCHES 00/12] Mostly a Resend of ALL Bug fixes and SQUASHMEs - pnfs-submit 2.6.40 V7 Boaz Harrosh
2011-05-24 15:04 ` [PATCH 01/12] NFSv4.1: use layout driver in global device cache Boaz Harrosh
2011-05-24 15:04 ` [PATCH 02/12] SQUASHME: Bug in new global-device-cache code Boaz Harrosh
2011-05-24 16:52   ` Benny Halevy
2011-05-24 17:00     ` Boaz Harrosh
2011-05-24 17:02       ` Benny Halevy
2011-05-24 15:05 ` [PATCH 03/12] SQUSHME: pnfs: BUG in _deviceid_purge_client Boaz Harrosh
2011-05-24 16:57   ` Benny Halevy
2011-05-24 15:05 ` [PATCH 04/12] pnfs: layout_driver MUST set free_deviceid_node if using dev-cache Boaz Harrosh
2011-05-24 17:04   ` Benny Halevy
2011-05-24 15:06 ` [PATCH 05/12] SQUASHME: pnfs-obj: pnfs_osd_xdr.h Remove server definitions Boaz Harrosh
2011-05-24 15:06 ` [PATCH 06/12] SQUASHME: pnf-obj xdr_cli: Wrong type in comments Boaz Harrosh
2011-05-24 15:06 ` [PATCH 07/12] SQUASHME: pnfs-obj: use layout driver in global device cache Boaz Harrosh
2011-05-24 15:06 ` [PATCH 08/12] SQUASHME: objio alloc/free lseg Bugs fixes Boaz Harrosh
2011-05-24 17:06   ` Benny Halevy
2011-05-24 15:07 ` [PATCH 09/12] SQUASHME: pnfs-obj: Bugs in new global-device-cache code Boaz Harrosh
2011-05-24 17:14   ` Benny Halevy
2011-05-24 17:18     ` Boaz Harrosh [this message]
2011-05-24 15:08 ` [PATCH 10/12] SQUASHME: pnfs-obj: objlayout wants to cache devices until unmount Boaz Harrosh
2011-05-24 17:17   ` Benny Halevy
2011-05-24 15:08 ` [PATCH 11/12] SQUASHME: pnfs: Fall out from: non-rpc layout drivers Boaz Harrosh
2011-05-24 15:10 ` [PATCH 12/12] SQUASHME: objio read/write patch: Bugs fixes Boaz Harrosh

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=4DDBE863.5020307@panasas.com \
    --to=bharrosh@panasas.com \
    --cc=Trond.Myklebust@netapp.com \
    --cc=bhalevy@panasas.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.