summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnand V. Avati <avati@amp.gluster.com>2009-04-17 23:12:37 +0530
committerAnand V. Avati <avati@amp.gluster.com>2009-04-17 23:12:37 +0530
commit1d6dfe94fb970b51d96653da6c3361533d697fc3 (patch)
tree6d90357c54aac0e1732d05a0ef853ab44a396c69
parent7867577b346c7f003be67ad202f4085cf35fdf7c (diff)
added 2 APIs iobuf_size and iobref_size to return the system memory usage by an iobuf, and by all iobufs in an iobref respectively
-rw-r--r--libglusterfs/src/iobuf.c42
-rw-r--r--libglusterfs/src/iobuf.h4
2 files changed, 46 insertions, 0 deletions
diff --git a/libglusterfs/src/iobuf.c b/libglusterfs/src/iobuf.c
index a10dc6f847d..84e3b5efec6 100644
--- a/libglusterfs/src/iobuf.c
+++ b/libglusterfs/src/iobuf.c
@@ -570,3 +570,45 @@ iobref_merge (struct iobref *to, struct iobref *from)
return ret;
}
+
+
+size_t
+iobuf_size (struct iobuf *iobuf)
+{
+ size_t size = 0;
+
+ if (!iobuf)
+ goto out;
+
+ if (!iobuf->iobuf_arena)
+ goto out;
+
+ if (!iobuf->iobuf_arena->iobuf_pool)
+ goto out;
+
+ size = iobuf->iobuf_arena->iobuf_pool->page_size;
+out:
+ return size;
+}
+
+
+size_t
+iobref_size (struct iobref *iobref)
+{
+ size_t size = 0;
+ int i = 0;
+
+ if (!iobref)
+ goto out;
+
+ LOCK (&iobref->lock);
+ {
+ for (i = 0; i < 8; i++) {
+ if (iobref->iobrefs[i])
+ size += iobuf_size (iobref->iobrefs[i]);
+ }
+ }
+ UNLOCK (&iobref->lock);
+out:
+ return size;
+}
diff --git a/libglusterfs/src/iobuf.h b/libglusterfs/src/iobuf.h
index 2ad640bbc5a..4c34770849e 100644
--- a/libglusterfs/src/iobuf.h
+++ b/libglusterfs/src/iobuf.h
@@ -109,4 +109,8 @@ void iobref_unref (struct iobref *iobref);
int iobref_add (struct iobref *iobref, struct iobuf *iobuf);
int iobref_merge (struct iobref *to, struct iobref *from);
+
+size_t iobuf_size (struct iobuf *iobuf);
+size_t iobref_size (struct iobref *iobref);
+
#endif /* !_IOBUF_H_ */