2006-01-18 12:30:29 +03:00
/******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* * Copyright ( C ) Sistina Software , Inc . 1997 - 2003 All rights reserved .
2007-11-07 18:06:49 +03:00
* * Copyright ( C ) 2004 - 2007 Red Hat , Inc . All rights reserved .
2006-01-18 12:30:29 +03:00
* *
* * This copyrighted material is made available to anyone wishing to use ,
* * modify , copy , or redistribute it subject to the terms and conditions
* * of the GNU General Public License v .2 .
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "dlm_internal.h"
# include "config.h"
# include "memory.h"
2006-12-07 07:33:20 +03:00
static struct kmem_cache * lkb_cache ;
2006-01-18 12:30:29 +03:00
2008-02-01 20:53:46 +03:00
int __init dlm_memory_init ( void )
2006-01-18 12:30:29 +03:00
{
int ret = 0 ;
lkb_cache = kmem_cache_create ( " dlm_lkb " , sizeof ( struct dlm_lkb ) ,
2007-07-20 05:11:58 +04:00
__alignof__ ( struct dlm_lkb ) , 0 , NULL ) ;
2006-01-18 12:30:29 +03:00
if ( ! lkb_cache )
ret = - ENOMEM ;
return ret ;
}
void dlm_memory_exit ( void )
{
if ( lkb_cache )
kmem_cache_destroy ( lkb_cache ) ;
}
2007-11-07 18:06:49 +03:00
char * dlm_allocate_lvb ( struct dlm_ls * ls )
2006-01-18 12:30:29 +03:00
{
char * p ;
some kmalloc/memset ->kzalloc (tree wide)
Transform some calls to kmalloc/memset to a single kzalloc (or kcalloc).
Here is a short excerpt of the semantic patch performing
this transformation:
@@
type T2;
expression x;
identifier f,fld;
expression E;
expression E1,E2;
expression e1,e2,e3,y;
statement S;
@@
x =
- kmalloc
+ kzalloc
(E1,E2)
... when != \(x->fld=E;\|y=f(...,x,...);\|f(...,x,...);\|x=E;\|while(...) S\|for(e1;e2;e3) S\)
- memset((T2)x,0,E1);
@@
expression E1,E2,E3;
@@
- kzalloc(E1 * E2,E3)
+ kcalloc(E1,E2,E3)
[akpm@linux-foundation.org: get kcalloc args the right way around]
Signed-off-by: Yoann Padioleau <padator@wanadoo.fr>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Acked-by: Russell King <rmk@arm.linux.org.uk>
Cc: Bryan Wu <bryan.wu@analog.com>
Acked-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Dave Airlie <airlied@linux.ie>
Acked-by: Roland Dreier <rolandd@cisco.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Acked-by: Pierre Ossman <drzeus-list@drzeus.cx>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: "David S. Miller" <davem@davemloft.net>
Acked-by: Greg KH <greg@kroah.com>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-07-19 12:49:03 +04:00
p = kzalloc ( ls - > ls_lvblen , GFP_KERNEL ) ;
2006-01-18 12:30:29 +03:00
return p ;
}
2007-11-07 18:06:49 +03:00
void dlm_free_lvb ( char * p )
2006-01-18 12:30:29 +03:00
{
kfree ( p ) ;
}
/* FIXME: have some minimal space built-in to rsb for the name and
kmalloc a separate name if needed , like dentries are done */
2007-11-07 18:06:49 +03:00
struct dlm_rsb * dlm_allocate_rsb ( struct dlm_ls * ls , int namelen )
2006-01-18 12:30:29 +03:00
{
struct dlm_rsb * r ;
DLM_ASSERT ( namelen < = DLM_RESNAME_MAXLEN , ) ;
some kmalloc/memset ->kzalloc (tree wide)
Transform some calls to kmalloc/memset to a single kzalloc (or kcalloc).
Here is a short excerpt of the semantic patch performing
this transformation:
@@
type T2;
expression x;
identifier f,fld;
expression E;
expression E1,E2;
expression e1,e2,e3,y;
statement S;
@@
x =
- kmalloc
+ kzalloc
(E1,E2)
... when != \(x->fld=E;\|y=f(...,x,...);\|f(...,x,...);\|x=E;\|while(...) S\|for(e1;e2;e3) S\)
- memset((T2)x,0,E1);
@@
expression E1,E2,E3;
@@
- kzalloc(E1 * E2,E3)
+ kcalloc(E1,E2,E3)
[akpm@linux-foundation.org: get kcalloc args the right way around]
Signed-off-by: Yoann Padioleau <padator@wanadoo.fr>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Acked-by: Russell King <rmk@arm.linux.org.uk>
Cc: Bryan Wu <bryan.wu@analog.com>
Acked-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Dave Airlie <airlied@linux.ie>
Acked-by: Roland Dreier <rolandd@cisco.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Acked-by: Pierre Ossman <drzeus-list@drzeus.cx>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: "David S. Miller" <davem@davemloft.net>
Acked-by: Greg KH <greg@kroah.com>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-07-19 12:49:03 +04:00
r = kzalloc ( sizeof ( * r ) + namelen , GFP_KERNEL ) ;
2006-01-18 12:30:29 +03:00
return r ;
}
2007-11-07 18:06:49 +03:00
void dlm_free_rsb ( struct dlm_rsb * r )
2006-01-18 12:30:29 +03:00
{
if ( r - > res_lvbptr )
2007-11-07 18:06:49 +03:00
dlm_free_lvb ( r - > res_lvbptr ) ;
2006-01-18 12:30:29 +03:00
kfree ( r ) ;
}
2007-11-07 18:06:49 +03:00
struct dlm_lkb * dlm_allocate_lkb ( struct dlm_ls * ls )
2006-01-18 12:30:29 +03:00
{
struct dlm_lkb * lkb ;
2007-02-10 12:45:03 +03:00
lkb = kmem_cache_zalloc ( lkb_cache , GFP_KERNEL ) ;
2006-01-18 12:30:29 +03:00
return lkb ;
}
2007-11-07 18:06:49 +03:00
void dlm_free_lkb ( struct dlm_lkb * lkb )
2006-01-18 12:30:29 +03:00
{
2006-07-13 01:44:04 +04:00
if ( lkb - > lkb_flags & DLM_IFL_USER ) {
struct dlm_user_args * ua ;
2008-02-07 08:27:04 +03:00
ua = lkb - > lkb_ua ;
2006-07-13 01:44:04 +04:00
if ( ua ) {
if ( ua - > lksb . sb_lvbptr )
kfree ( ua - > lksb . sb_lvbptr ) ;
kfree ( ua ) ;
}
}
2006-01-18 12:30:29 +03:00
kmem_cache_free ( lkb_cache , lkb ) ;
}