From: Pekka Enberg <penberg@gmail.com>
To: Tom Zanussi <zanussi@us.ibm.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
Greg KH <greg@kroah.com>, Andrew Morton <akpm@osdl.org>,
Andi Kleen <ak@muc.de>, Roman Zippel <zippel@linux-m68k.org>,
Robert Wisniewski <bob@watson.ibm.com>,
Tim Bird <tim.bird@am.sony.com>,
Christoph Hellwig <hch@infradead.org>,
karim@opersys.com, penberg@cs.helsinki.fi
Subject: Re: [PATCH] relayfs redux, part 4
Date: Thu, 10 Feb 2005 09:33:36 +0200 [thread overview]
Message-ID: <84144f02050209233314373462@mail.gmail.com> (raw)
In-Reply-To: <16906.52160.870346.806462@tut.ibm.com>
Hi Tom,
On Wed, 9 Feb 2005 20:49:36 -0600, Tom Zanussi <zanussi@us.ibm.com> wrote:
> +static inline struct page **alloc_page_array(int size, int *page_count)
> +{
> + int n_pages;
> + struct page **page_array;
> +
> + size = PAGE_ALIGN(size);
> + n_pages = size >> PAGE_SHIFT;
> +
> + page_array = kcalloc(n_pages, sizeof(struct page *), GFP_KERNEL);
> + if (!page_array)
> + return NULL;
> + *page_count = n_pages;
> +
> + return page_array;
> +}
[snip]
> +static int populate_page_array(struct page **page_array, int page_count)
> +{
> + int i;
> +
> + for (i = 0; i < page_count; i++) {
> + page_array[i] = alloc_page(GFP_KERNEL);
> + if (unlikely(!page_array[i])) {
> + depopulate_page_array(page_array, i);
> + return -ENOMEM;
> + }
> + }
> + return 0;
> +}
> +
> +/**
> + * relay_alloc_rchan_buf - allocate a channel buffer
> + * @size: total size of the buffer
> + * @page_array: receives a pointer to the buffer's page array
> + * @page_count: receives the number of pages allocated
> + *
> + * Returns a pointer to the resulting buffer, NULL if unsuccessful
> + */
> +void *relay_alloc_rchan_buf(unsigned long size, struct page ***page_array,
> + int *page_count)
> +{
> + void *mem;
> +
> + *page_array = alloc_page_array(size, page_count);
> + if (!*page_array)
> + return NULL;
> +
> + if (populate_page_array(*page_array, *page_count)) {
> + kfree(*page_array);
> + *page_array = NULL;
> + return NULL;
> + }
[snip]
Please consider inlining alloc_page_array() and populate_page_array()
into relay_alloc_rchan_buf() as they're only used once. You'd get rid
of passing page_count as a pointer this way. If inlining is
unacceptable, please at least move the n_pages calculation to
relay_alloc_rchan_buf() to make the API more sane.
I think relay_alloc_rchan_buf also would benefit from goto-styled
error handling.
Pekka
next prev parent reply other threads:[~2005-02-10 7:33 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-10 2:49 [PATCH] relayfs redux, part 4 Tom Zanussi
2005-02-10 6:30 ` Maneesh Soni
2005-02-10 6:49 ` Tom Zanussi
2005-02-10 7:33 ` Pekka Enberg [this message]
2005-02-10 9:09 ` Andi Kleen
2005-02-10 9:14 ` Pekka J Enberg
2005-02-10 7:52 ` [PATCH] " Pekka Enberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=84144f02050209233314373462@mail.gmail.com \
--to=penberg@gmail.com \
--cc=ak@muc.de \
--cc=akpm@osdl.org \
--cc=bob@watson.ibm.com \
--cc=greg@kroah.com \
--cc=hch@infradead.org \
--cc=karim@opersys.com \
--cc=linux-kernel@vger.kernel.org \
--cc=penberg@cs.helsinki.fi \
--cc=tim.bird@am.sony.com \
--cc=zanussi@us.ibm.com \
--cc=zippel@linux-m68k.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.