diff options
-rw-r--r-- | drivers/xen/xenbus/xenbus_xs.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c index 6f0121e3be69..226d1ac55cf4 100644 --- a/drivers/xen/xenbus/xenbus_xs.c +++ b/drivers/xen/xenbus/xenbus_xs.c | |||
@@ -532,21 +532,18 @@ int xenbus_printf(struct xenbus_transaction t, | |||
532 | { | 532 | { |
533 | va_list ap; | 533 | va_list ap; |
534 | int ret; | 534 | int ret; |
535 | #define PRINTF_BUFFER_SIZE 4096 | 535 | char *buf; |
536 | char *printf_buffer; | ||
537 | |||
538 | printf_buffer = kmalloc(PRINTF_BUFFER_SIZE, GFP_NOIO | __GFP_HIGH); | ||
539 | if (printf_buffer == NULL) | ||
540 | return -ENOMEM; | ||
541 | 536 | ||
542 | va_start(ap, fmt); | 537 | va_start(ap, fmt); |
543 | ret = vsnprintf(printf_buffer, PRINTF_BUFFER_SIZE, fmt, ap); | 538 | buf = kvasprintf(GFP_NOIO | __GFP_HIGH, fmt, ap); |
544 | va_end(ap); | 539 | va_end(ap); |
545 | 540 | ||
546 | BUG_ON(ret > PRINTF_BUFFER_SIZE-1); | 541 | if (!buf) |
547 | ret = xenbus_write(t, dir, node, printf_buffer); | 542 | return -ENOMEM; |
543 | |||
544 | ret = xenbus_write(t, dir, node, buf); | ||
548 | 545 | ||
549 | kfree(printf_buffer); | 546 | kfree(buf); |
550 | 547 | ||
551 | return ret; | 548 | return ret; |
552 | } | 549 | } |