aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/exit.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2009-03-29 19:00:13 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2009-03-31 23:00:26 -0400
commit3e93cd671813e204c258f1e6c797959920cf7772 (patch)
treea1e0b2d2da7d296cc1c53be9cd6efa5b94b01b5c /kernel/exit.c
parentf8ef3ed2bebd2c4cb9ece92efa185d7aead8831a (diff)
Take fs_struct handling to new file (fs/fs_struct.c)
Pure code move; two new helper functions for nfsd and daemonize (unshare_fs_struct() and daemonize_fs_struct() resp.; for now - the same code as used to be in callers). unshare_fs_struct() exported (for nfsd, as copy_fs_struct()/exit_fs() used to be), copy_fs_struct() and exit_fs() don't need exports anymore. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel/exit.c')
-rw-r--r--kernel/exit.c31
1 files changed, 1 insertions, 30 deletions
diff --git a/kernel/exit.c b/kernel/exit.c
index 167e1e3ad7c6..ad8375758a79 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -429,7 +429,6 @@ EXPORT_SYMBOL(disallow_signal);
429void daemonize(const char *name, ...) 429void daemonize(const char *name, ...)
430{ 430{
431 va_list args; 431 va_list args;
432 struct fs_struct *fs;
433 sigset_t blocked; 432 sigset_t blocked;
434 433
435 va_start(args, name); 434 va_start(args, name);
@@ -462,11 +461,7 @@ void daemonize(const char *name, ...)
462 461
463 /* Become as one with the init task */ 462 /* Become as one with the init task */
464 463
465 exit_fs(current); /* current->fs->count--; */ 464 daemonize_fs_struct();
466 fs = init_task.fs;
467 current->fs = fs;
468 atomic_inc(&fs->count);
469
470 exit_files(current); 465 exit_files(current);
471 current->files = init_task.files; 466 current->files = init_task.files;
472 atomic_inc(&current->files->count); 467 atomic_inc(&current->files->count);
@@ -565,30 +560,6 @@ void exit_files(struct task_struct *tsk)
565 } 560 }
566} 561}
567 562
568void put_fs_struct(struct fs_struct *fs)
569{
570 /* No need to hold fs->lock if we are killing it */
571 if (atomic_dec_and_test(&fs->count)) {
572 path_put(&fs->root);
573 path_put(&fs->pwd);
574 kmem_cache_free(fs_cachep, fs);
575 }
576}
577
578void exit_fs(struct task_struct *tsk)
579{
580 struct fs_struct * fs = tsk->fs;
581
582 if (fs) {
583 task_lock(tsk);
584 tsk->fs = NULL;
585 task_unlock(tsk);
586 put_fs_struct(fs);
587 }
588}
589
590EXPORT_SYMBOL_GPL(exit_fs);
591
592#ifdef CONFIG_MM_OWNER 563#ifdef CONFIG_MM_OWNER
593/* 564/*
594 * Task p is exiting and it owned mm, lets find a new owner for it 565 * Task p is exiting and it owned mm, lets find a new owner for it