diff mbox

nfsd: no need to unhash_stid before free

Message ID 1381730515-18045-1-git-send-email-bhalevy@primarydata.com (mailing list archive)
State New, archived
Headers show

Commit Message

Benny Halevy Oct. 14, 2013, 6:01 a.m. UTC
idr_remove is about to be called before kmem_cache_free so unhashing it
is redundant

Signed-off-by: Benny Halevy <bhalevy@primarydata.com>
---
 fs/nfsd/nfs4state.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

Comments

J. Bruce Fields Oct. 28, 2013, 6:32 p.m. UTC | #1
On Mon, Oct 14, 2013 at 09:01:55AM +0300, Benny Halevy wrote:
> idr_remove is about to be called before kmem_cache_free so unhashing it
> is redundant

This leaves only two unhash_stid callers, in release_lock_stateid and
unhash_stid, both called just before destroying the stateid, so perhaps
we should remove those and unhash_stid?

--b.

> 
> Signed-off-by: Benny Halevy <bhalevy@primarydata.com>
> ---
>  fs/nfsd/nfs4state.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index 0874998..06984e3 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -668,7 +668,6 @@ static void unhash_open_stateid(struct nfs4_ol_stateid *stp)
>  static void release_open_stateid(struct nfs4_ol_stateid *stp)
>  {
>  	unhash_open_stateid(stp);
> -	unhash_stid(&stp->st_stid);
>  	free_generic_stateid(stp);
>  }
>  
> @@ -690,7 +689,6 @@ static void release_last_closed_stateid(struct nfs4_openowner *oo)
>  	struct nfs4_ol_stateid *s = oo->oo_last_closed_stid;
>  
>  	if (s) {
> -		unhash_stid(&s->st_stid);
>  		free_generic_stateid(s);
>  		oo->oo_last_closed_stid = NULL;
>  	}
> @@ -3998,10 +3996,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
>  
>  	nfsd4_close_open_stateid(stp);
>  
> -	if (cstate->minorversion) {
> -		unhash_stid(&stp->st_stid);
> +	if (cstate->minorversion)
>  		free_generic_stateid(stp);
> -	} else
> +	else
>  		oo->oo_last_closed_stid = stp;
>  
>  	if (list_empty(&oo->oo_owner.so_stateids)) {
> -- 
> 1.8.3.1
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Benny Halevy Oct. 29, 2013, 7 a.m. UTC | #2
On 2013-10-28 20:32, J. Bruce Fields wrote:
> On Mon, Oct 14, 2013 at 09:01:55AM +0300, Benny Halevy wrote:
>> idr_remove is about to be called before kmem_cache_free so unhashing it
>> is redundant
> 
> This leaves only two unhash_stid callers, in release_lock_stateid and
> unhash_stid, both called just before destroying the stateid, so perhaps
> we should remove those and unhash_stid?

In my state lock elimination patchset I actually keep using unhash_stid
after refactoring non-blocking unhashing from the blocking release
so I don't think it's worth it to remove the call.
That said, we can still open code it but encapsulating the assignment
in unhash_stid() which the compiler can inline anyway seems cleaner to me.

Benny

> 
> --b.
> 
>>
>> Signed-off-by: Benny Halevy <bhalevy@primarydata.com>
>> ---
>>  fs/nfsd/nfs4state.c | 7 ++-----
>>  1 file changed, 2 insertions(+), 5 deletions(-)
>>
>> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
>> index 0874998..06984e3 100644
>> --- a/fs/nfsd/nfs4state.c
>> +++ b/fs/nfsd/nfs4state.c
>> @@ -668,7 +668,6 @@ static void unhash_open_stateid(struct nfs4_ol_stateid *stp)
>>  static void release_open_stateid(struct nfs4_ol_stateid *stp)
>>  {
>>  	unhash_open_stateid(stp);
>> -	unhash_stid(&stp->st_stid);
>>  	free_generic_stateid(stp);
>>  }
>>  
>> @@ -690,7 +689,6 @@ static void release_last_closed_stateid(struct nfs4_openowner *oo)
>>  	struct nfs4_ol_stateid *s = oo->oo_last_closed_stid;
>>  
>>  	if (s) {
>> -		unhash_stid(&s->st_stid);
>>  		free_generic_stateid(s);
>>  		oo->oo_last_closed_stid = NULL;
>>  	}
>> @@ -3998,10 +3996,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
>>  
>>  	nfsd4_close_open_stateid(stp);
>>  
>> -	if (cstate->minorversion) {
>> -		unhash_stid(&stp->st_stid);
>> +	if (cstate->minorversion)
>>  		free_generic_stateid(stp);
>> -	} else
>> +	else
>>  		oo->oo_last_closed_stid = stp;
>>  
>>  	if (list_empty(&oo->oo_owner.so_stateids)) {
>> -- 
>> 1.8.3.1
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
J. Bruce Fields Oct. 29, 2013, 1:39 p.m. UTC | #3
On Tue, Oct 29, 2013 at 09:00:15AM +0200, Benny Halevy wrote:
> On 2013-10-28 20:32, J. Bruce Fields wrote:
> > On Mon, Oct 14, 2013 at 09:01:55AM +0300, Benny Halevy wrote:
> >> idr_remove is about to be called before kmem_cache_free so unhashing it
> >> is redundant
> > 
> > This leaves only two unhash_stid callers, in release_lock_stateid and
> > unhash_stid, both called just before destroying the stateid, so perhaps
> > we should remove those and unhash_stid?
> 
> In my state lock elimination patchset I actually keep using unhash_stid
> after refactoring non-blocking unhashing from the blocking release
> so I don't think it's worth it to remove the call.
> That said, we can still open code it but encapsulating the assignment
> in unhash_stid() which the compiler can inline anyway seems cleaner to me.

OK, sure, sounds fine.

--b.

> 
> Benny
> 
> > 
> > --b.
> > 
> >>
> >> Signed-off-by: Benny Halevy <bhalevy@primarydata.com>
> >> ---
> >>  fs/nfsd/nfs4state.c | 7 ++-----
> >>  1 file changed, 2 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> >> index 0874998..06984e3 100644
> >> --- a/fs/nfsd/nfs4state.c
> >> +++ b/fs/nfsd/nfs4state.c
> >> @@ -668,7 +668,6 @@ static void unhash_open_stateid(struct nfs4_ol_stateid *stp)
> >>  static void release_open_stateid(struct nfs4_ol_stateid *stp)
> >>  {
> >>  	unhash_open_stateid(stp);
> >> -	unhash_stid(&stp->st_stid);
> >>  	free_generic_stateid(stp);
> >>  }
> >>  
> >> @@ -690,7 +689,6 @@ static void release_last_closed_stateid(struct nfs4_openowner *oo)
> >>  	struct nfs4_ol_stateid *s = oo->oo_last_closed_stid;
> >>  
> >>  	if (s) {
> >> -		unhash_stid(&s->st_stid);
> >>  		free_generic_stateid(s);
> >>  		oo->oo_last_closed_stid = NULL;
> >>  	}
> >> @@ -3998,10 +3996,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
> >>  
> >>  	nfsd4_close_open_stateid(stp);
> >>  
> >> -	if (cstate->minorversion) {
> >> -		unhash_stid(&stp->st_stid);
> >> +	if (cstate->minorversion)
> >>  		free_generic_stateid(stp);
> >> -	} else
> >> +	else
> >>  		oo->oo_last_closed_stid = stp;
> >>  
> >>  	if (list_empty(&oo->oo_owner.so_stateids)) {
> >> -- 
> >> 1.8.3.1
> >>
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 0874998..06984e3 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -668,7 +668,6 @@  static void unhash_open_stateid(struct nfs4_ol_stateid *stp)
 static void release_open_stateid(struct nfs4_ol_stateid *stp)
 {
 	unhash_open_stateid(stp);
-	unhash_stid(&stp->st_stid);
 	free_generic_stateid(stp);
 }
 
@@ -690,7 +689,6 @@  static void release_last_closed_stateid(struct nfs4_openowner *oo)
 	struct nfs4_ol_stateid *s = oo->oo_last_closed_stid;
 
 	if (s) {
-		unhash_stid(&s->st_stid);
 		free_generic_stateid(s);
 		oo->oo_last_closed_stid = NULL;
 	}
@@ -3998,10 +3996,9 @@  static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
 
 	nfsd4_close_open_stateid(stp);
 
-	if (cstate->minorversion) {
-		unhash_stid(&stp->st_stid);
+	if (cstate->minorversion)
 		free_generic_stateid(stp);
-	} else
+	else
 		oo->oo_last_closed_stid = stp;
 
 	if (list_empty(&oo->oo_owner.so_stateids)) {