Re: [PATCH 2/9] swap_info: change to array of pointers

From: Hugh Dickins
Date: Thu Oct 15 2009 - 19:05:17 EST


On Thu, 15 Oct 2009, Hugh Dickins wrote:
> On Thu, 15 Oct 2009, KAMEZAWA Hiroyuki wrote:
> > On Thu, 15 Oct 2009 01:48:01 +0100 (BST)
> > Hugh Dickins <hugh.dickins@xxxxxxxxxxxxx> wrote:
> > > @@ -1675,11 +1674,13 @@ static void *swap_start(struct seq_file
> > > if (!l)
> > > return SEQ_START_TOKEN;
> > >
> > > - for (i = 0; i < nr_swapfiles; i++, ptr++) {
> > > - if (!(ptr->flags & SWP_USED) || !ptr->swap_map)
> > > + for (type = 0; type < nr_swapfiles; type++) {
> > > + smp_rmb(); /* read nr_swapfiles before swap_info[type] */
> > > + si = swap_info[type];
> >
> > if (!si) ?

Re-reading, I see that I missed your interjection there.

Precisely because we read swap_info[type] after reading nr_swapfiles,
with smp_rmb() here to enforce that, and smp_wmb() where they're set
in swapon, there is no way for si to be seen as NULL here. Is there?

Or are you asking for a further comment here on why that's so?
I think I'd rather just switch to taking swap_lock in swap_start()
and swap_next(), than be adding comments on why we don't need it.

Hugh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/