Messages in this thread | | | Date | Fri, 16 Oct 2009 08:47:48 +0900 | From | KAMEZAWA Hiroyuki <> | Subject | Re: [PATCH 2/9] swap_info: change to array of pointers |
| |
On Fri, 16 Oct 2009 00:04:14 +0100 (BST) Hugh Dickins <hugh.dickins@tiscali.co.uk> wrote:
> 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@tiscali.co.uk> 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? > Ah, sorry this is my mistake. I don't understand "nr_swapfiles never decreases and swap_info[] will be never invalidated."
> Or are you asking for a further comment here on why that's so? No.
> 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. >
Hmm, maybe.
Thanks, -Kame
> Hugh >
| |