diff options
| author | Vijay Bellur <vijay@gluster.com> | 2010-04-22 13:33:09 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-04-23 06:32:52 -0700 | 
| commit | 582de0677da4be19fc6f873625c58c45d069ab1c (patch) | |
| tree | f10cb3e26e1f92f6ea91034e6f7bb925790dd9bc /xlators/performance | |
| parent | 72baa17282f5cf749fa743fd601c7b728ece4fa2 (diff) | |
Memory accounting changes
Memory accounting Changes. Thanks to Vinayak Hegde and Csaba Henk for their
contributions.
Signed-off-by: Vijay Bellur <vijay@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 329 (Replacing memory allocation functions with mem-type functions)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=329
Diffstat (limited to 'xlators/performance')
19 files changed, 528 insertions, 151 deletions
diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c index 9bf20be5bb5..9f402f1dace 100644 --- a/xlators/performance/io-cache/src/io-cache.c +++ b/xlators/performance/io-cache/src/io-cache.c @@ -27,6 +27,7 @@  #include "dict.h"  #include "xlator.h"  #include "io-cache.h" +#include "ioc-mem-types.h"  #include <assert.h>  #include <sys/time.h> @@ -259,7 +260,8 @@ ioc_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,          ioc_local_t *local = NULL;          int32_t      op_errno = -1, ret = -1; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_ioc_mt_ioc_local_t);          if (local == NULL) {                  op_errno = ENOMEM;                  gf_log (this->name, GF_LOG_ERROR, "out of memory"); @@ -401,7 +403,8 @@ ioc_wait_on_inode (ioc_inode_t *ioc_inode, ioc_page_t *page)  	}  	if (!page_found) { -		waiter = CALLOC (1, sizeof (ioc_waitq_t)); +		waiter = GF_CALLOC (1, sizeof (ioc_waitq_t),  +                                    gf_ioc_mt_ioc_waitq_t);                  if (waiter == NULL) {                          gf_log (ioc_inode->table->xl->name, GF_LOG_ERROR,                                  "out of memory"); @@ -436,7 +439,8 @@ ioc_cache_validate (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd,          int32_t      ret = 0;          local = frame->local; -	validate_local = CALLOC (1, sizeof (ioc_local_t)); +	validate_local = GF_CALLOC (1, sizeof (ioc_local_t), +                                    gf_ioc_mt_ioc_local_t);          if (validate_local == NULL) {                  ret = -1;                  local->op_ret = -1; @@ -451,7 +455,7 @@ ioc_cache_validate (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd,                  ret = -1;                  local->op_ret = -1;                  local->op_errno = ENOMEM; -                FREE (validate_local); +                GF_FREE (validate_local);                  gf_log (ioc_inode->table->xl->name, GF_LOG_ERROR,                          "out of memory");                  goto out; @@ -563,7 +567,7 @@ ioc_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,  		}  	} -	FREE (local); +	GF_FREE (local);  	frame->local = NULL;  	STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd); @@ -641,7 +645,7 @@ ioc_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  	}  	frame->local = NULL; -	FREE (local); +	GF_FREE (local);          STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf,                               preparent, postparent); @@ -664,7 +668,7 @@ ioc_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,  	ioc_local_t *local = NULL; -        local = CALLOC (1, sizeof (ioc_local_t)); +        local = GF_CALLOC (1, sizeof (ioc_local_t), gf_ioc_mt_ioc_local_t);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  STACK_UNWIND_STRICT (open, frame, -1, ENOMEM, NULL); @@ -698,8 +702,8 @@ ioc_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,  	    mode_t mode, fd_t *fd)  {  	ioc_local_t *local = NULL; - -        local = CALLOC (1, sizeof (ioc_local_t)); +         +        local = GF_CALLOC (1, sizeof (ioc_local_t), gf_ioc_mt_ioc_local_t);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  STACK_UNWIND_STRICT (create, frame, -1, ENOMEM, NULL, NULL, @@ -1021,7 +1025,8 @@ ioc_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,  		return 0;  	} -	local = (ioc_local_t *) CALLOC (1, sizeof (ioc_local_t)); +	local = (ioc_local_t *) GF_CALLOC (1, sizeof (ioc_local_t), +                                            gf_ioc_mt_ioc_local_t);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  op_errno = ENOMEM; @@ -1105,7 +1110,7 @@ ioc_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,  	ioc_local_t *local     = NULL;  	uint64_t    ioc_inode = 0; -	local = CALLOC (1, sizeof (ioc_local_t)); +	local = GF_CALLOC (1, sizeof (ioc_local_t), gf_ioc_mt_ioc_local_t);          if (local == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory"); @@ -1270,7 +1275,7 @@ ioc_get_priority_list (const char *opt_str, struct list_head *first)  	char                *string = NULL;  	struct ioc_priority *curr = NULL, *tmp = NULL; -        string = strdup (opt_str); +        string = gf_strdup (opt_str);          if (string == NULL) {                  max_pri = -1;                  goto out; @@ -1284,7 +1289,8 @@ ioc_get_priority_list (const char *opt_str, struct list_head *first)  	 */  	stripe_str = strtok_r (string, ",", &tmp_str);  	while (stripe_str) { -		curr = CALLOC (1, sizeof (struct ioc_priority)); +		curr = GF_CALLOC (1, sizeof (struct ioc_priority),  +                                  gf_ioc_mt_ioc_priority);                  if (curr == NULL) {                          max_pri = -1;                          goto out; @@ -1292,7 +1298,7 @@ ioc_get_priority_list (const char *opt_str, struct list_head *first)  		list_add_tail (&curr->list, first); -		dup_str = strdup (stripe_str); +		dup_str = gf_strdup (stripe_str);                  if (dup_str == NULL) {                          max_pri = -1;                          goto out; @@ -1315,7 +1321,7 @@ ioc_get_priority_list (const char *opt_str, struct list_head *first)  			pattern,  			priority); -		curr->pattern = strdup (pattern); +		curr->pattern = gf_strdup (pattern);                  if (curr->pattern == NULL) {                          max_pri = -1;                          goto out; @@ -1329,31 +1335,50 @@ ioc_get_priority_list (const char *opt_str, struct list_head *first)   			max_pri = max (max_pri, curr->priority);                  } -                free (dup_str); +                GF_FREE (dup_str);                  dup_str = NULL;  		stripe_str = strtok_r (NULL, ",", &tmp_str);  	}  out:          if (string != NULL) { -                free (string); +                GF_FREE (string);          }          if (dup_str != NULL) { -                free (dup_str); +                GF_FREE (dup_str);          }          if (max_pri == -1) {                  list_for_each_entry_safe (curr, tmp, first, list) {                          list_del_init (&curr->list); -                        free (curr->pattern); -                        free (curr); +                        GF_FREE (curr->pattern); +                        GF_FREE (curr);                  }          }  	return max_pri;  } +int32_t +mem_acct_init (xlator_t *this) +{ +        int     ret = -1; + +        if (!this) +                return ret; + +        ret = xlator_mem_acct_init (this, gf_ioc_mt_end + 1); +         +        if (ret != 0) { +                gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" +                                "failed"); +                return ret; +        } + +        return ret; +} +  /*   * init -    * @this: @@ -1381,7 +1406,7 @@ init (xlator_t *this)  			"dangling volume. check volfile ");  	} -	table = (void *) CALLOC (1, sizeof (*table)); +	table = (void *) GF_CALLOC (1, sizeof (*table), gf_ioc_mt_ioc_table_t);          if (table == NULL) {                  gf_log (this->name, GF_LOG_ERROR, "out of memory");                  goto out; @@ -1477,7 +1502,9 @@ init (xlator_t *this)                          goto out;          } -	table->inode_lru = CALLOC (table->max_pri, sizeof (struct list_head)); +	table->inode_lru = GF_CALLOC (table->max_pri,  +                                      sizeof (struct list_head), +                                      gf_ioc_mt_list_head);          if (table->inode_lru == NULL) {                  goto out;          } @@ -1495,8 +1522,8 @@ init (xlator_t *this)  out:          if (ret == -1) {                  if (table != NULL) { -                        free (table->inode_lru); -                        free (table); +                        GF_FREE (table->inode_lru); +                        GF_FREE (table);                  }          } @@ -1518,7 +1545,7 @@ fini (xlator_t *this)                  return;  	pthread_mutex_destroy (&table->table_lock); -	FREE (table); +	GF_FREE (table);  	this->private = NULL;  	return; diff --git a/xlators/performance/io-cache/src/ioc-inode.c b/xlators/performance/io-cache/src/ioc-inode.c index 763f329db14..5619134814c 100644 --- a/xlators/performance/io-cache/src/ioc-inode.c +++ b/xlators/performance/io-cache/src/ioc-inode.c @@ -23,6 +23,7 @@  #endif  #include "io-cache.h" +#include "ioc-mem-types.h"  extern int ioc_log2_page_size; @@ -51,7 +52,7 @@ ptr_to_str (void *ptr)  {          int   ret = 0;  	char *str = NULL; -	ret = asprintf (&str, "%p", ptr); +	ret = gf_asprintf (&str, "%p", ptr);          if (-1 == ret) {                  gf_log ("ioc", GF_LOG_ERROR,                           "asprintf failed while converting ptr to str"); @@ -137,7 +138,7 @@ ioc_inode_wakeup (call_frame_t *frame, ioc_inode_t *ioc_inode,  		waiter = waiter->next;  		waited->data = NULL; -		free (waited); +		GF_FREE (waited);  	}  } @@ -157,7 +158,8 @@ ioc_inode_update (ioc_table_t *table, inode_t *inode, uint32_t weight)  	ioc_inode_t     *ioc_inode   = NULL;          unsigned long    no_of_pages = 0; -        ioc_inode = CALLOC (1, sizeof (ioc_inode_t)); +        ioc_inode = GF_CALLOC (1, sizeof (ioc_inode_t), +                               gf_ioc_mt_ioc_inode_t);          if (ioc_inode == NULL) {                  goto out;          } @@ -213,5 +215,5 @@ ioc_inode_destroy (ioc_inode_t *ioc_inode)          rbthash_table_destroy (ioc_inode->cache.page_table);  	pthread_mutex_destroy (&ioc_inode->inode_lock); -	free (ioc_inode); +	GF_FREE (ioc_inode);  } diff --git a/xlators/performance/io-cache/src/ioc-mem-types.h b/xlators/performance/io-cache/src/ioc-mem-types.h new file mode 100644 index 00000000000..d1da65ca1c7 --- /dev/null +++ b/xlators/performance/io-cache/src/ioc-mem-types.h @@ -0,0 +1,40 @@ +/* +   Copyright (c) 2007-2009 Gluster, Inc. <http://www.gluster.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + +#ifndef __IOC_MT_H__ +#define __IOC_MT_H__ + +#include "mem-types.h" + +enum gf_ioc_mem_types_ { +        gf_ioc_mt_iovec  = gf_common_mt_end + 1, +        gf_ioc_mt_ioc_table_t, +        gf_ioc_mt_char, +        gf_ioc_mt_ioc_local_t, +        gf_ioc_mt_ioc_waitq_t, +        gf_ioc_mt_ioc_priority, +        gf_ioc_mt_list_head, +        gf_ioc_mt_call_pool_t, +        gf_ioc_mt_ioc_inode_t, +        gf_ioc_mt_ioc_fill_t, +        gf_ioc_mt_ioc_newpage_t, +        gf_ioc_mt_end +}; +#endif + diff --git a/xlators/performance/io-cache/src/page.c b/xlators/performance/io-cache/src/page.c index 28be2b35883..7209abb08a3 100644 --- a/xlators/performance/io-cache/src/page.c +++ b/xlators/performance/io-cache/src/page.c @@ -27,6 +27,7 @@  #include "dict.h"  #include "xlator.h"  #include "io-cache.h" +#include "ioc-mem-types.h"  #include <assert.h>  #include <sys/time.h> @@ -86,7 +87,7 @@ ioc_page_destroy (ioc_page_t *page)  		if (page->vector){  			iobref_unref (page->iobref); -			free (page->vector); +			GF_FREE (page->vector);  			page->vector = NULL;  		} @@ -95,7 +96,7 @@ ioc_page_destroy (ioc_page_t *page)  	if (page_size != -1) {  		pthread_mutex_destroy (&page->page_lock); -		free (page); +		GF_FREE (page);  	}  	return page_size; @@ -194,7 +195,8 @@ ioc_page_create (ioc_inode_t *ioc_inode, off_t offset)          table = ioc_inode->table;          rounded_offset = floor (offset, table->page_size); -        newpage = CALLOC (1, sizeof (*newpage)); +        newpage = GF_CALLOC (1, sizeof (*newpage),  +                             gf_ioc_mt_ioc_newpage_t);          if (newpage == NULL) {                  goto out;          } @@ -202,7 +204,7 @@ ioc_page_create (ioc_inode_t *ioc_inode, off_t offset)  	if (ioc_inode) {  		table = ioc_inode->table;          } else { -                free (newpage); +                GF_FREE (newpage);                  newpage = NULL;                  goto out;  	} @@ -241,7 +243,7 @@ ioc_wait_on_page (ioc_page_t *page, call_frame_t *frame, off_t offset,  	ioc_waitq_t *waitq = NULL;  	ioc_local_t *local = frame->local; -	waitq = CALLOC (1, sizeof (*waitq)); +	waitq = GF_CALLOC (1, sizeof (*waitq), gf_ioc_mt_ioc_waitq_t);          if (waitq == NULL) {                  local->op_ret = -1;                  local->op_errno = ENOMEM; @@ -322,7 +324,7 @@ ioc_waitq_return (ioc_waitq_t *waitq)  		frame = trav->data;  		ioc_frame_return (frame); -		free (trav); +		GF_FREE (trav);  	}  } @@ -394,7 +396,7 @@ ioc_fault_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  			} else {  				if (page->vector) {  					iobref_unref (page->iobref); -					free (page->vector); +					GF_FREE (page->vector);  					page->vector = NULL;  				} @@ -507,7 +509,8 @@ ioc_page_fault (ioc_inode_t *ioc_inode,	call_frame_t *frame, fd_t *fd,                  goto err;          } -        fault_local = CALLOC (1, sizeof (ioc_local_t)); +        fault_local = GF_CALLOC (1, sizeof (ioc_local_t), +                                gf_ioc_mt_ioc_local_t);          if (fault_local == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -603,7 +606,8 @@ ioc_frame_fill (ioc_page_t *page, call_frame_t *frame, off_t offset,  			copy_size, src_offset, dst_offset);  		{ -                        new = CALLOC (1, sizeof (*new)); +                        new = GF_CALLOC (1, sizeof (*new),  +                                         gf_ioc_mt_ioc_fill_t);                          if (new == NULL) {                                  local->op_ret = -1;                                  local->op_errno = ENOMEM; @@ -622,14 +626,15 @@ ioc_frame_fill (ioc_page_t *page, call_frame_t *frame, off_t offset,  						 src_offset + copy_size,  						 NULL); -			new->vector = CALLOC (new->count,  -					      sizeof (struct iovec)); +			new->vector = GF_CALLOC (new->count,  +					         sizeof (struct iovec), +                                                 gf_ioc_mt_iovec);                          if (new->vector == NULL) {                                  local->op_ret = -1;                                  local->op_errno = ENOMEM;                                  iobref_unref (new->iobref); -                                FREE (new); +                                GF_FREE (new);                                  ret = -1;                                  gf_log (page->inode->table->xl->name, @@ -722,7 +727,7 @@ ioc_frame_unwind (call_frame_t *frame)  		count += fill->count;  	} -	vector = CALLOC (count, sizeof (*vector)); +	vector = GF_CALLOC (count, sizeof (*vector), gf_ioc_mt_iovec);          if (vector == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -743,8 +748,8 @@ ioc_frame_unwind (call_frame_t *frame)  		list_del (&fill->list);  		iobref_unref (fill->iobref); -		free (fill->vector); -		free (fill); +		GF_FREE (fill->vector); +		GF_FREE (fill);  	}          if (op_ret != -1) { @@ -764,12 +769,12 @@ ioc_frame_unwind (call_frame_t *frame)          }          if (vector != NULL) { -                free (vector); +                GF_FREE (vector);                  vector = NULL;          }  	pthread_mutex_destroy (&local->local_lock); -	free (local); +	GF_FREE (local);          return;  } diff --git a/xlators/performance/io-threads/src/io-threads.c b/xlators/performance/io-threads/src/io-threads.c index 5ef7167336c..c2cca788855 100644 --- a/xlators/performance/io-threads/src/io-threads.c +++ b/xlators/performance/io-threads/src/io-threads.c @@ -2111,6 +2111,24 @@ set_stack_size (iot_conf_t *conf)          }  } +int32_t +mem_acct_init (xlator_t *this) +{ +        int     ret = -1; + +        if (!this) +                return ret; + +        ret = xlator_mem_acct_init (this, gf_iot_mt_end + 1); +         +        if (ret != 0) { +                gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" +                                "failed"); +                return ret; +        } + +        return ret; +}  int  init (xlator_t *this) @@ -2132,7 +2150,8 @@ init (xlator_t *this)  			"dangling volume. check volfile ");  	} -	conf = (void *) CALLOC (1, sizeof (*conf)); +	conf = (void *) GF_CALLOC (1, sizeof (*conf), +                                   gf_iot_mt_iot_conf_t);          if (conf == NULL) {                  gf_log (this->name, GF_LOG_ERROR,                          "out of memory"); @@ -2169,7 +2188,7 @@ init (xlator_t *this)          if (ret == -1) {                  gf_log (this->name, GF_LOG_ERROR,                          "cannot initialize worker threads, exiting init"); -                FREE (conf); +                GF_FREE (conf);                  goto out;          } @@ -2185,7 +2204,7 @@ fini (xlator_t *this)  {  	iot_conf_t *conf = this->private; -	FREE (conf); +	GF_FREE (conf);  	this->private = NULL;  	return; diff --git a/xlators/performance/io-threads/src/io-threads.h b/xlators/performance/io-threads/src/io-threads.h index 85836ff583d..137418034b1 100644 --- a/xlators/performance/io-threads/src/io-threads.h +++ b/xlators/performance/io-threads/src/io-threads.h @@ -35,6 +35,7 @@  #include "list.h"  #include <stdlib.h>  #include "locking.h" +#include "iot-mem-types.h"  #include <semaphore.h> diff --git a/xlators/performance/io-threads/src/iot-mem-types.h b/xlators/performance/io-threads/src/iot-mem-types.h new file mode 100644 index 00000000000..c083f83b495 --- /dev/null +++ b/xlators/performance/io-threads/src/iot-mem-types.h @@ -0,0 +1,31 @@ +/* +   Copyright (c) 2008-2009 Gluster, Inc. <http://www.gluster.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + + +#ifndef __IOT_MEM_TYPES_H__ +#define __IOT_MEM_TYPES_H__ + +#include "mem-types.h" + +enum gf_iot_mem_types_ { +        gf_iot_mt_iot_conf_t  = gf_common_mt_end + 1, +        gf_iot_mt_end +}; +#endif + diff --git a/xlators/performance/quick-read/src/quick-read-mem-types.h b/xlators/performance/quick-read/src/quick-read-mem-types.h new file mode 100644 index 00000000000..1e7a5d56d2c --- /dev/null +++ b/xlators/performance/quick-read/src/quick-read-mem-types.h @@ -0,0 +1,35 @@ +/* +   Copyright (c) 2008-2009 Gluster, Inc. <http://www.gluster.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + + +#ifndef __QR_MEM_TYPES_H__ +#define __QR_MEM_TYPES_H__ + +#include "mem-types.h" + +enum gf_qr_mem_types_ { +        gf_qr_mt_qr_file_t   = gf_common_mt_end + 1, +        gf_qr_mt_qr_fd_ctx_t, +        gf_qr_mt_qr_local_t, +        gf_qr_mt_iovec, +        gf_qr_mt_qr_conf_t, +        gf_qr_mt_end +}; +#endif + diff --git a/xlators/performance/quick-read/src/quick-read.c b/xlators/performance/quick-read/src/quick-read.c index 6cdb735a049..15d4b6378dd 100644 --- a/xlators/performance/quick-read/src/quick-read.c +++ b/xlators/performance/quick-read/src/quick-read.c @@ -33,7 +33,7 @@ qr_loc_wipe (loc_t *loc)          }          if (loc->path) { -                FREE (loc->path); +                GF_FREE ((char *)loc->path);                  loc->path = NULL;          } @@ -65,10 +65,10 @@ qr_loc_fill (loc_t *loc, inode_t *inode, char *path)          }          loc->inode = inode_ref (inode); -        loc->path = strdup (path); +        loc->path = gf_strdup (path);          loc->ino = inode->ino; -        parent = strdup (path); +        parent = gf_strdup (path);          if (parent == NULL) {                  ret = -1;                  goto out; @@ -92,7 +92,7 @@ out:          }          if (parent) { -                FREE (parent); +                GF_FREE (parent);          }          return ret; @@ -139,8 +139,8 @@ qr_fd_ctx_free (qr_fd_ctx_t *qr_fd_ctx)          assert (list_empty (&qr_fd_ctx->waiting_ops)); -        FREE (qr_fd_ctx->path); -        FREE (qr_fd_ctx); +        GF_FREE (qr_fd_ctx->path); +        GF_FREE (qr_fd_ctx);  out:          return; @@ -184,7 +184,8 @@ qr_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          {                  ret = __inode_ctx_get (inode, this, &value);                  if (ret == -1) { -                        qr_file = CALLOC (1, sizeof (*qr_file)); +                        qr_file = GF_CALLOC (1, sizeof (*qr_file), +                                             gf_qr_mt_qr_file_t);                          if (qr_file == NULL) {                                  op_ret = -1;                                  op_errno = ENOMEM; @@ -195,7 +196,7 @@ qr_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          ret = __inode_ctx_put (inode, this,                                                 (uint64_t)(long)qr_file);                          if (ret == -1) { -                                FREE (qr_file); +                                GF_FREE (qr_file);                                  qr_file = NULL;                                  op_ret = -1;                                  op_errno = EINVAL; @@ -430,7 +431,8 @@ qr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          conf = this->private; -        tmp_fd_ctx = qr_fd_ctx = CALLOC (1, sizeof (*qr_fd_ctx)); +        tmp_fd_ctx = qr_fd_ctx = GF_CALLOC (1, sizeof (*qr_fd_ctx), +                                            gf_qr_mt_qr_fd_ctx_t);          if (qr_fd_ctx == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -441,7 +443,7 @@ qr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          LOCK_INIT (&qr_fd_ctx->lock);          INIT_LIST_HEAD (&qr_fd_ctx->waiting_ops); -        qr_fd_ctx->path = strdup (loc->path); +        qr_fd_ctx->path = gf_strdup (loc->path);          qr_fd_ctx->flags = flags;          qr_fd_ctx->wbflags = wbflags; @@ -453,7 +455,8 @@ qr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          }          tmp_fd_ctx = NULL; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_qr_mt_qr_local_t);          if (local == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -515,7 +518,7 @@ unwind:          }          if (local != NULL) { -                FREE (local); +                GF_FREE (local);          }          STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd); @@ -599,8 +602,8 @@ qr_validate_cache_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          frame->local = NULL;          call_resume (local->stub); - -        FREE (local); +         +        GF_FREE (local);          return 0;  unwind: @@ -657,7 +660,8 @@ qr_validate_cache (call_frame_t *frame, xlator_t *this, fd_t *fd,          call_stub_t *validate_stub = NULL;          char         need_open = 0, can_wind = 0; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_qr_mt_qr_local_t);          if (local == NULL) {                  goto out;          } @@ -839,8 +843,9 @@ qr_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                                                  goto unlock;                                          } -                                        vector = CALLOC (count, -                                                         sizeof (*vector)); +                                        vector = GF_CALLOC (count, +                                                            sizeof (*vector), +                                                            gf_qr_mt_iovec);                                          if (vector == NULL) {                                                  op_ret = -1;                                                  op_errno = ENOMEM; @@ -977,7 +982,7 @@ out:          }          if (vector) { -                FREE (vector); +                GF_FREE (vector);          }          if (iobref) { @@ -1942,8 +1947,9 @@ qr_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)          if (ret == 0) {                  qr_fd_ctx = (qr_fd_ctx_t *)(long)value;          } - -        local = CALLOC (1, sizeof (*local)); +        +        local = GF_CALLOC (1, sizeof (*local), +                           gf_qr_mt_qr_local_t);          if (local == NULL) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -2152,7 +2158,7 @@ qr_forget (xlator_t *this, inode_t *inode)                          UNLOCK (&qr_file->lock);                  } -                FREE (qr_file); +                GF_FREE (qr_file);          }          return 0; @@ -2189,6 +2195,25 @@ qr_priv_dump (xlator_t *this)          return 0;  } +int32_t +mem_acct_init (xlator_t *this) +{ +        int     ret = -1; + +        if (!this) +                return ret; + +        ret = xlator_mem_acct_init (this, gf_qr_mt_end + 1); +         +        if (ret != 0) { +                gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" +                                "failed"); +                return ret; +        } + +        return ret; +} +  int32_t   init (xlator_t *this)  { @@ -2208,7 +2233,8 @@ init (xlator_t *this)  			"dangling volume. check volfile ");  	} -        conf = CALLOC (1, sizeof (*conf)); +        conf = GF_CALLOC (1, sizeof (*conf),  +                          gf_qr_mt_qr_conf_t);          if (conf == NULL) {                  gf_log (this->name, GF_LOG_ERROR,                          "out of memory"); @@ -2249,7 +2275,7 @@ init (xlator_t *this)          this->private = conf;  out:          if ((ret == -1) && conf) { -                FREE (conf); +                GF_FREE (conf);          }          return ret; diff --git a/xlators/performance/quick-read/src/quick-read.h b/xlators/performance/quick-read/src/quick-read.h index e6aebecc18d..7b832ff88ca 100644 --- a/xlators/performance/quick-read/src/quick-read.h +++ b/xlators/performance/quick-read/src/quick-read.h @@ -40,6 +40,7 @@  #include <sys/types.h>  #include <sys/stat.h>  #include <unistd.h> +#include "quick-read-mem-types.h"  #define GLUSTERFS_CONTENT_KEY "glusterfs.content" diff --git a/xlators/performance/read-ahead/src/page.c b/xlators/performance/read-ahead/src/page.c index 063258c8f37..0e271a9ac70 100644 --- a/xlators/performance/read-ahead/src/page.c +++ b/xlators/performance/read-ahead/src/page.c @@ -62,7 +62,8 @@ ra_page_create (ra_file_t *file, off_t offset)  		page = page->next;  	if (page == &file->pages || page->offset != rounded_offset) { -		newpage = CALLOC (1, sizeof (*newpage)); +		newpage = GF_CALLOC (1, sizeof (*newpage), +                                     gf_ra_mt_ra_page_t);  		if (!newpage)  			return NULL; @@ -87,7 +88,8 @@ ra_wait_on_page (ra_page_t *page, call_frame_t *frame)  	ra_local_t *local = NULL;  	local = frame->local; -	waitq = CALLOC (1, sizeof (*waitq)); +	waitq = GF_CALLOC (1, sizeof (*waitq), +                           gf_ra_mt_ra_waitq_t);  	if (!waitq) {  		gf_log (frame->this->name, GF_LOG_ERROR,  			"out of memory"); @@ -123,7 +125,7 @@ ra_waitq_return (ra_waitq_t *waitq)  		frame = trav->data;  		ra_frame_return (frame); -		free (trav); +		GF_FREE (trav);  	}  } @@ -176,7 +178,7 @@ ra_fault_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  		if (page->vector) {  			iobref_unref (page->iobref); -			free (page->vector); +			GF_FREE (page->vector);  		}  		page->vector = iov_dup (vector, count); @@ -200,7 +202,7 @@ unlock:  	fd_unref (local->fd); -	free (frame->local); +	GF_FREE (frame->local);  	frame->local = NULL;  	STACK_DESTROY (frame->root); @@ -225,7 +227,8 @@ ra_page_fault (ra_file_t *file, call_frame_t *frame, off_t offset)                  goto err;          } -	fault_local = CALLOC (1, sizeof (ra_local_t)); +	fault_local = GF_CALLOC (1, sizeof (ra_local_t), +                                 gf_ra_mt_ra_local_t);          if (fault_local == NULL) {                  STACK_DESTROY (fault_frame->root);                  op_ret = -1; @@ -297,7 +300,8 @@ ra_frame_fill (ra_page_t *page, call_frame_t *frame)  			fill = fill->next;  		} -		new = CALLOC (1, sizeof (*new)); +		new = GF_CALLOC (1, sizeof (*new), +                                gf_ra_mt_ra_fill_t);                  if (new == NULL) {                          local->op_ret = -1;                          local->op_errno = ENOMEM; @@ -310,11 +314,12 @@ ra_frame_fill (ra_page_t *page, call_frame_t *frame)  		new->count = iov_subset (page->vector, page->count,  					 src_offset, src_offset+copy_size,  					 NULL); -		new->vector = CALLOC (new->count, sizeof (struct iovec)); +		new->vector = GF_CALLOC (new->count, sizeof (struct iovec), +                                         gf_ra_mt_iovec);                  if (new->vector == NULL) {                          local->op_ret = -1;                          local->op_errno = ENOMEM; -                        FREE (new); +                        GF_FREE (new);                          goto out;                  } @@ -366,7 +371,8 @@ ra_frame_unwind (call_frame_t *frame)  		fill = fill->next;  	} -	vector = CALLOC (count, sizeof (*vector)); +	vector = GF_CALLOC (count, sizeof (*vector), +                            gf_ra_mt_iovec);          if (vector == NULL) {                  local->op_ret = -1;                  local->op_errno = ENOMEM; @@ -391,8 +397,8 @@ ra_frame_unwind (call_frame_t *frame)  		fill->prev->next = fill->prev;  		iobref_unref (fill->iobref); -		free (fill->vector); -		free (fill); +		GF_FREE (fill->vector); +		GF_FREE (fill);  		fill = next;  	} @@ -406,8 +412,8 @@ ra_frame_unwind (call_frame_t *frame)  	iobref_unref (iobref);  	pthread_mutex_destroy (&local->local_lock); -	free (local); -	free (vector); +	GF_FREE (local); +	GF_FREE (vector);  	return;  } @@ -475,8 +481,8 @@ ra_page_purge (ra_page_t *page)  	if (page->iobref) {  		iobref_unref (page->iobref);  	} -	free (page->vector); -	free (page); +	GF_FREE (page->vector); +	GF_FREE (page);  }  /* @@ -541,5 +547,5 @@ ra_file_destroy (ra_file_t *file)  	}  	pthread_mutex_destroy (&file->file_lock); -	free (file); +	GF_FREE (file);  } diff --git a/xlators/performance/read-ahead/src/read-ahead-mem-types.h b/xlators/performance/read-ahead/src/read-ahead-mem-types.h new file mode 100644 index 00000000000..b21d0595a2d --- /dev/null +++ b/xlators/performance/read-ahead/src/read-ahead-mem-types.h @@ -0,0 +1,37 @@ +/* +   Copyright (c) 2008-2009 Gluster, Inc. <http://www.gluster.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + + +#ifndef __RA_MEM_TYPES_H__ +#define __RA_MEM_TYPES_H__ + +#include "mem-types.h" + +enum gf_ra_mem_types_ { +        gf_ra_mt_ra_file_t   = gf_common_mt_end + 1, +        gf_ra_mt_ra_local_t, +        gf_ra_mt_ra_conf_t, +        gf_ra_mt_ra_page_t, +        gf_ra_mt_ra_waitq_t, +        gf_ra_mt_ra_fill_t, +        gf_ra_mt_iovec, +        gf_ra_mt_end +}; +#endif + diff --git a/xlators/performance/read-ahead/src/read-ahead.c b/xlators/performance/read-ahead/src/read-ahead.c index c0a43258242..9f97c72e933 100644 --- a/xlators/performance/read-ahead/src/read-ahead.c +++ b/xlators/performance/read-ahead/src/read-ahead.c @@ -59,7 +59,7 @@ ra_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          wbflags = (long)frame->local; -	file = CALLOC (1, sizeof (*file)); +	file = GF_CALLOC (1, sizeof (*file), gf_ra_mt_ra_file_t);  	if (!file) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -129,7 +129,7 @@ ra_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  		goto unwind;  	} -	file = CALLOC (1, sizeof (*file)); +	file = GF_CALLOC (1, sizeof (*file), gf_ra_mt_ra_file_t);  	if (!file) {                  op_ret = -1;                  op_errno = ENOMEM; @@ -480,7 +480,8 @@ ra_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,  		return 0;  	} -	local = (void *) CALLOC (1, sizeof (*local)); +	local = (void *) GF_CALLOC (1, sizeof (*local), +                                    gf_ra_mt_ra_local_t);  	if (!local) {  		gf_log (this->name, GF_LOG_ERROR,  			"out of memory"); @@ -823,6 +824,25 @@ ra_priv_dump (xlator_t *this)          return 0;  } +int32_t +mem_acct_init (xlator_t *this) +{ +        int     ret = -1; + +        if (!this) +                return ret; + +        ret = xlator_mem_acct_init (this, gf_ra_mt_end + 1); +         +        if (ret != 0) { +                gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" +                                "failed"); +                return ret; +        } + +        return ret; +} +  int  init (xlator_t *this)  { @@ -843,7 +863,8 @@ init (xlator_t *this)  			"dangling volume. check volfile ");  	} -	conf = (void *) CALLOC (1, sizeof (*conf)); +	conf = (void *) GF_CALLOC (1, sizeof (*conf), +                                   gf_ra_mt_ra_conf_t);          if (conf == NULL) {                  gf_log (this->name, GF_LOG_ERROR,                          "FATAL: Out of memory"); @@ -897,7 +918,7 @@ init (xlator_t *this)  out:          if (ret == -1) {                  if (conf != NULL) { -                        FREE (conf); +                        GF_FREE (conf);                  }          } @@ -913,7 +934,7 @@ fini (xlator_t *this)                  return;  	pthread_mutex_destroy (&conf->conf_lock); -	FREE (conf); +	GF_FREE (conf);  	this->private = NULL;  	return; diff --git a/xlators/performance/read-ahead/src/read-ahead.h b/xlators/performance/read-ahead/src/read-ahead.h index 0ad47fc756b..1f56e85d2ea 100644 --- a/xlators/performance/read-ahead/src/read-ahead.h +++ b/xlators/performance/read-ahead/src/read-ahead.h @@ -31,6 +31,7 @@  #include "dict.h"  #include "xlator.h"  #include "common-utils.h" +#include "read-ahead-mem-types.h"  struct ra_conf;  struct ra_local; diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch-mem-types.h b/xlators/performance/stat-prefetch/src/stat-prefetch-mem-types.h new file mode 100644 index 00000000000..f3d25a8af71 --- /dev/null +++ b/xlators/performance/stat-prefetch/src/stat-prefetch-mem-types.h @@ -0,0 +1,36 @@ +/* +   Copyright (c) 2008-2009 Gluster, Inc. <http://www.gluster.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + + +#ifndef __SP_MEM_TYPES_H__ +#define __SP_MEM_TYPES_H__ + +#include "mem-types.h" + +enum gf_sp_mem_types_ { +        gf_sp_mt_sp_cache_t   = gf_common_mt_end + 1, +        gf_sp_mt_sp_fd_ctx_t, +        gf_sp_mt_stat, +        gf_sp_mt_sp_local_t, +        gf_sp_mt_sp_inode_ctx_t, +        gf_sp_mt_sp_private_t, +        gf_sp_mt_end +}; +#endif + diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch.c b/xlators/performance/stat-prefetch/src/stat-prefetch.c index c54042130e8..e7dd8958fb4 100644 --- a/xlators/performance/stat-prefetch/src/stat-prefetch.c +++ b/xlators/performance/stat-prefetch/src/stat-prefetch.c @@ -59,7 +59,7 @@ sp_inode_ctx_free (xlator_t *this, sp_inode_ctx_t *ctx)          UNLOCK (&ctx->lock);          LOCK_DESTROY (&ctx->lock); -        FREE (ctx); +        GF_FREE (ctx);  out:          return; @@ -71,7 +71,8 @@ sp_inode_ctx_init ()  {          sp_inode_ctx_t *inode_ctx = NULL; -        inode_ctx = CALLOC (1, sizeof (*inode_ctx)); +        inode_ctx = GF_CALLOC (1, sizeof (*inode_ctx), +                               gf_sp_mt_sp_inode_ctx_t);          if (inode_ctx == NULL) {                  goto out;          } @@ -224,7 +225,7 @@ sp_cache_unref (sp_cache_t *cache)          if (refcount == 0) {                  rbthash_table_destroy (cache->table); -                FREE (cache); +                GF_FREE (cache);          }  out: @@ -272,7 +273,8 @@ sp_process_inode_ctx (call_frame_t *frame, xlator_t *this, loc_t *loc,          {                  if (!(inode_ctx->looked_up || inode_ctx->lookup_in_progress)) {                          if (frame->local == NULL) { -                                local = CALLOC (1, sizeof (*local)); +                                local = GF_CALLOC (1, sizeof (*local),  +                                                   gf_sp_mt_sp_local_t);                                  GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name,                                                                  local,                                                                  unlock, @@ -340,14 +342,14 @@ sp_cache_init (xlator_t *this)          if (!priv->mem_pool)                  goto out; -        cache = CALLOC (1, sizeof (*cache)); +        cache = GF_CALLOC (1, sizeof (*cache), gf_sp_mt_sp_cache_t);          if (cache) {                  cache->table =                          rbthash_table_init (GF_SP_CACHE_BUCKETS,                                              sp_hashfn, free,                                              0, priv->mem_pool);                  if (cache->table == NULL) { -                        FREE (cache); +                        GF_FREE (cache);                          cache = NULL;                          goto out;                  } @@ -366,7 +368,7 @@ sp_local_free (sp_local_t *local)  {          if (local) {                  loc_wipe (&local->loc); -                FREE (local); +                GF_FREE (local);          }  } @@ -400,7 +402,7 @@ sp_cache_remove_entry (sp_cache_t *cache, char *name, char remove_all)                          table = cache->table;                          cache->table = rbthash_table_init (GF_SP_CACHE_BUCKETS,                                                             sp_hashfn, -                                                           free, +                                                           __gf_free,                                                             0,                                                             priv->mem_pool);                          if (cache->table == NULL) { @@ -412,7 +414,7 @@ sp_cache_remove_entry (sp_cache_t *cache, char *name, char remove_all)                  } else {                          data = rbthash_remove (cache->table, name,                                                 strlen (name)); -                        FREE (data); +                        GF_FREE (data);                          ret = 0;                  }          } @@ -526,7 +528,7 @@ sp_fd_ctx_free (sp_fd_ctx_t *fd_ctx)          }          if (fd_ctx->name) { -                FREE (fd_ctx->name); +                GF_FREE (fd_ctx->name);                  fd_ctx->name = NULL;          } @@ -534,7 +536,7 @@ sp_fd_ctx_free (sp_fd_ctx_t *fd_ctx)                  sp_cache_free (fd_ctx->cache);          } -        FREE (fd_ctx); +        GF_FREE (fd_ctx);  out:          return;  } @@ -545,7 +547,7 @@ sp_fd_ctx_init (void)  {          sp_fd_ctx_t *fd_ctx = NULL; -        fd_ctx = CALLOC (1, sizeof (*fd_ctx)); +        fd_ctx = GF_CALLOC (1, sizeof (*fd_ctx), gf_sp_mt_sp_fd_ctx_t);          return fd_ctx;  } @@ -567,7 +569,7 @@ sp_fd_ctx_new (xlator_t *this, inode_t *parent, char *name, sp_cache_t *cache)          }          if (name) { -                fd_ctx->name = strdup (name); +                fd_ctx->name = gf_strdup (name);                  if (fd_ctx->name == NULL) {                          sp_fd_ctx_free (fd_ctx);                          fd_ctx = NULL; @@ -713,7 +715,7 @@ sp_cache_add_entries (sp_cache_t *cache, gf_dirent_t *entries)                          ret = rbthash_insert (cache->table, new, new->d_name,                                                strlen (new->d_name));                          if (ret == -1) { -                                FREE (new); +                                GF_FREE (new);                                  continue;                          } @@ -807,7 +809,7 @@ sp_get_ancestors (char *path, char **parent, char **grand_parent)                          break;                  } -                cpy = strdup (path); +                cpy = gf_strdup (path);                  if (cpy == NULL) {                          goto out;                  } @@ -851,13 +853,13 @@ sp_cache_remove_parent_entry (call_frame_t *frame, xlator_t *this,                          cache_gp = sp_get_cache_inode (this, inode_gp,                                                         frame->root->pid);                          if (cache_gp) { -                                cpy = strdup (parent); +                                cpy = gf_strdup (parent);                                  GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name,                                                                  cpy, out, errno,                                                                  ENOMEM);                                  path = basename (cpy);                                  sp_cache_remove_entry (cache_gp, path, 0); -                                FREE (cpy); +                                GF_FREE (cpy);                                  sp_cache_unref (cache_gp);                          } @@ -868,11 +870,11 @@ sp_cache_remove_parent_entry (call_frame_t *frame, xlator_t *this,          ret = 0;  out:          if (parent) { -                FREE (parent); +                GF_FREE (parent);          }          if (grand_parent) { -                FREE (grand_parent); +                GF_FREE (grand_parent);          }          return ret; @@ -1015,7 +1017,7 @@ sp_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)                                  entry_cached = 1;                          } -                        FREE (dirent); +                        GF_FREE (dirent);                  }           } else if (IA_ISDIR (loc->inode->ia_type)) {                  cache = sp_get_cache_inode (this, loc->inode, frame->root->pid); @@ -1032,7 +1034,7 @@ sp_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)                                          entry_cached = 1;                                  } -                                FREE (dirent); +                                GF_FREE (dirent);                          }                  }          } @@ -1054,7 +1056,7 @@ wind:                  GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, stub, unwind,                                                  op_errno, ENOMEM); -                local = CALLOC (1, sizeof (*local)); +                local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);                  GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, unwind,                                                  op_errno, ENOMEM); @@ -1204,14 +1206,14 @@ sp_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,          ret = sp_cache_remove_parent_entry (frame, this, fd->inode->table,                                              path); -        FREE (path); +        GF_FREE (path);          if (ret < 0) {                  errno = -ret;                  goto unwind;          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);          if (local) {                  local->fd = fd;                  frame->local = local; @@ -1341,7 +1343,7 @@ sp_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, loc->inode, out,                                          op_errno, EINVAL); -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, out, op_errno,                                          ENOMEM); @@ -1453,7 +1455,7 @@ sp_create (call_frame_t *frame,	xlator_t *this,	loc_t *loc, int32_t flags,                  goto out;          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, out, op_errno,                                          ENOMEM); @@ -1541,7 +1543,7 @@ sp_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, loc->inode, out,                                          op_errno, EINVAL); -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, out, op_errno,                                          ENOMEM); @@ -1643,7 +1645,7 @@ sp_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode)                  goto out;          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, out, op_errno,                                          ENOMEM); @@ -1706,7 +1708,7 @@ sp_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,                  goto out;          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, out, op_errno,                                          ENOMEM); @@ -1769,7 +1771,7 @@ sp_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,                  goto out;          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), gf_sp_mt_sp_local_t);          GF_VALIDATE_OR_GOTO_WITH_ERROR (this->name, local, out, op_errno,                                          ENOMEM); @@ -3687,7 +3689,7 @@ sp_forget (xlator_t *this, inode_t *inode)          if (value) {                  buf = (void *)(long)value; -                FREE (buf); +                GF_FREE (buf);          }          return 0; @@ -3717,7 +3719,24 @@ sp_release (xlator_t *this, fd_t *fd)          return 0;  } +int32_t +mem_acct_init (xlator_t *this) +{ +        int     ret = -1; + +        if (!this) +                return ret; + +        ret = xlator_mem_acct_init (this, gf_sp_mt_end + 1); +         +        if (ret != 0) { +                gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" +                                "failed"); +                return ret; +        } +        return ret; +}  int32_t   init (xlator_t *this) @@ -3733,7 +3752,8 @@ init (xlator_t *this)                  goto out;          } -        priv = CALLOC (1, sizeof(sp_private_t)); +        priv = GF_CALLOC (1, sizeof(sp_private_t), +                          gf_sp_mt_sp_private_t);          LOCK_INIT (&priv->lock);          this->private = priv; diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch.h b/xlators/performance/stat-prefetch/src/stat-prefetch.h index 9ff2899a9ac..16edf76aa71 100644 --- a/xlators/performance/stat-prefetch/src/stat-prefetch.h +++ b/xlators/performance/stat-prefetch/src/stat-prefetch.h @@ -33,6 +33,7 @@  #include "rbthash.h"  #include "hashfn.h"  #include "call-stub.h" +#include "stat-prefetch-mem-types.h"  #include <libgen.h>  struct sp_cache { diff --git a/xlators/performance/write-behind/src/write-behind-mem-types.h b/xlators/performance/write-behind/src/write-behind-mem-types.h new file mode 100644 index 00000000000..6184615195b --- /dev/null +++ b/xlators/performance/write-behind/src/write-behind-mem-types.h @@ -0,0 +1,35 @@ +/* +   Copyright (c) 2008-2009 Gluster, Inc. <http://www.gluster.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + + +#ifndef __WB_MEM_TYPES_H__ +#define __WB_MEM_TYPES_H__ + +#include "mem-types.h" + +enum gf_wb_mem_types_ { +        gf_wb_mt_wb_file_t   = gf_common_mt_end + 1, +        gf_wb_mt_wb_local_t, +        gf_wb_mt_wb_request_t, +        gf_wb_mt_iovec, +        gf_wb_mt_wb_conf_t, +        gf_wb_mt_end +}; +#endif + diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c index 3cbfc497591..bd046500657 100644 --- a/xlators/performance/write-behind/src/write-behind.c +++ b/xlators/performance/write-behind/src/write-behind.c @@ -35,6 +35,7 @@  #include "common-utils.h"  #include "call-stub.h"  #include "statedump.h" +#include "write-behind-mem-types.h"  #define MAX_VECTOR_COUNT 8  #define WB_AGGREGATE_SIZE 131072 /* 128 KB */ @@ -141,7 +142,7 @@ __wb_request_unref (wb_request_t *this)                          call_stub_destroy (this->stub);                  } -                FREE (this); +                GF_FREE (this);          }  } @@ -209,7 +210,7 @@ wb_enqueue (wb_file_t *file, call_stub_t *stub)          struct iovec *vector = NULL;          int32_t       count = 0; -        request = CALLOC (1, sizeof (*request)); +        request = GF_CALLOC (1, sizeof (*request), gf_wb_mt_wb_request_t);          if (request == NULL) {                  goto out;          } @@ -270,7 +271,7 @@ wb_file_create (xlator_t *this, fd_t *fd)          wb_file_t *file = NULL;          wb_conf_t *conf = this->private;  -        file = CALLOC (1, sizeof (*file)); +        file = GF_CALLOC (1, sizeof (*file), gf_wb_mt_wb_file_t);          if (file == NULL) {                  goto out;          } @@ -307,7 +308,7 @@ wb_file_destroy (wb_file_t *file)          if (!refcount){                  LOCK_DESTROY (&file->lock); -                FREE (file); +                GF_FREE (file);          }          return; @@ -407,7 +408,8 @@ wb_sync (call_frame_t *frame, wb_file_t *file, list_head_t *winds)          list_for_each_entry_safe (request, dummy, winds, winds) {                  if (!vector) { -                        vector = MALLOC (VECTORSIZE (MAX_VECTOR_COUNT)); +                        vector = GF_MALLOC (VECTORSIZE (MAX_VECTOR_COUNT), +                                            gf_wb_mt_iovec);                          if (vector == NULL) {                                  bytes = -1;                                  goto out; @@ -419,7 +421,8 @@ wb_sync (call_frame_t *frame, wb_file_t *file, list_head_t *winds)                                  goto out;                          } -                        local = CALLOC (1, sizeof (*local)); +                        local = GF_CALLOC (1, sizeof (*local), +                                           gf_wb_mt_wb_local_t);                          if (local == NULL) {                                  bytes = -1;                                  goto out; @@ -488,7 +491,7 @@ wb_sync (call_frame_t *frame, wb_file_t *file, list_head_t *winds)                                      iobref);                          iobref_unref (iobref); -                        FREE (vector); +                        GF_FREE (vector);                          first_request = NULL;                          iobref = NULL;                          vector = NULL; @@ -505,7 +508,7 @@ out:          }          if (local != NULL) { -                FREE (local); +                GF_FREE (local);          }          if (iobref != NULL) { @@ -513,7 +516,7 @@ out:          }          if (vector != NULL) { -                FREE (vector); +                GF_FREE (vector);          }          return bytes; @@ -612,7 +615,8 @@ wb_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)                  }          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -726,7 +730,8 @@ wb_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)          }  	file = (wb_file_t *)(long)tmp_file; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  STACK_UNWIND_STRICT (fstat, frame, -1, ENOMEM, NULL);                  return 0; @@ -877,7 +882,8 @@ wb_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)                  }          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -994,7 +1000,8 @@ wb_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)  	file = (wb_file_t *)(long)tmp_file; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  STACK_UNWIND_STRICT (ftruncate, frame, -1, ENOMEM,                                       NULL, NULL); @@ -1131,7 +1138,8 @@ wb_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          wb_request_t *request = NULL;          int32_t       ret = -1, op_errno = EINVAL; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -1263,7 +1271,8 @@ wb_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          wb_local_t *local = NULL;          int32_t     op_errno = EINVAL; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -1894,7 +1903,8 @@ wb_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,                  goto unwind;          } -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  op_errno = ENOMEM;                  goto unwind; @@ -2010,7 +2020,8 @@ wb_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,  	file = (wb_file_t *)(long)tmp_file; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  STACK_UNWIND_STRICT (readv, frame, -1, ENOMEM,                                       NULL, 0, NULL, NULL); @@ -2165,7 +2176,8 @@ wb_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)  	file = (wb_file_t *)(long)tmp_file;          if (file != NULL) { -                local = CALLOC (1, sizeof (*local)); +                local = GF_CALLOC (1, sizeof (*local), +                                   gf_wb_mt_wb_local_t);                  if (local == NULL) {                          STACK_UNWIND (frame, -1, ENOMEM, NULL);                          return 0; @@ -2196,7 +2208,8 @@ wb_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)                  if (conf->flush_behind                      && (!disabled) && (disable_till == 0)) { -                        tmp_local = CALLOC (1, sizeof (*local)); +                        tmp_local = GF_CALLOC (1, sizeof (*local), +                                               gf_wb_mt_wb_local_t);                          if (tmp_local == NULL) {                                  STACK_UNWIND_STRICT (flush, frame, -1, ENOMEM); @@ -2337,7 +2350,8 @@ wb_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync)  	file = (wb_file_t *)(long)tmp_file; -        local = CALLOC (1, sizeof (*local)); +        local = GF_CALLOC (1, sizeof (*local), +                           gf_wb_mt_wb_local_t);          if (local == NULL) {                  STACK_UNWIND_STRICT (fsync, frame, -1, ENOMEM, NULL, NULL);                  return 0; @@ -2444,6 +2458,25 @@ wb_priv_dump (xlator_t *this)          return 0;  } +int32_t +mem_acct_init (xlator_t *this) +{ +        int     ret = -1; + +        if (!this) +                return ret; + +        ret = xlator_mem_acct_init (this, gf_wb_mt_end + 1); + +        if (ret != 0) { +                gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" +                        "failed"); +                return ret; +        } + +        return ret; +} +  int32_t   init (xlator_t *this)  { @@ -2468,7 +2501,7 @@ init (xlator_t *this)          options = this->options; -        conf = CALLOC (1, sizeof (*conf)); +        conf = GF_CALLOC (1, sizeof (*conf), gf_wb_mt_wb_conf_t);          if (conf == NULL) {                  gf_log (this->name, GF_LOG_ERROR,                          "FATAL: Out of memory"); @@ -2521,7 +2554,7 @@ init (xlator_t *this)                                  "invalid number format \"%s\" of \"option "                                  "window-size\"",                                   str); -                        FREE (conf); +                        GF_FREE (conf);                          return -1;                  }          } @@ -2539,7 +2572,7 @@ init (xlator_t *this)                          "aggregate-size(%"PRIu64") cannot be more than "                          "window-size"                          "(%"PRIu64")", conf->aggregate_size, conf->window_size); -                FREE (conf); +                GF_FREE (conf);                  return -1;          } @@ -2586,7 +2619,7 @@ fini (xlator_t *this)  {          wb_conf_t *conf = this->private; -        FREE (conf); +        GF_FREE (conf);          return;  }  | 
