Patch from Krzysztof Blaszkowski with some cleanups:
authorvlnb <vlnb@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Thu, 19 Feb 2009 19:06:13 +0000 (19:06 +0000)
committervlnb <vlnb@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Thu, 19 Feb 2009 19:06:13 +0000 (19:06 +0000)
I realized yesterday that the fix missed one rare case
still. if the hiwmk_check() returned with error and no_fail override was set
then the counter would still cross 0 on free.

git-svn-id: https://scst.svn.sourceforge.net/svnroot/scst/trunk@677 d57e44dd-8a1f-0410-8b47-8ef2f437770f

scst/src/scst_mem.c

index 445edc4..05383b2 100644 (file)
@@ -899,7 +899,14 @@ struct scatterlist *scst_alloc(int size, gfp_t gfp_mask, int *count)
                if (!no_fail) {
                        res = NULL;
                        goto out;
-               }
+               } else {
+                       /*
+                        * Update active_pages_total since alloc can't fail.
+                        * If it wasn't updated then the counter would cross 0
+                        * on free again.
+                        */
+                       sgv_pool_hiwmk_uncheck(-pages);
+                }
        }
 
        res = kmalloc(pages*sizeof(*res), gfp_mask);
@@ -1007,7 +1014,6 @@ int sgv_pool_init(struct sgv_pool *pool, const char *name,
                                        sizeof(obj->trans_tbl[0]) : 0));
                } else {
                        size = sizeof(*obj);
-
                        /* both sgv and ttbl are kallocated() */
                }