From: Pavel Emelyanov We're going to have many bsd_acct_struct instances, not just one, so the timer (currently working with a global one) has to know which one to work with. Use a handy setup_timer macro for it (thanks to Oleg for one). Signed-off-by: Pavel Emelyanov Cc: Balbir Singh Cc: "Eric W. Biederman" Signed-off-by: Andrew Morton --- kernel/acct.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff -puN kernel/acct.c~bsdacct-make-check-timer-accept-a-bsd_acct_struct-argument kernel/acct.c --- a/kernel/acct.c~bsdacct-make-check-timer-accept-a-bsd_acct_struct-argument +++ a/kernel/acct.c @@ -97,9 +97,10 @@ static struct bsd_acct_struct acct_globa /* * Called whenever the timer says to check the free space. */ -static void acct_timeout(unsigned long unused) +static void acct_timeout(unsigned long x) { - acct_globals.needcheck = 1; + struct bsd_acct_struct *acct = (struct bsd_acct_struct *)x; + acct->needcheck = 1; } /* @@ -193,8 +194,8 @@ static void acct_file_reopen(struct file acct_globals.needcheck = 0; acct_globals.active = 1; /* It's been deleted if it was used before so this is safe */ - init_timer(&acct_globals.timer); - acct_globals.timer.function = acct_timeout; + setup_timer(&acct_globals.timer, acct_timeout, + (unsigned long)&acct_globals); acct_globals.timer.expires = jiffies + ACCT_TIMEOUT*HZ; add_timer(&acct_globals.timer); } _