lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110820081010.GI20085@htj.dyndns.org>
Date:	Sat, 20 Aug 2011 10:10:10 +0200
From:	Tejun Heo <tj@...nel.org>
To:	"Rafael J. Wysocki" <rjw@...k.pl>
Cc:	paul@...lmenage.org, linux-kernel@...r.kernel.org, arnd@...db.de,
	oleg@...hat.com,
	Linux PM mailing list <linux-pm@...ts.linux-foundation.org>
Subject: Re: [PATCH 07/16] freezer: don't distinguish nosig tasks on thaw

Hello, Rafael.

On Fri, Aug 19, 2011 at 11:14:52PM +0200, Rafael J. Wysocki wrote:
> On Friday, August 19, 2011, Tejun Heo wrote:
> > There's no point in thawing nosig tasks before others.  There's no
> > ordering requirement between the two groups on thaw, which the staged
> > thawing can't guarantee anyway.  Simplify thaw_processes() by removing
> > the distinction and collapsing thaw_tasks() into thaw_processes().
> > This will help further updates to freezer.
> 
> I'm not sure if I like this patch.
> 
> Right now there are no ordering requirements between the two groups
> of processes, but if we decide to freeze filesystems on suspend,
> we'll need to thaw them between nosig and sig I suppose.

Hmmm... I'm not really following.  How does staged wake up affect
thawing filesystems?  Staged freezing makes sense as a crude way to
define dependency during freezing - ie. userland and freezable tasks
can't have dependency in their own groups but the former can depend on
the latter on the way to refrigerator.

However, during thawing, it doesn't make any difference regardless of
what was frozen when and how they depend on each other.  They might as
well have cyclic dependency and waking them in any order wouldn't make
any difference.  The task which dependes on another task to do
something would simply block until that task wakes up and resolves the
dependency; moreover, performing staged wakeups doesn't really
guarantee execution order.  It's different from staged freezing in
that way - staged thawing doesn't have the synchronization phase
between the two stages.  Tasks which were woken up earlier can easily
start executing after tasks which were woken up later.

The only guaranteed effect of staged wakeups is that tasks in the
earlier group would have had its ->state set to TASK_RUNNING before
the tasks of the second group.  This again is a moot point because

* __refrigerator() restores task->state afterwards overwriting the
  TASK_RUNNING once the task starts executing (in unknown order).
  This is fundamentally broken and should be fixed so that task is
  left in TASK_RUNNING when leaving the refrigerator.

* However, if you leave it at TASK_RUNNING, it doesn't make any
  difference w.r.t. synchronization.  The only way task->state can
  participate in synchronization is through wake_up() - ie. through
  other tasks setting its state to TASK_RUNNING, so if the
  refrigerator leaves tast state at TASK_RUNNING on return, it can't
  hinder any synchronization.

So, AFAICS, no matter which way it's looked at, it just doesn't make
any difference.

Thanks.

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ