fork.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:20k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/kernel/fork.c
  3.  *
  4.  *  Copyright (C) 1991, 1992  Linus Torvalds
  5.  */
  6. /*
  7.  *  'fork.c' contains the help-routines for the 'fork' system call
  8.  * (see also entry.S and others).
  9.  * Fork is rather simple, once you get the hang of it, but the memory
  10.  * management can be a bitch. See 'mm/memory.c': 'copy_page_range()'
  11.  */
  12. #include <linux/config.h>
  13. #include <linux/slab.h>
  14. #include <linux/init.h>
  15. #include <linux/unistd.h>
  16. #include <linux/smp_lock.h>
  17. #include <linux/module.h>
  18. #include <linux/vmalloc.h>
  19. #include <linux/completion.h>
  20. #include <linux/namespace.h>
  21. #include <linux/personality.h>
  22. #include <linux/compiler.h>
  23. #include <asm/pgtable.h>
  24. #include <asm/pgalloc.h>
  25. #include <asm/uaccess.h>
  26. #include <asm/mmu_context.h>
  27. /* The idle threads do not count.. */
  28. int nr_threads;
  29. int nr_running;
  30. int max_threads;
  31. unsigned long total_forks; /* Handle normal Linux uptimes. */
  32. int last_pid;
  33. struct task_struct *pidhash[PIDHASH_SZ];
  34. void add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)
  35. {
  36. unsigned long flags;
  37. wait->flags &= ~WQ_FLAG_EXCLUSIVE;
  38. wq_write_lock_irqsave(&q->lock, flags);
  39. __add_wait_queue(q, wait);
  40. wq_write_unlock_irqrestore(&q->lock, flags);
  41. }
  42. void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait)
  43. {
  44. unsigned long flags;
  45. wait->flags |= WQ_FLAG_EXCLUSIVE;
  46. wq_write_lock_irqsave(&q->lock, flags);
  47. __add_wait_queue_tail(q, wait);
  48. wq_write_unlock_irqrestore(&q->lock, flags);
  49. }
  50. void remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)
  51. {
  52. unsigned long flags;
  53. wq_write_lock_irqsave(&q->lock, flags);
  54. __remove_wait_queue(q, wait);
  55. wq_write_unlock_irqrestore(&q->lock, flags);
  56. }
  57. void __init fork_init(unsigned long mempages)
  58. {
  59. /*
  60.  * The default maximum number of threads is set to a safe
  61.  * value: the thread structures can take up at most half
  62.  * of memory.
  63.  */
  64. max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 8;
  65. init_task.rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
  66. init_task.rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
  67. }
  68. /* Protects next_safe and last_pid. */
  69. spinlock_t lastpid_lock = SPIN_LOCK_UNLOCKED;
  70. static int get_pid(unsigned long flags)
  71. {
  72. static int next_safe = PID_MAX;
  73. struct task_struct *p;
  74. int pid, beginpid;
  75. if (flags & CLONE_PID)
  76. return current->pid;
  77. spin_lock(&lastpid_lock);
  78. beginpid = last_pid;
  79. if((++last_pid) & 0xffff8000) {
  80. last_pid = 300; /* Skip daemons etc. */
  81. goto inside;
  82. }
  83. if(last_pid >= next_safe) {
  84. inside:
  85. next_safe = PID_MAX;
  86. read_lock(&tasklist_lock);
  87. repeat:
  88. for_each_task(p) {
  89. if(p->pid == last_pid ||
  90.    p->pgrp == last_pid ||
  91.    p->tgid == last_pid ||
  92.    p->session == last_pid) {
  93. if(++last_pid >= next_safe) {
  94. if(last_pid & 0xffff8000)
  95. last_pid = 300;
  96. next_safe = PID_MAX;
  97. }
  98. if(unlikely(last_pid == beginpid))
  99. goto nomorepids;
  100. goto repeat;
  101. }
  102. if(p->pid > last_pid && next_safe > p->pid)
  103. next_safe = p->pid;
  104. if(p->pgrp > last_pid && next_safe > p->pgrp)
  105. next_safe = p->pgrp;
  106. if(p->tgid > last_pid && next_safe > p->tgid)
  107. next_safe = p->tgid;
  108. if(p->session > last_pid && next_safe > p->session)
  109. next_safe = p->session;
  110. }
  111. read_unlock(&tasklist_lock);
  112. }
  113. pid = last_pid;
  114. spin_unlock(&lastpid_lock);
  115. return pid;
  116. nomorepids:
  117. read_unlock(&tasklist_lock);
  118. spin_unlock(&lastpid_lock);
  119. return 0;
  120. }
  121. static inline int dup_mmap(struct mm_struct * mm)
  122. {
  123. struct vm_area_struct * mpnt, *tmp, **pprev;
  124. int retval;
  125. flush_cache_mm(current->mm);
  126. mm->locked_vm = 0;
  127. mm->mmap = NULL;
  128. mm->mmap_cache = NULL;
  129. mm->map_count = 0;
  130. mm->rss = 0;
  131. mm->cpu_vm_mask = 0;
  132. mm->swap_address = 0;
  133. pprev = &mm->mmap;
  134. /*
  135.  * Add it to the mmlist after the parent.
  136.  * Doing it this way means that we can order the list,
  137.  * and fork() won't mess up the ordering significantly.
  138.  * Add it first so that swapoff can see any swap entries.
  139.  */
  140. spin_lock(&mmlist_lock);
  141. list_add(&mm->mmlist, &current->mm->mmlist);
  142. mmlist_nr++;
  143. spin_unlock(&mmlist_lock);
  144. for (mpnt = current->mm->mmap ; mpnt ; mpnt = mpnt->vm_next) {
  145. struct file *file;
  146. retval = -ENOMEM;
  147. if(mpnt->vm_flags & VM_DONTCOPY)
  148. continue;
  149. tmp = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  150. if (!tmp)
  151. goto fail_nomem;
  152. *tmp = *mpnt;
  153. tmp->vm_flags &= ~VM_LOCKED;
  154. tmp->vm_mm = mm;
  155. tmp->vm_next = NULL;
  156. file = tmp->vm_file;
  157. if (file) {
  158. struct inode *inode = file->f_dentry->d_inode;
  159. get_file(file);
  160. if (tmp->vm_flags & VM_DENYWRITE)
  161. atomic_dec(&inode->i_writecount);
  162.       
  163. /* insert tmp into the share list, just after mpnt */
  164. spin_lock(&inode->i_mapping->i_shared_lock);
  165. if((tmp->vm_next_share = mpnt->vm_next_share) != NULL)
  166. mpnt->vm_next_share->vm_pprev_share =
  167. &tmp->vm_next_share;
  168. mpnt->vm_next_share = tmp;
  169. tmp->vm_pprev_share = &mpnt->vm_next_share;
  170. spin_unlock(&inode->i_mapping->i_shared_lock);
  171. }
  172. /*
  173.  * Link in the new vma and copy the page table entries:
  174.  * link in first so that swapoff can see swap entries.
  175.  */
  176. spin_lock(&mm->page_table_lock);
  177. *pprev = tmp;
  178. pprev = &tmp->vm_next;
  179. mm->map_count++;
  180. retval = copy_page_range(mm, current->mm, tmp);
  181. spin_unlock(&mm->page_table_lock);
  182. if (tmp->vm_ops && tmp->vm_ops->open)
  183. tmp->vm_ops->open(tmp);
  184. if (retval)
  185. goto fail_nomem;
  186. }
  187. retval = 0;
  188. build_mmap_rb(mm);
  189. fail_nomem:
  190. flush_tlb_mm(current->mm);
  191. return retval;
  192. }
  193. spinlock_t mmlist_lock __cacheline_aligned = SPIN_LOCK_UNLOCKED;
  194. int mmlist_nr;
  195. #define allocate_mm() (kmem_cache_alloc(mm_cachep, SLAB_KERNEL))
  196. #define free_mm(mm) (kmem_cache_free(mm_cachep, (mm)))
  197. static struct mm_struct * mm_init(struct mm_struct * mm)
  198. {
  199. atomic_set(&mm->mm_users, 1);
  200. atomic_set(&mm->mm_count, 1);
  201. init_rwsem(&mm->mmap_sem);
  202. mm->page_table_lock = SPIN_LOCK_UNLOCKED;
  203. mm->pgd = pgd_alloc(mm);
  204. mm->def_flags = 0;
  205. if (mm->pgd)
  206. return mm;
  207. free_mm(mm);
  208. return NULL;
  209. }
  210. /*
  211.  * Allocate and initialize an mm_struct.
  212.  */
  213. struct mm_struct * mm_alloc(void)
  214. {
  215. struct mm_struct * mm;
  216. mm = allocate_mm();
  217. if (mm) {
  218. memset(mm, 0, sizeof(*mm));
  219. return mm_init(mm);
  220. }
  221. return NULL;
  222. }
  223. /*
  224.  * Called when the last reference to the mm
  225.  * is dropped: either by a lazy thread or by
  226.  * mmput. Free the page directory and the mm.
  227.  */
  228. inline void __mmdrop(struct mm_struct *mm)
  229. {
  230. BUG_ON(mm == &init_mm);
  231. pgd_free(mm->pgd);
  232. destroy_context(mm);
  233. free_mm(mm);
  234. }
  235. /*
  236.  * Decrement the use count and release all resources for an mm.
  237.  */
  238. void mmput(struct mm_struct *mm)
  239. {
  240. if (atomic_dec_and_lock(&mm->mm_users, &mmlist_lock)) {
  241. extern struct mm_struct *swap_mm;
  242. if (swap_mm == mm)
  243. swap_mm = list_entry(mm->mmlist.next, struct mm_struct, mmlist);
  244. list_del(&mm->mmlist);
  245. mmlist_nr--;
  246. spin_unlock(&mmlist_lock);
  247. exit_mmap(mm);
  248. mmdrop(mm);
  249. }
  250. }
  251. /* Please note the differences between mmput and mm_release.
  252.  * mmput is called whenever we stop holding onto a mm_struct,
  253.  * error success whatever.
  254.  *
  255.  * mm_release is called after a mm_struct has been removed
  256.  * from the current process.
  257.  *
  258.  * This difference is important for error handling, when we
  259.  * only half set up a mm_struct for a new process and need to restore
  260.  * the old one.  Because we mmput the new mm_struct before
  261.  * restoring the old one. . .
  262.  * Eric Biederman 10 January 1998
  263.  */
  264. void mm_release(void)
  265. {
  266. struct task_struct *tsk = current;
  267. struct completion *vfork_done = tsk->vfork_done;
  268. /* notify parent sleeping on vfork() */
  269. if (vfork_done) {
  270. tsk->vfork_done = NULL;
  271. complete(vfork_done);
  272. }
  273. }
  274. static int copy_mm(unsigned long clone_flags, struct task_struct * tsk)
  275. {
  276. struct mm_struct * mm, *oldmm;
  277. int retval;
  278. tsk->min_flt = tsk->maj_flt = 0;
  279. tsk->cmin_flt = tsk->cmaj_flt = 0;
  280. tsk->nswap = tsk->cnswap = 0;
  281. tsk->mm = NULL;
  282. tsk->active_mm = NULL;
  283. /*
  284.  * Are we cloning a kernel thread?
  285.  *
  286.  * We need to steal a active VM for that..
  287.  */
  288. oldmm = current->mm;
  289. if (!oldmm)
  290. return 0;
  291. if (clone_flags & CLONE_VM) {
  292. atomic_inc(&oldmm->mm_users);
  293. mm = oldmm;
  294. goto good_mm;
  295. }
  296. retval = -ENOMEM;
  297. mm = allocate_mm();
  298. if (!mm)
  299. goto fail_nomem;
  300. /* Copy the current MM stuff.. */
  301. memcpy(mm, oldmm, sizeof(*mm));
  302. if (!mm_init(mm))
  303. goto fail_nomem;
  304. if (init_new_context(tsk,mm))
  305. goto free_pt;
  306. down_write(&oldmm->mmap_sem);
  307. retval = dup_mmap(mm);
  308. up_write(&oldmm->mmap_sem);
  309. if (retval)
  310. goto free_pt;
  311. /*
  312.  * child gets a private LDT (if there was an LDT in the parent)
  313.  */
  314. copy_segments(tsk, mm);
  315. good_mm:
  316. tsk->mm = mm;
  317. tsk->active_mm = mm;
  318. return 0;
  319. free_pt:
  320. mmput(mm);
  321. fail_nomem:
  322. return retval;
  323. }
  324. static inline struct fs_struct *__copy_fs_struct(struct fs_struct *old)
  325. {
  326. struct fs_struct *fs = kmem_cache_alloc(fs_cachep, GFP_KERNEL);
  327. /* We don't need to lock fs - think why ;-) */
  328. if (fs) {
  329. atomic_set(&fs->count, 1);
  330. fs->lock = RW_LOCK_UNLOCKED;
  331. fs->umask = old->umask;
  332. read_lock(&old->lock);
  333. fs->rootmnt = mntget(old->rootmnt);
  334. fs->root = dget(old->root);
  335. fs->pwdmnt = mntget(old->pwdmnt);
  336. fs->pwd = dget(old->pwd);
  337. if (old->altroot) {
  338. fs->altrootmnt = mntget(old->altrootmnt);
  339. fs->altroot = dget(old->altroot);
  340. } else {
  341. fs->altrootmnt = NULL;
  342. fs->altroot = NULL;
  343. }
  344. read_unlock(&old->lock);
  345. }
  346. return fs;
  347. }
  348. struct fs_struct *copy_fs_struct(struct fs_struct *old)
  349. {
  350. return __copy_fs_struct(old);
  351. }
  352. static inline int copy_fs(unsigned long clone_flags, struct task_struct * tsk)
  353. {
  354. if (clone_flags & CLONE_FS) {
  355. atomic_inc(&current->fs->count);
  356. return 0;
  357. }
  358. tsk->fs = __copy_fs_struct(current->fs);
  359. if (!tsk->fs)
  360. return -1;
  361. return 0;
  362. }
  363. static int count_open_files(struct files_struct *files, int size)
  364. {
  365. int i;
  366. /* Find the last open fd */
  367. for (i = size/(8*sizeof(long)); i > 0; ) {
  368. if (files->open_fds->fds_bits[--i])
  369. break;
  370. }
  371. i = (i+1) * 8 * sizeof(long);
  372. return i;
  373. }
  374. static int copy_files(unsigned long clone_flags, struct task_struct * tsk)
  375. {
  376. struct files_struct *oldf, *newf;
  377. struct file **old_fds, **new_fds;
  378. int open_files, nfds, size, i, error = 0;
  379. /*
  380.  * A background process may not have any files ...
  381.  */
  382. oldf = current->files;
  383. if (!oldf)
  384. goto out;
  385. if (clone_flags & CLONE_FILES) {
  386. atomic_inc(&oldf->count);
  387. goto out;
  388. }
  389. tsk->files = NULL;
  390. error = -ENOMEM;
  391. newf = kmem_cache_alloc(files_cachep, SLAB_KERNEL);
  392. if (!newf) 
  393. goto out;
  394. atomic_set(&newf->count, 1);
  395. newf->file_lock     = RW_LOCK_UNLOCKED;
  396. newf->next_fd     = 0;
  397. newf->max_fds     = NR_OPEN_DEFAULT;
  398. newf->max_fdset     = __FD_SETSIZE;
  399. newf->close_on_exec = &newf->close_on_exec_init;
  400. newf->open_fds     = &newf->open_fds_init;
  401. newf->fd     = &newf->fd_array[0];
  402. /* We don't yet have the oldf readlock, but even if the old
  403.            fdset gets grown now, we'll only copy up to "size" fds */
  404. size = oldf->max_fdset;
  405. if (size > __FD_SETSIZE) {
  406. newf->max_fdset = 0;
  407. write_lock(&newf->file_lock);
  408. error = expand_fdset(newf, size-1);
  409. write_unlock(&newf->file_lock);
  410. if (error)
  411. goto out_release;
  412. }
  413. read_lock(&oldf->file_lock);
  414. open_files = count_open_files(oldf, size);
  415. /*
  416.  * Check whether we need to allocate a larger fd array.
  417.  * Note: we're not a clone task, so the open count won't
  418.  * change.
  419.  */
  420. nfds = NR_OPEN_DEFAULT;
  421. if (open_files > nfds) {
  422. read_unlock(&oldf->file_lock);
  423. newf->max_fds = 0;
  424. write_lock(&newf->file_lock);
  425. error = expand_fd_array(newf, open_files-1);
  426. write_unlock(&newf->file_lock);
  427. if (error) 
  428. goto out_release;
  429. nfds = newf->max_fds;
  430. read_lock(&oldf->file_lock);
  431. }
  432. old_fds = oldf->fd;
  433. new_fds = newf->fd;
  434. memcpy(newf->open_fds->fds_bits, oldf->open_fds->fds_bits, open_files/8);
  435. memcpy(newf->close_on_exec->fds_bits, oldf->close_on_exec->fds_bits, open_files/8);
  436. for (i = open_files; i != 0; i--) {
  437. struct file *f = *old_fds++;
  438. if (f)
  439. get_file(f);
  440. *new_fds++ = f;
  441. }
  442. read_unlock(&oldf->file_lock);
  443. /* compute the remainder to be cleared */
  444. size = (newf->max_fds - open_files) * sizeof(struct file *);
  445. /* This is long word aligned thus could use a optimized version */ 
  446. memset(new_fds, 0, size); 
  447. if (newf->max_fdset > open_files) {
  448. int left = (newf->max_fdset-open_files)/8;
  449. int start = open_files / (8 * sizeof(unsigned long));
  450. memset(&newf->open_fds->fds_bits[start], 0, left);
  451. memset(&newf->close_on_exec->fds_bits[start], 0, left);
  452. }
  453. tsk->files = newf;
  454. error = 0;
  455. out:
  456. return error;
  457. out_release:
  458. free_fdset (newf->close_on_exec, newf->max_fdset);
  459. free_fdset (newf->open_fds, newf->max_fdset);
  460. kmem_cache_free(files_cachep, newf);
  461. goto out;
  462. }
  463. static inline int copy_sighand(unsigned long clone_flags, struct task_struct * tsk)
  464. {
  465. struct signal_struct *sig;
  466. if (clone_flags & CLONE_SIGHAND) {
  467. atomic_inc(&current->sig->count);
  468. return 0;
  469. }
  470. sig = kmem_cache_alloc(sigact_cachep, GFP_KERNEL);
  471. tsk->sig = sig;
  472. if (!sig)
  473. return -1;
  474. spin_lock_init(&sig->siglock);
  475. atomic_set(&sig->count, 1);
  476. memcpy(tsk->sig->action, current->sig->action, sizeof(tsk->sig->action));
  477. return 0;
  478. }
  479. static inline void copy_flags(unsigned long clone_flags, struct task_struct *p)
  480. {
  481. unsigned long new_flags = p->flags;
  482. new_flags &= ~(PF_SUPERPRIV | PF_USEDFPU);
  483. new_flags |= PF_FORKNOEXEC;
  484. if (!(clone_flags & CLONE_PTRACE))
  485. p->ptrace = 0;
  486. p->flags = new_flags;
  487. }
  488. /*
  489.  *  Ok, this is the main fork-routine. It copies the system process
  490.  * information (task[nr]) and sets up the necessary registers. It also
  491.  * copies the data segment in its entirety.  The "stack_start" and
  492.  * "stack_top" arguments are simply passed along to the platform
  493.  * specific copy_thread() routine.  Most platforms ignore stack_top.
  494.  * For an example that's using stack_top, see
  495.  * arch/ia64/kernel/process.c.
  496.  */
  497. int do_fork(unsigned long clone_flags, unsigned long stack_start,
  498.     struct pt_regs *regs, unsigned long stack_size)
  499. {
  500. int retval;
  501. struct task_struct *p;
  502. struct completion vfork;
  503. if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
  504. return -EINVAL;
  505. retval = -EPERM;
  506. /* 
  507.  * CLONE_PID is only allowed for the initial SMP swapper
  508.  * calls
  509.  */
  510. if (clone_flags & CLONE_PID) {
  511. if (current->pid)
  512. goto fork_out;
  513. }
  514. retval = -ENOMEM;
  515. p = alloc_task_struct();
  516. if (!p)
  517. goto fork_out;
  518. *p = *current;
  519. retval = -EAGAIN;
  520. /*
  521.  * Check if we are over our maximum process limit, but be sure to
  522.  * exclude root. This is needed to make it possible for login and
  523.  * friends to set the per-user process limit to something lower
  524.  * than the amount of processes root is running. -- Rik
  525.  */
  526. if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur
  527.               && !capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE))
  528. goto bad_fork_free;
  529. atomic_inc(&p->user->__count);
  530. atomic_inc(&p->user->processes);
  531. /*
  532.  * Counter increases are protected by
  533.  * the kernel lock so nr_threads can't
  534.  * increase under us (but it may decrease).
  535.  */
  536. if (nr_threads >= max_threads)
  537. goto bad_fork_cleanup_count;
  538. get_exec_domain(p->exec_domain);
  539. if (p->binfmt && p->binfmt->module)
  540. __MOD_INC_USE_COUNT(p->binfmt->module);
  541. p->did_exec = 0;
  542. p->swappable = 0;
  543. p->state = TASK_UNINTERRUPTIBLE;
  544. copy_flags(clone_flags, p);
  545. p->pid = get_pid(clone_flags);
  546. if (p->pid == 0 && current->pid != 0)
  547. goto bad_fork_cleanup;
  548. p->run_list.next = NULL;
  549. p->run_list.prev = NULL;
  550. p->p_cptr = NULL;
  551. init_waitqueue_head(&p->wait_chldexit);
  552. p->vfork_done = NULL;
  553. if (clone_flags & CLONE_VFORK) {
  554. p->vfork_done = &vfork;
  555. init_completion(&vfork);
  556. }
  557. spin_lock_init(&p->alloc_lock);
  558. p->sigpending = 0;
  559. init_sigpending(&p->pending);
  560. p->it_real_value = p->it_virt_value = p->it_prof_value = 0;
  561. p->it_real_incr = p->it_virt_incr = p->it_prof_incr = 0;
  562. init_timer(&p->real_timer);
  563. p->real_timer.data = (unsigned long) p;
  564. p->leader = 0; /* session leadership doesn't inherit */
  565. p->tty_old_pgrp = 0;
  566. p->times.tms_utime = p->times.tms_stime = 0;
  567. p->times.tms_cutime = p->times.tms_cstime = 0;
  568. #ifdef CONFIG_SMP
  569. {
  570. int i;
  571. p->cpus_runnable = ~0UL;
  572. p->processor = current->processor;
  573. /* ?? should we just memset this ?? */
  574. for(i = 0; i < smp_num_cpus; i++)
  575. p->per_cpu_utime[i] = p->per_cpu_stime[i] = 0;
  576. spin_lock_init(&p->sigmask_lock);
  577. }
  578. #endif
  579. p->lock_depth = -1; /* -1 = no lock */
  580. p->start_time = jiffies;
  581. INIT_LIST_HEAD(&p->local_pages);
  582. retval = -ENOMEM;
  583. /* copy all the process information */
  584. if (copy_files(clone_flags, p))
  585. goto bad_fork_cleanup;
  586. if (copy_fs(clone_flags, p))
  587. goto bad_fork_cleanup_files;
  588. if (copy_sighand(clone_flags, p))
  589. goto bad_fork_cleanup_fs;
  590. if (copy_mm(clone_flags, p))
  591. goto bad_fork_cleanup_sighand;
  592. if (copy_namespace(clone_flags, p))
  593. goto bad_fork_cleanup_mm;
  594. retval = copy_thread(0, clone_flags, stack_start, stack_size, p, regs);
  595. if (retval)
  596. goto bad_fork_cleanup_namespace;
  597. p->semundo = NULL;
  598. /* Our parent execution domain becomes current domain
  599.    These must match for thread signalling to apply */
  600.    
  601. p->parent_exec_id = p->self_exec_id;
  602. /* ok, now we should be set up.. */
  603. p->swappable = 1;
  604. p->exit_signal = clone_flags & CSIGNAL;
  605. p->pdeath_signal = 0;
  606. /*
  607.  * "share" dynamic priority between parent and child, thus the
  608.  * total amount of dynamic priorities in the system doesn't change,
  609.  * more scheduling fairness. This is only important in the first
  610.  * timeslice, on the long run the scheduling behaviour is unchanged.
  611.  */
  612. p->counter = (current->counter + 1) >> 1;
  613. current->counter >>= 1;
  614. if (!current->counter)
  615. current->need_resched = 1;
  616. /*
  617.  * Ok, add it to the run-queues and make it
  618.  * visible to the rest of the system.
  619.  *
  620.  * Let it rip!
  621.  */
  622. retval = p->pid;
  623. p->tgid = retval;
  624. INIT_LIST_HEAD(&p->thread_group);
  625. /* Need tasklist lock for parent etc handling! */
  626. write_lock_irq(&tasklist_lock);
  627. /* CLONE_PARENT re-uses the old parent */
  628. p->p_opptr = current->p_opptr;
  629. p->p_pptr = current->p_pptr;
  630. if (!(clone_flags & CLONE_PARENT)) {
  631. p->p_opptr = current;
  632. if (!(p->ptrace & PT_PTRACED))
  633. p->p_pptr = current;
  634. }
  635. if (clone_flags & CLONE_THREAD) {
  636. p->tgid = current->tgid;
  637. list_add(&p->thread_group, &current->thread_group);
  638. }
  639. SET_LINKS(p);
  640. hash_pid(p);
  641. nr_threads++;
  642. write_unlock_irq(&tasklist_lock);
  643. if (p->ptrace & PT_PTRACED)
  644. send_sig(SIGSTOP, p, 1);
  645. wake_up_process(p); /* do this last */
  646. ++total_forks;
  647. if (clone_flags & CLONE_VFORK)
  648. wait_for_completion(&vfork);
  649. fork_out:
  650. return retval;
  651. bad_fork_cleanup_namespace:
  652. exit_namespace(p);
  653. bad_fork_cleanup_mm:
  654. exit_mm(p);
  655. bad_fork_cleanup_sighand:
  656. exit_sighand(p);
  657. bad_fork_cleanup_fs:
  658. exit_fs(p); /* blocking */
  659. bad_fork_cleanup_files:
  660. exit_files(p); /* blocking */
  661. bad_fork_cleanup:
  662. put_exec_domain(p->exec_domain);
  663. if (p->binfmt && p->binfmt->module)
  664. __MOD_DEC_USE_COUNT(p->binfmt->module);
  665. bad_fork_cleanup_count:
  666. atomic_dec(&p->user->processes);
  667. free_uid(p->user);
  668. bad_fork_free:
  669. free_task_struct(p);
  670. goto fork_out;
  671. }
  672. /* SLAB cache for signal_struct structures (tsk->sig) */
  673. kmem_cache_t *sigact_cachep;
  674. /* SLAB cache for files_struct structures (tsk->files) */
  675. kmem_cache_t *files_cachep;
  676. /* SLAB cache for fs_struct structures (tsk->fs) */
  677. kmem_cache_t *fs_cachep;
  678. /* SLAB cache for vm_area_struct structures */
  679. kmem_cache_t *vm_area_cachep;
  680. /* SLAB cache for mm_struct structures (tsk->mm) */
  681. kmem_cache_t *mm_cachep;
  682. void __init proc_caches_init(void)
  683. {
  684. sigact_cachep = kmem_cache_create("signal_act",
  685. sizeof(struct signal_struct), 0,
  686. SLAB_HWCACHE_ALIGN, NULL, NULL);
  687. if (!sigact_cachep)
  688. panic("Cannot create signal action SLAB cache");
  689. files_cachep = kmem_cache_create("files_cache", 
  690.  sizeof(struct files_struct), 0, 
  691.  SLAB_HWCACHE_ALIGN, NULL, NULL);
  692. if (!files_cachep) 
  693. panic("Cannot create files SLAB cache");
  694. fs_cachep = kmem_cache_create("fs_cache", 
  695.  sizeof(struct fs_struct), 0, 
  696.  SLAB_HWCACHE_ALIGN, NULL, NULL);
  697. if (!fs_cachep) 
  698. panic("Cannot create fs_struct SLAB cache");
  699.  
  700. vm_area_cachep = kmem_cache_create("vm_area_struct",
  701. sizeof(struct vm_area_struct), 0,
  702. SLAB_HWCACHE_ALIGN, NULL, NULL);
  703. if(!vm_area_cachep)
  704. panic("vma_init: Cannot alloc vm_area_struct SLAB cache");
  705. mm_cachep = kmem_cache_create("mm_struct",
  706. sizeof(struct mm_struct), 0,
  707. SLAB_HWCACHE_ALIGN, NULL, NULL);
  708. if(!mm_cachep)
  709. panic("vma_init: Cannot alloc mm_struct SLAB cache");
  710. }