summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2010-09-24 15:37:33 +1000
committerDave Airlie <airlied@redhat.com>2010-09-24 15:37:33 +1000
commit4a445f291ac3faa08f56eaeb6e44856b6b72b74c (patch)
treeb66cc93311dc4c623113a87aa9b40730a21ac18e /lib
parentcbc60ca04b342a4e1f2a1086a7277c077f07dbed (diff)
parenta850ea30374ebed32a0724742601861853fde869 (diff)
downloadlinux-4a445f291ac3faa08f56eaeb6e44856b6b72b74c.tar.gz
linux-4a445f291ac3faa08f56eaeb6e44856b6b72b74c.zip
Merge remote branch 'origin/master' of /home/airlied/kernel//linux-2.6 into drm-core-next
Diffstat (limited to 'lib')
-rw-r--r--lib/raid6/.gitignore4
-rw-r--r--lib/scatterlist.c14
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/raid6/.gitignore b/lib/raid6/.gitignore
new file mode 100644
index 000000000000..162becacf97c
--- /dev/null
+++ b/lib/raid6/.gitignore
@@ -0,0 +1,4 @@
+mktables
+altivec*.c
+int*.c
+tables.c
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
index a5ec42868f99..4ceb05d772ae 100644
--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -248,8 +248,18 @@ int __sg_alloc_table(struct sg_table *table, unsigned int nents,
left -= sg_size;
sg = alloc_fn(alloc_size, gfp_mask);
- if (unlikely(!sg))
- return -ENOMEM;
+ if (unlikely(!sg)) {
+ /*
+ * Adjust entry count to reflect that the last
+ * entry of the previous table won't be used for
+ * linkage. Without this, sg_kfree() may get
+ * confused.
+ */
+ if (prv)
+ table->nents = ++table->orig_nents;
+
+ return -ENOMEM;
+ }
sg_init_table(sg, alloc_size);
table->nents = table->orig_nents += sg_size;