Tony Battersby
2014-10-23 19:10:21 UTC
Fix a memory leak with scsi-mq triggered by commands with large data
transfer length.
Fixes: c53c6d6a68b1 ("scatterlist: allow chaining to preallocated chunks")
Cc: <***@vger.kernel.org> # 3.17.x
Signed-off-by: Tony Battersby <***@cybernetics.com>
---
For inclusion in 3.18 and 3.17.x.
--- a/lib/scatterlist.c 2014-10-23 13:32:27.000000000 -0400
+++ b/lib/scatterlist.c 2014-10-23 13:32:36.000000000 -0400
@@ -203,10 +203,10 @@ void __sg_free_table(struct sg_table *ta
}
table->orig_nents -= sg_size;
- if (!skip_first_chunk) {
- free_fn(sgl, alloc_size);
+ if (skip_first_chunk)
skip_first_chunk = false;
- }
+ else
+ free_fn(sgl, alloc_size);
sgl = next;
}
transfer length.
Fixes: c53c6d6a68b1 ("scatterlist: allow chaining to preallocated chunks")
Cc: <***@vger.kernel.org> # 3.17.x
Signed-off-by: Tony Battersby <***@cybernetics.com>
---
For inclusion in 3.18 and 3.17.x.
--- a/lib/scatterlist.c 2014-10-23 13:32:27.000000000 -0400
+++ b/lib/scatterlist.c 2014-10-23 13:32:36.000000000 -0400
@@ -203,10 +203,10 @@ void __sg_free_table(struct sg_table *ta
}
table->orig_nents -= sg_size;
- if (!skip_first_chunk) {
- free_fn(sgl, alloc_size);
+ if (skip_first_chunk)
skip_first_chunk = false;
- }
+ else
+ free_fn(sgl, alloc_size);
sgl = next;
}