/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2011 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
+ * Copyright (C) 2002-2018 Aleph One Ltd.
*
* Created by Charles Manning <charles@aleph1.co.uk>
*
while ((dev = yaffs_next_dev()) != NULL) {
result = yaffs_do_background_gc_reldev(dev, urgent);
- if (result > 0)
+
+ /* result is 1 if more than half the free space is
+ * erased.
+ * If less than half the free space is erased then it is
+ * worth doing another background_gc operation sooner.
+ */
+ if (result == 0)
next_urgent = 1;
}
* Functions to allocate and free memory.
*/
+
+static unsigned malloc_high_water;
+static unsigned malloc_currently_allocated;
+
+#ifdef CONFIG_YAFFS_MONITOR_MALLOC
+
+#include <malloc.h>
+static void yaffsfs_malloc_add(void *ptr)
+{
+ unsigned this_size = malloc_usable_size(ptr);
+ malloc_currently_allocated += this_size;
+
+ if (malloc_currently_allocated > malloc_high_water)
+ malloc_high_water = malloc_currently_allocated;
+}
+
+static void yaffsfs_malloc_remove(void *ptr)
+{
+ unsigned this_size = malloc_usable_size(ptr);
+ malloc_currently_allocated -= this_size;
+}
+#else
+static void yaffsfs_malloc_add(void *ptr)
+{
+ (void)ptr;
+}
+
+static void yaffsfs_malloc_remove(void *ptr)
+{
+ (void)ptr;
+}
+#endif
+
+void yaffsfs_get_malloc_values(unsigned *current, unsigned *high_water)
+{
+ if (current)
+ *current = malloc_currently_allocated;
+ if(high_water)
+ *high_water = malloc_high_water;
+}
+
+
#ifdef CONFIG_YAFFS_TEST_MALLOC
static int yaffs_kill_alloc = 0;
this = malloc(size);
if(this)
total_malloced += size;
+ yaffsfs_malloc_add(this);
return this;
}
void *yaffsfs_malloc(size_t size)
{
- return malloc(size);
+ void *this = malloc(size);
+ yaffsfs_malloc_add(this);
+ return this;
}
#endif
+
+
+
void yaffsfs_free(void *ptr)
{
+ yaffsfs_malloc_remove(ptr);
free(ptr);
}