>> what about a kthread that would be spawned when a task is cloned in an 
>> unshared pid namespace ? This is an extra cost in term of tasks.
> 
> If you use kernel_thread this can happen. (Die kernel_thread).
> If you use the kthread interface keventd will be the parent process and
> we won't have problems.  

so is it something acceptable for mainline ? I think openvz has such
a thread doing the reaping.

> Thus most users of kernel_thread need to be fixed to use the kthread 
> interface.
> 
> Thanks for the reminder of this one, I had forgotten that bit of
> reasoning for updating kernel_thread users.

there are not much left. see below a quick and dirty survey on 
2.6.21-rc4-mm1.

C.


./fs/jffs2/background.c:        pid = 
kernel_thread(jffs2_garbage_collect_thread, c, CLONE_FS|CLONE_FILES);
./fs/nfs/delegation.c:  status = kernel_thread(recall_thread, &data, 
CLONE_KERNEL);
./fs/cifs/connect.c:                    rc = (int)kernel_thread((void *)(void 
*)cifs_demultiplex_thread, srvTcp,
./fs/lockd/clntlock.c:          if (kernel_thread(reclaimer, host, 
CLONE_KERNEL) < 0)
./fs/afs/kafsasyncd.c:  ret = kernel_thread(kafsasyncd, NULL, 0);
./fs/afs/kafstimod.c:   ret = kernel_thread(kafstimod, NULL, 0);
./fs/afs/cmservice.c:           ret = kernel_thread(kafscmd, NULL, 0);
./arch/powerpc/platforms/pseries/rtasd.c:       if (kernel_thread(rtasd, NULL, 
CLONE_FS) < 0)
./arch/powerpc/platforms/pseries/eeh_event.c:   if 
(kernel_thread(eeh_event_handler, NULL, CLONE_KERNEL) < 0)
./arch/ia64/sn/kernel/xpc_main.c:       pid = kernel_thread(xpc_activating, 
(void *) ((u64) partid), 0);
./arch/ia64/sn/kernel/xpc_main.c:               pid = 
kernel_thread(xpc_daemonize_kthread, (void *) args, 0);
./arch/ia64/sn/kernel/xpc_main.c:       pid = kernel_thread(xpc_hb_checker, 
NULL, 0);
./arch/ia64/sn/kernel/xpc_main.c:       pid = 
kernel_thread(xpc_initiate_discovery, NULL, 0);
./arch/arm/kernel/ecard.c:      ret = kernel_thread(ecard_task, NULL, 
CLONE_KERNEL);
./arch/sparc64/kernel/power.c:          if (kernel_thread(powerd, NULL, 
CLONE_FS) < 0) {
./arch/i386/mach-voyager/voyager_thread.c:      if(kernel_thread(thread, NULL, 
CLONE_KERNEL) < 0) {
./arch/i386/kernel/io_apic.c:   if (kernel_thread(balanced_irq, NULL, 
CLONE_KERNEL) >= 0) 
./arch/parisc/kernel/process.c: return __kernel_thread(fn, arg, flags);
./init/do_mounts_initrd.c:      pid = kernel_thread(do_linuxrc, "/linuxrc", 
SIGCHLD);
./kernel/kmod.c:        pid = kernel_thread(____call_usermodehelper, sub_info, 
SIGCHLD);
./kernel/kmod.c:                pid = kernel_thread(wait_for_helper, sub_info,
./kernel/kmod.c:                pid = kernel_thread(____call_usermodehelper, 
sub_info,
./kernel/stop_machine.c:                ret = kernel_thread(stopmachine, (void 
*)(long)i,CLONE_KERNEL);
./net/ipv4/ipvs/ip_vs_sync.c:   if ((pid = kernel_thread(sync_thread, startup, 
0)) < 0) {
./net/ipv4/ipvs/ip_vs_sync.c:   if ((pid = kernel_thread(fork_sync_thread, 
&startup, 0)) < 0) {
./net/sunrpc/svc.c:     error = kernel_thread((int (*)(void *)) func, rqstp, 0);
./net/rxrpc/krxiod.c:   return kernel_thread(rxrpc_krxiod, NULL, 0);
./net/rxrpc/krxsecd.c:  return kernel_thread(rxrpc_krxsecd, NULL, 0);
./net/rxrpc/krxtimod.c: ret = kernel_thread(krxtimod, NULL, 0);
./net/bluetooth/bnep/core.c:    err = kernel_thread(bnep_session, s, 
CLONE_KERNEL);
./net/bluetooth/hidp/core.c:    err = kernel_thread(hidp_session, session, 
CLONE_KERNEL);
./net/bluetooth/cmtp/core.c:    err = kernel_thread(cmtp_session, session, 
CLONE_KERNEL);
./net/bluetooth/rfcomm/core.c:  kernel_thread(rfcomm_run, NULL, CLONE_KERNEL);
./drivers/media/video/saa7134/saa7134-tvaudio.c:                dev->thread.pid 
= kernel_thread(my_thread,dev,0);
./drivers/media/video/saa7134/saa7134-tvaudio.c:                        
printk(KERN_WARNING "%s: kernel_thread() failed\n",
./drivers/media/dvb/dvb-core/dvb_ca_en50221.c:  ret = 
kernel_thread(dvb_ca_en50221_thread, ca, 0);
./drivers/usb/atm/usbatm.c:     int ret = kernel_thread(usbatm_do_heavy_init, 
instance, CLONE_KERNEL);
./drivers/s390/scsi/zfcp_erp.c: retval = kernel_thread(zfcp_erp_thread, 
adapter, SIGCHLD);
./drivers/s390/net/lcs.c:               kernel_thread(lcs_recovery, (void *) 
card, SIGCHLD);
./drivers/s390/net/lcs.c:               kernel_thread(lcs_register_mc_addresses,
./drivers/s390/net/qeth_main.c:         kernel_thread(qeth_recover, (void *) 
card, SIGCHLD);
./drivers/scsi/libsas/sas_scsi_host.c:  res = kernel_thread(sas_queue_thread, 
sas_ha, 0);
./drivers/pnp/pnpbios/core.c:   if (kernel_thread(pnp_dock_thread, NULL, 
CLONE_KERNEL) > 0)
./drivers/mtd/ubi/background.c: pid = kernel_thread(ubi_thread, ubi, CLONE_FS | 
CLONE_FILES);
./drivers/mtd/mtd_blkdevs.c:    ret = kernel_thread(mtd_blktrans_thread, tr, 
CLONE_KERNEL);
./drivers/pci/hotplug/cpci_hotplug_core.c:              pid = 
kernel_thread(event_thread, NULL, 0);
./drivers/pci/hotplug/cpci_hotplug_core.c:              pid = 
kernel_thread(poll_thread, NULL, 0);
./drivers/pci/hotplug/cpqphp_ctrl.c:    pid = kernel_thread(event_thread, NULL, 
0);
./drivers/macintosh/therm_windtunnel.c:                 x.poll_task = 
kernel_thread( control_loop, NULL, SIGCHLD | CLONE_KERNEL );
./drivers/macintosh/mediabay.c:         kernel_thread(media_bay_task, NULL, 
CLONE_KERNEL);
./drivers/macintosh/adb.c:      adb_probe_task_pid = 
kernel_thread(adb_probe_task, NULL, SIGCHLD | CLONE_KERNEL);
./drivers/macintosh/therm_pm72.c:       ctrl_task = 
kernel_thread(main_control_loop, NULL, SIGCHLD | CLONE_KERNEL);


_______________________________________________
Containers mailing list
[EMAIL PROTECTED]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
Devel@openvz.org
https://openvz.org/mailman/listinfo/devel

Reply via email to