Re: Getting the new RxRPC patches upstream

2007-04-25 Thread David Howells
Oleg Nesterov [EMAIL PROTECTED] wrote:

 Yes sure. Note that this is documented:
 
   /*
* Kill off a pending schedule_delayed_work().  Note that the work 
 callback
* function may still be running on return from cancel_delayed_work().  
 Run
* flush_workqueue() or cancel_work_sync() to wait on it.
*/

No, it isn't documented.  It says that the *work* callback may be running, but
does not mention the timer callback.  However, just looking at the
cancellation function source made it clear that this would wait for the timer
handler to return first.


However, is it worth just making cancel_delayed_work() a void function and not
returning anything?  I'm not sure the return value is very useful.

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-25 Thread Oleg Nesterov
On 04/25, David Howells wrote:

 Oleg Nesterov [EMAIL PROTECTED] wrote:
 
  Yes sure. Note that this is documented:
  
  /*
   * Kill off a pending schedule_delayed_work().  Note that the work 
  callback
   * function may still be running on return from cancel_delayed_work().  
  Run
   * flush_workqueue() or cancel_work_sync() to wait on it.
   */
 
 No, it isn't documented.  It says that the *work* callback may be running, but
 does not mention the timer callback.  However, just looking at the
 cancellation function source made it clear that this would wait for the timer
 handler to return first.

Ah yes, it says nothing about what the returned value means...

 However, is it worth just making cancel_delayed_work() a void function and not
 returning anything?  I'm not sure the return value is very useful.

cancel_rearming_delayed_work() needs this, tty_io.c, probably somebody else.

Oleg.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-25 Thread David Howells
Oleg Nesterov [EMAIL PROTECTED] wrote:

 Ah yes, it says nothing about what the returned value means...

Yeah...  If you could amend that as part of your patch, that'd be great.

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-25 Thread David Howells

David Miller [EMAIL PROTECTED] wrote:

 Is it possible for your changes to be purely networking
 and not need those changes outside of the networking?

See my latest patchset release.  I've reduced the dependencies on
non-networking changes to:

 (1) Oleg Nesterov's patch to change cancel_delayed_work() to use del_timer()
 rather than del_timer_sync() [patch 02/16].

 This patch can be discarded without compilation failure at the expense of
 making AFS slightly less efficient. It also makes AF_RXRPC slightly less
 efficient, but only in the rmmod path.

 (2) A symbol export in the keyring stuff plus a proliferation of the types
 available in the struct key::type_data union [patch 03/16].  This does
 not conflict with any other patches that I know about.

 (3) A symbol export in the timer stuff [patch 04/16].

Everything else that remains after the reduction is confined to the AF_RXRPC
or AFS code, save for a couple of networking patches in my patchset that you
already have and I just need to make the thing compile.

I'm not sure that I can make the AF_RXRPC patches totally independent of the
AFS patches as the two sets need to interleave since the last AF_RXRPC patch
deletes the old RxRPC code - which the old AFS code depends on.

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-24 Thread David Howells
Oleg Nesterov [EMAIL PROTECTED] wrote:

   We only care when del_timer() returns true. In that case, if the timer
   function still runs (possible for single-threaded wqs), it has already
   passed __queue_work().
  
  Why do you assume that?

Sorry, I should have been more clear.  I meant the assumption that we only
care about a true return from del_timer().

 If del_timer() returns true, the timer was pending. This means it was
 started by work-func() (note that __run_timers() clears timer_pending()
 before calling timer-function). This in turn means that
 delayed_work_timer_fn() has already called __queue_work(dwork), otherwise
 work-func() has no chance to run.

But if del_timer() returns 0, then there may be a problem.  We can't tell the
difference between the following two cases:

 (1) The timer hadn't been started.

 (2) The timer had been started, has expired and is no longer pending, but
 another CPU is running its handler routine.

try_to_del_timer_sync() _does_, however, distinguish between these cases: the
first is the 0 return, the second is the -1 return, and the case where it
dequeued the timer is the 1 return.

BTW, can a timer handler be preempted?  I assume not...  But it can be delayed
by interrupt processing.

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-24 Thread Oleg Nesterov
On 04/24, David Howells wrote:

 Oleg Nesterov [EMAIL PROTECTED] wrote:
 
We only care when del_timer() returns true. In that case, if the timer
function still runs (possible for single-threaded wqs), it has already
passed __queue_work().
   
   Why do you assume that?
 
 Sorry, I should have been more clear.  I meant the assumption that we only
 care about a true return from del_timer().
 
  If del_timer() returns true, the timer was pending. This means it was
  started by work-func() (note that __run_timers() clears timer_pending()
  before calling timer-function). This in turn means that
  delayed_work_timer_fn() has already called __queue_work(dwork), otherwise
  work-func() has no chance to run.
 
 But if del_timer() returns 0, then there may be a problem.  We can't tell the
 difference between the following two cases:
 
  (1) The timer hadn't been started.
 
  (2) The timer had been started, has expired and is no longer pending, but
  another CPU is running its handler routine.
 
 try_to_del_timer_sync() _does_, however, distinguish between these cases: the
 first is the 0 return, the second is the -1 return, and the case where it
 dequeued the timer is the 1 return.

Of course, del_timer() and del_timer_sync() are different. What I meant the
latter buys nothing for cancel_delayed_work() (which in fact could be named
try_to_cancel_delayed_work()).

Let's look at (2). cancel_delayed_work() (on top of del_timer()) returns 0,
and this is correct, we failed to cancel the timer, and we don't know whether
work-func() finished, or not.

The current code uses del_timer_sync(). It will also return 0. However, it will
spin waiting for timer-function() to complete. So we are just wasting CPU.

I guess I misunderstood you. Perhaps, you propose a new helper which use
try_to_del_timer_sync(), yes? Unless I missed something, this doesn't help.
Because the return value == -1 should be treated as 0. We failed to stop
the timer, and we can't free dwork.

IOW, currently we should do:

if (!cancel_delayed_work(dwork))
cancel_work_sync(dwork));

The same if we use del_timer(). If we use try_to_del_timer_sync(),

if (cancel_delayed_work(dwork) = 0)
cancel_work_sync(dwork));

(of course, dwork shouldn't re-arm itself).

Could you clarify if I misunderstood you again?

 BTW, can a timer handler be preempted?  I assume not...  But it can be delayed
 by interrupt processing.

No, it can't be preempted, it runs in softirq context.

Oleg.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-24 Thread Oleg Nesterov
On 04/24, David Howells wrote:

 Oleg Nesterov [EMAIL PROTECTED] wrote:
 
  The current code uses del_timer_sync(). It will also return 0. However, it
  will spin waiting for timer-function() to complete. So we are just wasting
  CPU.
 
 That's my objection to using cancel_delayed_work() as it stands, although in
 most cases it's a relatively minor waste of time.  However, if the timer
 expiry routine gets interrupted then it may not be so minor...  So, yes, I'm
 in full agreement with you there.

Great. I'll send the s/del_timer_sync/del_timer/ patch.

  I guess I misunderstood you. Perhaps, you propose a new helper which use
  try_to_del_timer_sync(), yes? Unless I missed something, this doesn't help.
  Because the return value == -1 should be treated as 0. We failed to stop
  the timer, and we can't free dwork.
 
 Consider how I'm using try_to_cancel_delayed_work(): I use this when I want to
 queue a delayed work item with a particular timeout (usually for immediate
 processing), but the work item may already be pending.
 
 If try_to_cancel_delayed_work() returns 0 or 1 (not pending or pending but
 dequeued) then I can go ahead and just schedule the work item (I'll be holding
 a lock to prevent anyone else from interfering).
 
 However, if try_to_cancel_delayed_work() returns -1 then there's no usually no
 point attempting to schedule the work item because I know the timer expiry
 handler is doing that or going to do that.
 
 
 The code looks like this in pretty much all cases:
 
   if (try_to_cancel_delayed_work(afs_server_reaper) = 0)
   schedule_delayed_work(afs_server_reaper, 0);

Aha, now I see what you mean. However. Why the code above is better then

cancel_delayed_work(afs_server_reaper);
schedule_delayed_work(afs_server_reaper, 0);

? (I assume we already changed cancel_delayed_work() to use del_timer).

If delayed_work_timer_fn() is not running - both variants (let's denote them
as 1 and 2) do the same.

Now suppose that delayed_work_timer_fn() is running.

1: lock_timer_base(), return -1, skip schedule_delayed_work().

2: check timer_pending(), return 0, call schedule_delayed_work(),
   return immediately because test_and_set_bit(WORK_STRUCT_PENDING)
   fails.

So I still don't think try_to_del_timer_sync() can help in this particular
case.

To some extent, try_to_cancel_delayed_work is

int try_to_cancel_delayed_work(dwork)
{
ret = cancel_delayed_work(dwork);
if (!ret  work_pending(dwork-work))
ret = -1;
return ret;
}

iow, work_pending() looks like a more precise indication that work-func()
is going to run soon.

Oleg.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-24 Thread David Howells
Oleg Nesterov [EMAIL PROTECTED] wrote:

   The current code uses del_timer_sync(). It will also return 0. However,
   it will spin waiting for timer-function() to complete. So we are just
   wasting CPU.
  
  That's my objection to using cancel_delayed_work() as it stands, although in
  most cases it's a relatively minor waste of time.  However, if the timer
  expiry routine gets interrupted then it may not be so minor...  So, yes, I'm
  in full agreement with you there.
 
 Great. I'll send the s/del_timer_sync/del_timer/ patch.

I didn't say I necessarily agreed that this was a good idea.  I just meant that
I agree that it will waste CPU.  You must still audit all uses of
cancel_delayed_work().

 Aha, now I see what you mean. However. Why the code above is better then
 
   cancel_delayed_work(afs_server_reaper);
   schedule_delayed_work(afs_server_reaper, 0);
 
 ? (I assume we already changed cancel_delayed_work() to use del_timer).

Because calling schedule_delayed_work() is a waste of CPU if the timer expiry
handler is currently running at this time as *that* is going to also schedule
the delayed work item.

 If delayed_work_timer_fn() is not running - both variants (let's denote them
 as 1 and 2) do the same.

Yes, but that's not the point.

 Now suppose that delayed_work_timer_fn() is running.
 
   1: lock_timer_base(), return -1, skip schedule_delayed_work().

   2: check timer_pending(), return 0, call schedule_delayed_work(),
  return immediately because test_and_set_bit(WORK_STRUCT_PENDING)
  fails.

I don't see what you're illustrating here.  Are these meant to be two steps in
a single process?  Or are they two alternate steps?

 So I still don't think try_to_del_timer_sync() can help in this particular
 case.

It permits us to avoid the test_and_set_bit() under some circumstances.

 To some extent, try_to_cancel_delayed_work is
 
   int try_to_cancel_delayed_work(dwork)
   {
   ret = cancel_delayed_work(dwork);
   if (!ret  work_pending(dwork-work))
   ret = -1;
   return ret;
   }
 
 iow, work_pending() looks like a more precise indication that work-func()
 is going to run soon.

Ah, but the timer routine may try to set the work item pending flag *after* the
work_pending() check you have here.  Furthermore, it would be better to avoid
the work_pending() check entirely because that check involves interacting with
atomic ops done on other CPUs.  try_to_del_timer_sync() returning -1 tells us
without a shadow of a doubt that the work item is either scheduled now or will
be scheduled very shortly, thus allowing us to avoid having to do it ourself.

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-24 Thread Oleg Nesterov
On 04/24, David Howells wrote:

 Oleg Nesterov [EMAIL PROTECTED] wrote:
 
  Great. I'll send the s/del_timer_sync/del_timer/ patch.
 
 I didn't say I necessarily agreed that this was a good idea.  I just meant 
 that
 I agree that it will waste CPU.  You must still audit all uses of
 cancel_delayed_work().

Sure, I'll grep for cancel_delayed_work(). But unless I missed something,
this change should be completely transparent for all users. Otherwise, it
is buggy.

  Aha, now I see what you mean. However. Why the code above is better then
  
  cancel_delayed_work(afs_server_reaper);
  schedule_delayed_work(afs_server_reaper, 0);
  
  ? (I assume we already changed cancel_delayed_work() to use del_timer).
 
 Because calling schedule_delayed_work() is a waste of CPU if the timer expiry
 handler is currently running at this time as *that* is going to also schedule
 the delayed work item.

Yes. But otoh, try_to_del_timer_sync() is a waste of CPU compared to 
del_timer(),
when the timer is not pending.

  1: lock_timer_base(), return -1, skip schedule_delayed_work().
 
  2: check timer_pending(), return 0, call schedule_delayed_work(),
 return immediately because test_and_set_bit(WORK_STRUCT_PENDING)
 fails.
 
 I don't see what you're illustrating here.  Are these meant to be two steps in
 a single process?  Or are they two alternate steps?

two alternate steps.

1 means
if (try_to_cancel_delayed_work())
schedule_delayed_work();

2 means
cancel_delayed_work();
schedule_delayed_work();

  So I still don't think try_to_del_timer_sync() can help in this particular
  case.
 
 It permits us to avoid the test_and_set_bit() under some circumstances.

Yes. But lock_timer_base() is more costly.

  To some extent, try_to_cancel_delayed_work is
  
  int try_to_cancel_delayed_work(dwork)
  {
  ret = cancel_delayed_work(dwork);
  if (!ret  work_pending(dwork-work))
  ret = -1;
  return ret;
  }
  
  iow, work_pending() looks like a more precise indication that work-func()
  is going to run soon.
 
 Ah, but the timer routine may try to set the work item pending flag *after* 
 the
 work_pending() check you have here.

No, delayed_work_timer_fn() doesn't set the _PENDING flag.

  Furthermore, it would be better to avoid
 the work_pending() check entirely because that check involves interacting with
 atomic ops done on other CPUs.

Sure, the implementation of try_to_cancel_delayed_work() above is just for
illustration. I don't think we need try_to_cancel_delayed_work() at all.

try_to_del_timer_sync() returning -1 tells us
 without a shadow of a doubt that the work item is either scheduled now or will
 be scheduled very shortly, thus allowing us to avoid having to do it ourself.

First, this is very unlikely event, delayed_work_timer_fn() is very fast unless
interrupted.

_PENDING flag won't be cleared until this work is executed by run_workqueue().
In generak, work_pending() after del_timer() is imho better way to avoid the
unneeded schedule_delayed_work().

But again, I can't undertand the win for that particular case.

Oleg.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-24 Thread David Howells
Oleg Nesterov [EMAIL PROTECTED] wrote:

 Sure, I'll grep for cancel_delayed_work(). But unless I missed something,
 this change should be completely transparent for all users. Otherwise, it
 is buggy.

I guess you will have to make sure that cancel_delayed_work() is always
followed by a flush of the workqueue, otherwise you might get this situation:

CPU 0   CPU 1
=== ===
timer expires
cancel_delayed_work(x) == 0 --delayed_work_timer_fn(x)
kfree(x);   --do_IRQ()
y = kmalloc(); // reuses x
--do_IRQ()
__queue_work(x)
--- OOPS ---

That's my main concern.  If you are certain that can't happen, then fair
enough.

Note that although you can call cancel_delayed_work() from within a work item
handler, you can't then follow it up with a flush as it's very likely to
deadlock.

  Because calling schedule_delayed_work() is a waste of CPU if the timer
  expiry handler is currently running at this time as *that* is going to
  also schedule the delayed work item.
 
 Yes. But otoh, try_to_del_timer_sync() is a waste of CPU compared to
 del_timer(), when the timer is not pending.

I suppose that's true.  As previously stated, my main objection to del_timer()
is the fact that it doesn't tell you if the timer expiry function is still
running.

Can you show me a patch illustrating exactly how you want to change
cancel_delayed_work()?  I can't remember whether you've done so already, but
if you have, I can't find it.  Is it basically this?:

 static inline int cancel_delayed_work(struct delayed_work *work)
 {
int ret;

-   ret = del_timer_sync(work-timer);
+   ret = del_timer(work-timer);
if (ret)
work_release(work-work);
return ret;
 }

I was thinking this situation might be a problem:

CPU 0   CPU 1
=== ===
timer expires
cancel_delayed_work(x) == 0 --delayed_work_timer_fn(x)
schedule_delayed_work(x,0)  --do_IRQ()
keventd scheduled
x-work()
--do_IRQ()
__queue_work(x)

But it won't, will it?

  Ah, but the timer routine may try to set the work item pending flag
  *after* the work_pending() check you have here.
 
 No, delayed_work_timer_fn() doesn't set the _PENDING flag.

Good point.  I don't think that's a problem because cancel_delayed_work()
won't clear the pending flag if it didn't remove a timer.

 First, this is very unlikely event, delayed_work_timer_fn() is very fast
 unless interrupted.

Yeah, I guess so.


Okay, you've convinced me, I think - provided you consider the case I
outlinded at the top of this email.

If you give me a patch to alter cancel_delayed_work(), I'll substitute it for
mine and use that that instead.  Dave Miller will just have to live with that
patch being there:-)

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-24 Thread Oleg Nesterov
On 04/24, David Howells wrote:

 Oleg Nesterov [EMAIL PROTECTED] wrote:
 
  Sure, I'll grep for cancel_delayed_work(). But unless I missed something,
  this change should be completely transparent for all users. Otherwise, it
  is buggy.
 
 I guess you will have to make sure that cancel_delayed_work() is always
 followed by a flush of the workqueue, otherwise you might get this situation:
 
   CPU 0   CPU 1
   === ===
   timer expires
   cancel_delayed_work(x) == 0 --delayed_work_timer_fn(x)
   kfree(x);   --do_IRQ()
   y = kmalloc(); // reuses x
   --do_IRQ()
   __queue_work(x)
   --- OOPS ---
 
 That's my main concern.  If you are certain that can't happen, then fair
 enough.

Yes sure. Note that this is documented:

/*
 * Kill off a pending schedule_delayed_work().  Note that the work 
callback
 * function may still be running on return from cancel_delayed_work().  
Run
 * flush_workqueue() or cancel_work_sync() to wait on it.
 */

This comment is not very precise though. If the work doesn't re-arm itself,
we need cancel_work_sync() only if cancel_delayed_work() returns 0.

So there is no difference with the proposed change. Except, return value == 0
means:

currently (del_timer_sync): callback may still be running or scheduled

with del_timer: may still be running, or scheduled, or will be scheduled
right now.

However, this is the same from the caller POV.

 Can you show me a patch illustrating exactly how you want to change
 cancel_delayed_work()?  I can't remember whether you've done so already, but
 if you have, I can't find it.  Is it basically this?:
 
  static inline int cancel_delayed_work(struct delayed_work *work)
  {
   int ret;
 
 - ret = del_timer_sync(work-timer);
 + ret = del_timer(work-timer);
   if (ret)
   work_release(work-work);
   return ret;
  }

Yes, exactly. The patch is trivial, but I need some time to write the
understandable changelog...

 I was thinking this situation might be a problem:
 
   CPU 0   CPU 1
   === ===
   timer expires
   cancel_delayed_work(x) == 0 --delayed_work_timer_fn(x)
   schedule_delayed_work(x,0)  --do_IRQ()
   keventd scheduled
   x-work()
   --do_IRQ()
   __queue_work(x)
 
 But it won't, will it?

Yes, I think this should be OK. schedule_delayed_work() will notice
_PENDING and abort, so the last x-work() doesn't happen.

What can happen is

timer expires
cancel_delayed_work(x) == 0
--delayed_work_timer_fn(x)
__queue_work(x)
keventd scheduled
x-work()
schedule_delayed_work(x,0)
the work is scheduled again

, so we can have an unneeded schedule, but this is very unlikely.

Oleg.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-23 Thread David Howells

 We only care when del_timer() returns true. In that case, if the timer
 function still runs (possible for single-threaded wqs), it has already
 passed __queue_work().

Why do you assume that?

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-23 Thread Oleg Nesterov
On 04/23, David Howells wrote:
 
  We only care when del_timer() returns true. In that case, if the timer
  function still runs (possible for single-threaded wqs), it has already
  passed __queue_work().
 
 Why do you assume that?

If del_timer() returns true, the timer was pending. This means it was started
by work-func() (note that __run_timers() clears timer_pending() before calling
timer-function). This in turn means that delayed_work_timer_fn() has already
called __queue_work(dwork), otherwise work-func() has no chance to run.

When del_timer() returns true and delayed_work_timer_fn() doesn't run we are
safe, this doesn't differ from del_timer_sync().

Oleg.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-20 Thread David Howells
David Miller [EMAIL PROTECTED] wrote:

 I applied already the patches I thought were appropriate,
 you had some crypto layer changes that you need to work
 out with Herbert Xu before the rest can be applied.

Should the rest of it go via Andrew's tree then?

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-20 Thread David Miller
From: David Howells [EMAIL PROTECTED]
Date: Fri, 20 Apr 2007 09:02:07 +0100

 David Miller [EMAIL PROTECTED] wrote:
 
  I applied already the patches I thought were appropriate,
  you had some crypto layer changes that you need to work
  out with Herbert Xu before the rest can be applied.
 
 Should the rest of it go via Andrew's tree then?

Now that Herbert cleared up the crypto layer issues
the only problem left is that there are generic changes
in there which are not strictly networking but which
your subsequent networking changes depend upon.

This is a mess, and makes merging your work into the
net-2.6.22 tree more difficult.

Is it possible for your changes to be purely networking
and not need those changes outside of the networking?

I guess one of them was just a symbol export which I
could add to the net-2.6.22 tree, but weren't there some
more involved non-networking bits in there?
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-20 Thread David Howells
David Miller [EMAIL PROTECTED] wrote:

 Now that Herbert cleared up the crypto layer issues
 the only problem left is that there are generic changes
 in there which are not strictly networking but which
 your subsequent networking changes depend upon.

 This is a mess, and makes merging your work into the
 net-2.6.22 tree more difficult.

There are only two non-net patches that AF_RXRPC depends on:

 (1) The key facility changes.  That's all my code anyway, and shouldn't be a
 problem to merge unless someone else has put some changes in there that I
 don't know about.

 (2) try_to_cancel_delayed_work().  I suppose I could use
 cancel_delayed_work() instead, but that's less efficient as it waits for
 the timer completion function to finish.

And one that AFS depends on:

 (3) Cache the key in nameidata.  I still don't have Al's agreement on this,
 but it's purely caching, so I could drop that patch for the moment and
 excise the stuff that uses it from my AFS patches if that would help.

Do you class the AFS patches as networking changes?

Do you want me to consolidate my patches to make things simpler for you?

Do you want me to rebase my patches onto net-2.6.22?

I have the following patches, in order, available now, though I haven't yet
released the last few (they can all be downloaded from my RH people pages):

move-skb-generic.diff  (you've got this)
timers.diff
keys.diff
af_rxrpc.diff
afs-cleanup.diff
af_rxrpc-kernel.diff
af_rxrpc-afs.diff
af_rxrpc-delete-old.diff
af_rxrpc-own-workqueues.diff
af_rxrpc-fixes.diff
afs-callback-wq.diff
afs-vlocation.diff
afs-multimount.diff
afs-rxrpc-key.diff
afs-nameidata-key.diff
afs-security.diff
afs-doc.diff
netlink-support-MSG_TRUNC.diff  (you've got this)
afs-get-capabilities.diff
afs-initcallbackstate3.diff
afs-dir-write-support.diff

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-20 Thread Andrew Morton
On Fri, 20 Apr 2007 11:41:46 +0100
David Howells [EMAIL PROTECTED] wrote:

 There are only two non-net patches that AF_RXRPC depends on:
 
  (1) The key facility changes.  That's all my code anyway, and shouldn't be a
  problem to merge unless someone else has put some changes in there that I
  don't know about.
 
  (2) try_to_cancel_delayed_work().  I suppose I could use
  cancel_delayed_work() instead, but that's less efficient as it waits for
  the timer completion function to finish.

There are significant workqueue changes in -mm and I plan to send them
in for 2.6.22.  I doubt if there's anything in there which directly
affects cancel_delayed_work(), but making changes of this nature against
2.6.21 might lead to grief.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-20 Thread Oleg Nesterov
On 04/20, Andrew Morton wrote:

 On Fri, 20 Apr 2007 11:41:46 +0100
 David Howells [EMAIL PROTECTED] wrote:
 
  There are only two non-net patches that AF_RXRPC depends on:
  
   (1) The key facility changes.  That's all my code anyway, and shouldn't be 
  a
   problem to merge unless someone else has put some changes in there 
  that I
   don't know about.
  
   (2) try_to_cancel_delayed_work().  I suppose I could use
   cancel_delayed_work() instead, but that's less efficient as it waits 
  for
   the timer completion function to finish.
 
 There are significant workqueue changes in -mm and I plan to send them
 in for 2.6.22.  I doubt if there's anything in there which directly
 affects cancel_delayed_work(), but making changes of this nature against
 2.6.21 might lead to grief.

I think it is better to use cancel_delayed_work(), but change it to use
del_timer(). I belive cancel_delayed_work() doesn't need del_timer_sync().

We only care when del_timer() returns true. In that case, if the timer
function still runs (possible for single-threaded wqs), it has already
passed __queue_work().

Oleg.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Getting the new RxRPC patches upstream

2007-04-19 Thread David Howells
Eric W. Biederman [EMAIL PROTECTED] wrote:

 What is the ETA on your patches?

That depends on Dave Miller now, I think.  I'm assuming they need to go
through the network GIT tree to get to Linus.  Certainly Andrew Morton seems
to think so.

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-19 Thread Eric W. Biederman
David Howells [EMAIL PROTECTED] writes:

 Eric W. Biederman [EMAIL PROTECTED] wrote:

 What is the ETA on your patches?

 That depends on Dave Miller now, I think.  I'm assuming they need to go
 through the network GIT tree to get to Linus.  Certainly Andrew Morton seems
 to think so.

Ok.  I don't see any patches in -mm so I was assuming these patches have
not been queued up anywhere.

As long as these things happen in a reasonably timely manner so I can
remove the export of kernel_thread and kill daemonize I really don't care.

If you have written them they are quite likely better then my minimal
patches which were quite restrained because of my limited ability to
test these things.

Eric
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-19 Thread David Howells
Eric W. Biederman [EMAIL PROTECTED] wrote:

 Ok.  I don't see any patches in -mm so I was assuming these patches have
 not been queued up anywhere.

They haven't been quite yet.  Is it your intention to kill these features in
2.6.22?

David
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-19 Thread Eric W. Biederman
David Howells [EMAIL PROTECTED] writes:

 Eric W. Biederman [EMAIL PROTECTED] wrote:

 Ok.  I don't see any patches in -mm so I was assuming these patches have
 not been queued up anywhere.

 They haven't been quite yet.  Is it your intention to kill these features in
 2.6.22?

That is my goal, and I have patches that should do it.  We will see what 
happens.

Eric
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-19 Thread David Miller
From: David Howells [EMAIL PROTECTED]
Date: Thu, 19 Apr 2007 15:18:23 +0100

 Eric W. Biederman [EMAIL PROTECTED] wrote:
 
  What is the ETA on your patches?
 
 That depends on Dave Miller now, I think.  I'm assuming they need to go
 through the network GIT tree to get to Linus.  Certainly Andrew Morton seems
 to think so.

I applied already the patches I thought were appropriate,
you had some crypto layer changes that you need to work
out with Herbert Xu before the rest can be applied.

Let me know what the status is of that stuff.

Either way, I don't think it should block Eric's work here.
If his stuff is more ready first, it should go in and then
you have a little bit of patch merging to do that's all.

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Getting the new RxRPC patches upstream

2007-04-19 Thread Herbert Xu
David Miller [EMAIL PROTECTED] wrote:
 
 I applied already the patches I thought were appropriate,
 you had some crypto layer changes that you need to work
 out with Herbert Xu before the rest can be applied.

He has already fixed it by using the scatterlist interface for now.
So the last set of patches he posted is ready for merging into
net-2.6.22.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmVHI~} [EMAIL PROTECTED]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html