From: Chris Wright <chrisw@osdl.org>
To: Erik Jacobson <erikj@subway.americas.sgi.com>
Cc: Chris Wright <chrisw@osdl.org>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Process Aggregates (PAGG) support for the 2.6 kernel
Date: Tue, 27 Apr 2004 15:28:30 -0700 [thread overview]
Message-ID: <20040427152830.C21045@build.pdx.osdl.net> (raw)
In-Reply-To: <Pine.SGI.4.53.0404271546410.632984@subway.americas.sgi.com>; from erikj@subway.americas.sgi.com on Tue, Apr 27, 2004 at 03:51:56PM -0500
* Erik Jacobson (erikj@subway.americas.sgi.com) wrote:
> I didn't choose to change the macros at this time - however, I'm not against
> changing them either - I just haven't done it yet.
OK. I still think it's a good idea for readability and type safety.
> On Mon, 26 Apr 2004, Chris Wright wrote:
> > This looks like it's just the infrastructure, i.e. nothing is using it.
> > It seems like PAGG could be done on top of CKRM (albeit, with more
> > code). But if the goal is to do some basic accounting, scheduling, etc.
> > on a resource group, wouldn't CKRM be more generic?
>
> Right. A couple examples of things we have that use it are CSA
> (oss.sgi.com/csa) and job. job provides inescapable job containers that
> are also used by csa.
>
> But what I presented here was just the infrastructure as you said.
>
> Patches for inescapable job containers ('job') are available on the pagg web
> site as well (oss.sgi.com/pagg).
OK, thanks, I'll take a look.
> > > + char *name; /* Name Key - restricted to 32 characters */
> >
> > why the restriction?
>
> I'm open to suggestions. Right now, this is usually set to something like
> "job" or similar. The max length is enforced by the module that makes use
> of pagg. For example, with the job package:
Right, if it's a pointer, and you guarantee it's NULL terminated, then I
don't see the point. Otherwise, strncmp() or something?
> I fixed the tasklist issue you were concerned about. Again, I didn't address
> the macro issue at this moment.
Alright, see below.
> > This looks like it leaks the just alloc'd to_pagg.
>
> I agree that it looks suspect but I think it's OK.
>
> You're talking about the case where the pagg was allocated, but couldn't
> attach I assume.
>
> The alloc_pagg function adds that allocated pagg to the pagg list. In
> error_return, detach_pagg_list is called so this pagg should be freed then.
Yes, I see it now, thanks. BTW, I see a common idiom here of:
if (!list_empty) {
list_for_each() {
}
}
Seems like mostly an empty optimization, since list_for_each essentially
does that list_empty() check, no?
> +unregister_pagg_hook(struct pagg_hook *pagg_hook_old)
> +{
<snip>
> + down_write(&pagg_hook_list_sem);
<snip>
> + read_lock(&tasklist_lock);
> + for_each_process(task) {
> + struct pagg *pagg = NULL;
> +
> + get_task_struct(task); /* So the task doesn't vanish on us */
> + read_unlock(&tasklist_lock);
dropped tasklist_lock, task could exit, and unlink and potentially drop the
only other ref.
> + read_lock_pagg_list(task);
> + pagg = get_pagg(task, pagg_hook_old->name);
> + put_task_struct(task);
and this could have totally freed the memory to task.
still looks unsafe to me.
> + /*
> + * We won't be accessing pagg's memory, just need
> + * to see if one existed - so we can release the task
> + * lock now.
> + */
> + read_unlock_pagg_list(task);
> + if (pagg) {
> + up_write(&pagg_hook_list_sem);
> + return -EBUSY;
> + }
> +
> + /* lock the task list again so we get a valid task in the loop */
> + read_lock(&tasklist_lock);
> + }
> + read_unlock(&tasklist_lock);
> + list_del_init(&pagg_hook->entry);
> + up_write(&pagg_hook_list_sem);
thanks,
-chris
--
Linux Security Modules http://lsm.immunix.org http://lsm.bkbits.net
next prev parent reply other threads:[~2004-04-27 22:28 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-26 22:04 [PATCH] Process Aggregates (PAGG) support for the 2.6 kernel Erik Jacobson
2004-04-26 23:39 ` Chris Wright
2004-04-27 0:36 ` Jesse Barnes
2004-04-27 0:41 ` Chris Wright
2004-04-27 21:00 ` Erik Jacobson
2004-04-27 21:05 ` Chris Wright
2004-04-29 21:10 ` Rik van Riel
2004-04-27 20:51 ` Erik Jacobson
2004-04-27 22:28 ` Chris Wright [this message]
2004-04-28 14:55 ` Christoph Hellwig
2004-04-29 19:20 ` Paul Jackson
2004-04-29 19:27 ` Chris Wright
2004-04-29 19:29 ` Christoph Hellwig
2004-04-29 19:34 ` Paul Jackson
2004-04-29 19:53 ` Erik Jacobson
2004-04-29 21:20 ` Rik van Riel
2004-04-30 6:17 ` Christoph Hellwig
2004-04-30 11:08 ` Guillaume Thouvenin
2004-04-30 18:00 ` Shailabh
2004-04-30 18:28 ` Rik van Riel
2004-04-30 12:54 ` Rik van Riel
2004-04-30 13:06 ` Christoph Hellwig
2004-04-30 13:28 ` Chris Mason
2004-04-30 16:50 ` Shailabh
2004-04-30 15:22 ` Rik van Riel
2004-04-30 16:45 ` Christoph Hellwig
2004-04-30 17:53 ` Shailabh
2004-04-30 18:15 ` Chris Wright
2004-04-30 15:59 ` Chris Wright
2004-04-30 8:54 ` Guillaume Thouvenin
2004-05-20 21:16 ` Erik Jacobson
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=20040427152830.C21045@build.pdx.osdl.net \
--to=chrisw@osdl.org \
--cc=erikj@subway.americas.sgi.com \
--cc=linux-kernel@vger.kernel.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.