From: Shaohua Li <shli@kernel.org>
To: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Cc: linux-raid@vger.kernel.org, songliubraving@fb.com
Subject: Re: [PATCH 1/4] raid5-ppl: use a single mempool for ppl_io_unit and header_page
Date: Tue, 11 Apr 2017 08:41:24 -0700 [thread overview]
Message-ID: <20170411154124.nyvgqixjzjs2tzqd@kernel.org> (raw)
In-Reply-To: <029f973c-77be-fca9-952b-2d3921b5f6cd@intel.com>
On Tue, Apr 11, 2017 at 11:20:13AM +0200, Artur Paszkiewicz wrote:
> On 04/11/2017 10:28 AM, Artur Paszkiewicz wrote:
> > On 04/10/2017 09:09 PM, Shaohua Li wrote:
> >>> +static void *ppl_io_pool_alloc(gfp_t gfp_mask, void *pool_data)
> >>> +{
> >>> + struct kmem_cache *kc = pool_data;
> >>> + struct ppl_io_unit *io;
> >>> +
> >>> + io = kmem_cache_alloc(kc, gfp_mask);
> >>> + if (!io)
> >>> + return NULL;
> >>> +
> >>> + io->header_page = alloc_page(gfp_mask);
> >>> + if (!io->header_page) {
> >>> + kmem_cache_free(kc, io);
> >>> + return NULL;
> >>> + }
> >>> +
> >>> + return io;
> >>
> >> Maybe directly use GFP_NOWAIT here, we don't use other gfp
> >
> > Do you mean ignore the gfp_mask parameter? I don't think we should do
> > that. It is provided by the mempool implementation. We only use
> > GFP_NOWAIT for explicit allocations, but GFP_KERNEL is used for
> > allocating initial items in mempool_create().
> >
> >>> +}
> >>> +
> >>> +static void ppl_io_pool_free(void *element, void *pool_data)
> >>> +{
> >>> + struct kmem_cache *kc = pool_data;
> >>> + struct ppl_io_unit *io = element;
> >>> +
> >>> + __free_page(io->header_page);
> >>> + kmem_cache_free(kc, io);
> >>> +}
> >>> +
> >>> static struct ppl_io_unit *ppl_new_iounit(struct ppl_log *log,
> >>> struct stripe_head *sh)
> >>> {
> >>> @@ -202,18 +228,19 @@ static struct ppl_io_unit *ppl_new_iounit(struct ppl_log *log,
> >>> struct ppl_io_unit *io;
> >>> struct ppl_header *pplhdr;
> >>>
> >>> - io = mempool_alloc(ppl_conf->io_pool, GFP_ATOMIC);
> >>> + io = mempool_alloc(ppl_conf->io_pool, GFP_NOWAIT);
> >>> if (!io)
> >>> return NULL;
> >>>
> >>> - memset(io, 0, sizeof(*io));
> >>> io->log = log;
> >>> + io->entries_count = 0;
> >>> + io->pp_size = 0;
> >>> + io->submitted = false;
> >>
> >> I'd suggest moving the memset to ppl_io_pool_alloc. Don't think we need to
> >> optimize to avoid setting header_page. And doing memset is less error prone,
> >> for example adding new fields.
> >
> > OK, I'll change this and resend.
>
> Well, on second thought, actually I can't move the memset to
> ppl_io_pool_alloc. Mempool can use the preallocated elements, which are
> then returned back to the pool after calling mempool_free() and can be
> reused later. So a ppl_io_unit must be initialized after retrieving it
> from mempool_alloc(). I can leave the memset in ppl_new_iounit() but
> io->header_page pointer will have to be temporarily copied before
> zeroing the iounit and then set back. Is this ok?
Yes, that's preferred.
Thanks,
Shaohua
next prev parent reply other threads:[~2017-04-11 15:41 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-04 11:13 [PATCH 0/4] PPL fixes and improvements Artur Paszkiewicz
2017-04-04 11:13 ` [PATCH 1/4] raid5-ppl: use a single mempool for ppl_io_unit and header_page Artur Paszkiewicz
2017-04-10 19:09 ` Shaohua Li
2017-04-11 8:28 ` Artur Paszkiewicz
2017-04-11 9:20 ` Artur Paszkiewicz
2017-04-11 15:41 ` Shaohua Li [this message]
2017-04-11 18:50 ` [PATCH v2] " Artur Paszkiewicz
2017-04-11 21:58 ` Shaohua Li
2017-04-04 11:13 ` [PATCH 2/4] raid5-ppl: move no_mem_stripes to struct ppl_conf Artur Paszkiewicz
2017-04-04 11:13 ` [PATCH 3/4] raid5-ppl: use resize_stripes() when enabling or disabling ppl Artur Paszkiewicz
2017-04-04 11:13 ` [PATCH 4/4] raid5-ppl: partial parity calculation optimization Artur Paszkiewicz
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=20170411154124.nyvgqixjzjs2tzqd@kernel.org \
--to=shli@kernel.org \
--cc=artur.paszkiewicz@intel.com \
--cc=linux-raid@vger.kernel.org \
--cc=songliubraving@fb.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).