lkml.org 
[lkml]   [2006]   [May]   [15]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
FromKyle Moffett <>
SubjectRe: Which process context does /sbin/hotplug run in?
DateMon, 15 May 2006 00:17:44 -0400
On May 14, 2006, at 20:08, Rob Landley wrote:
> On Saturday 13 May 2006 3:24 am, Kyle Moffett wrote:
>> /
>>    /var
>>      /var/sub
>>      /var/sub2
>>        /var/sub2/sub
>>        /var/sub2/sub2
>>
>> The recursion ends there.  Basically with the first bind mount you  
>> attach the same instance of tmpfs to /tmp and /var, then you move  
>> the tmpfs from /tmp to the "/sub2" directory in the "/var" tmpfs  
>> _mountpoint_.  It's kind of confusing behavior; but the directory  
>> tree and the mount tree are basically kind of separate entities in  
>> a sense.
>
> I can CD into them endlessly, and both "ls -lR" and "find ." report  
> cycles in the tree, which surprised me that they had a specific  
> error message for that, actually.  Good enough for me. :)

Odd, I'm unable to replicate that behavior here.  If I run "ls /var/ 
sub2/sub2" I don't get any entries.  Find and ls -lR have error  
messages of that because it can occasionally be triggered with  
symlinks and such.

> And I'm not _complaining_ about it.  Just fiddling around with fun  
> stuff.  If I get really bored I'll figure a way to split the tree  
> so there are two completely unconnected mount trees in different  
> processes.  (Get a private  namespace that's chrooted into  
> something that somebody else does a umount -l on from their space.   
> Or without using umount -l, just have two processes chroot into  
> other mount points which should theoretically garbage collect the  
> old root if no processes still references it, which presumably  
> means one of the processes is init...)

Well, actually, it isn't that hard.  Just run something like this:

#! /bin/sh
mkdir /a
mkdir /b
mount -t tmpfs tmpfs /a
mount -t tmpfs tmpfs /b
mkdir /a/old
mkdir /b/old
tool_to_fork_in_new_namespace sh -c "pivot_root /a /a/old && umount - 
l /a/old && read"
pivot_root /b /b/old && umount -l /b/old && read

All you need to write is tool_to_fork_in_new_namespace which does  
clone(CLONE_NEWNS) followed by exec().

Cheers,
Kyle Moffett

--
Simple things should be simple and complex things should be possible
   -- Alan Kay



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

\
 
 \ /
  Last update: 2006-05-15 06:20    [from the cache]
©2003-2008