Commit d2d6a4f8 authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] conditional system call cleanup

This version of sys_nfsservctl() fix hadn't made DaveM complain.
parent 85909403
...@@ -16,12 +16,6 @@ obj-y := open.o read_write.o devices.o file_table.o buffer.o \ ...@@ -16,12 +16,6 @@ obj-y := open.o read_write.o devices.o file_table.o buffer.o \
dcache.o inode.o attr.o bad_inode.o file.o iobuf.o dnotify.o \ dcache.o inode.o attr.o bad_inode.o file.o iobuf.o dnotify.o \
filesystems.o namespace.o seq_file.o xattr.o libfs.o filesystems.o namespace.o seq_file.o xattr.o libfs.o
ifeq ($(CONFIG_QUOTA),y)
obj-y += dquot.o
else
obj-y += noquot.o
endif
ifneq ($(CONFIG_NFSD),n) ifneq ($(CONFIG_NFSD),n)
ifneq ($(CONFIG_NFSD),) ifneq ($(CONFIG_NFSD),)
obj-y += nfsctl.o obj-y += nfsctl.o
...@@ -85,6 +79,8 @@ obj-y += binfmt_script.o ...@@ -85,6 +79,8 @@ obj-y += binfmt_script.o
obj-$(CONFIG_BINFMT_ELF) += binfmt_elf.o obj-$(CONFIG_BINFMT_ELF) += binfmt_elf.o
obj-$(CONFIG_QUOTA) += dquot.o
# persistent filesystems # persistent filesystems
obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o)) obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
......
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/sysctl.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -1240,10 +1241,23 @@ int dquot_transfer(struct inode *inode, struct iattr *iattr) ...@@ -1240,10 +1241,23 @@ int dquot_transfer(struct inode *inode, struct iattr *iattr)
return ret; return ret;
} }
static ctl_table fs_table[] = {
{FS_NRDQUOT, "dquot-nr", &nr_dquots, 2*sizeof(int),
0444, NULL, &proc_dointvec},
{},
};
static ctl_table dquot_table[] = {
{CTL_FS, "fs", NULL, 0, 0555, fs_table},
{},
};
static int __init dquot_init(void) static int __init dquot_init(void)
{ {
int i; int i;
register_sysctl_table(dquot_table, 0);
for (i = 0; i < NR_DQHASH; i++) for (i = 0; i < NR_DQHASH; i++)
INIT_LIST_HEAD(dquot_hash + i); INIT_LIST_HEAD(dquot_hash + i);
printk(KERN_NOTICE "VFS: Diskquotas version %s initialized\n", __DQUOT_VERSION__); printk(KERN_NOTICE "VFS: Diskquotas version %s initialized\n", __DQUOT_VERSION__);
......
/* noquot.c: Quota stubs necessary for when quotas are not
* compiled into the kernel.
*/
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/errno.h>
int nr_dquots, nr_free_dquots;
int max_dquots;
asmlinkage long sys_quotactl(int cmd, const char *special, int id, caddr_t addr)
{
return(-ENOSYS);
}
...@@ -144,7 +144,6 @@ struct dqstats { ...@@ -144,7 +144,6 @@ struct dqstats {
#ifdef __KERNEL__ #ifdef __KERNEL__
extern int nr_dquots, nr_free_dquots;
extern int dquot_root_squash; extern int dquot_root_squash;
#define NR_DQHASH 43 /* Just an arbitrary number */ #define NR_DQHASH 43 /* Just an arbitrary number */
......
...@@ -14,12 +14,13 @@ export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o exec_domain.o \ ...@@ -14,12 +14,13 @@ export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o exec_domain.o \
obj-y = sched.o dma.o fork.o exec_domain.o panic.o printk.o \ obj-y = sched.o dma.o fork.o exec_domain.o panic.o printk.o \
module.o exit.o itimer.o info.o time.o softirq.o resource.o \ module.o exit.o itimer.o info.o time.o softirq.o resource.o \
sysctl.o acct.o capability.o ptrace.o timer.o user.o \ sysctl.o capability.o ptrace.o timer.o user.o \
signal.o sys.o kmod.o context.o futex.o signal.o sys.o kmod.o context.o futex.o
obj-$(CONFIG_UID16) += uid16.o obj-$(CONFIG_UID16) += uid16.o
obj-$(CONFIG_MODULES) += ksyms.o obj-$(CONFIG_MODULES) += ksyms.o
obj-$(CONFIG_PM) += pm.o obj-$(CONFIG_PM) += pm.o
obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
ifneq ($(CONFIG_IA64),y) ifneq ($(CONFIG_IA64),y)
# According to Alan Modra <alan@linuxcare.com.au>, the -fno-omit-frame-pointer is # According to Alan Modra <alan@linuxcare.com.au>, the -fno-omit-frame-pointer is
......
...@@ -44,17 +44,11 @@ ...@@ -44,17 +44,11 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#ifdef CONFIG_BSD_PROCESS_ACCT
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/acct.h> #include <linux/acct.h>
#include <linux/smp_lock.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
/* /*
...@@ -397,15 +391,3 @@ int acct_process(long exitcode) ...@@ -397,15 +391,3 @@ int acct_process(long exitcode)
spin_unlock(&acct_globals.lock); spin_unlock(&acct_globals.lock);
return 0; return 0;
} }
#else
/*
* Dummy system call when BSD process accounting is not configured
* into the kernel.
*/
asmlinkage long sys_acct(const char * filename)
{
return -ENOSYS;
}
#endif
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
#include <linux/personality.h> #include <linux/personality.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/namespace.h> #include <linux/namespace.h>
#ifdef CONFIG_BSD_PROCESS_ACCT
#include <linux/acct.h> #include <linux/acct.h>
#endif
#include <linux/file.h> #include <linux/file.h>
#include <linux/binfmts.h> #include <linux/binfmts.h>
...@@ -493,9 +491,7 @@ NORET_TYPE void do_exit(long code) ...@@ -493,9 +491,7 @@ NORET_TYPE void do_exit(long code)
del_timer_sync(&tsk->real_timer); del_timer_sync(&tsk->real_timer);
fake_volatile: fake_volatile:
#ifdef CONFIG_BSD_PROCESS_ACCT
acct_process(code); acct_process(code);
#endif
__exit_mm(tsk); __exit_mm(tsk);
lock_kernel(); lock_kernel();
......
...@@ -173,6 +173,18 @@ asmlinkage long sys_ni_syscall(void) ...@@ -173,6 +173,18 @@ asmlinkage long sys_ni_syscall(void)
return -ENOSYS; return -ENOSYS;
} }
/*
* "Conditional" syscalls
*
* What we want is __attribute__((weak,alias("sys_ni_syscall"))),
* but it doesn't work on sparc64, so we just do it by hand
*/
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
cond_syscall(sys_nfsservctl)
cond_syscall(sys_quotactl)
cond_syscall(sys_acct)
static int proc_sel(struct task_struct *p, int which, int who) static int proc_sel(struct task_struct *p, int which, int who)
{ {
if(p->pid) if(p->pid)
......
...@@ -284,8 +284,6 @@ static ctl_table fs_table[] = { ...@@ -284,8 +284,6 @@ static ctl_table fs_table[] = {
0444, NULL, &proc_dointvec}, 0444, NULL, &proc_dointvec},
{FS_MAXFILE, "file-max", &files_stat.max_files, sizeof(int), {FS_MAXFILE, "file-max", &files_stat.max_files, sizeof(int),
0644, NULL, &proc_dointvec}, 0644, NULL, &proc_dointvec},
{FS_NRDQUOT, "dquot-nr", &nr_dquots, 2*sizeof(int),
0444, NULL, &proc_dointvec},
{FS_DENTRY, "dentry-state", &dentry_stat, 6*sizeof(int), {FS_DENTRY, "dentry-state", &dentry_stat, 6*sizeof(int),
0444, NULL, &proc_dointvec}, 0444, NULL, &proc_dointvec},
{FS_OVERFLOWUID, "overflowuid", &fs_overflowuid, sizeof(int), 0644, NULL, {FS_OVERFLOWUID, "overflowuid", &fs_overflowuid, sizeof(int), 0644, NULL,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment