diff options
Diffstat (limited to 'kernel/acct.c')
| -rw-r--r-- | kernel/acct.c | 46 | 
1 files changed, 13 insertions, 33 deletions
| diff --git a/kernel/acct.c b/kernel/acct.c index fa7eb3de2ddc..02e6167a53b0 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -84,11 +84,10 @@ static void do_acct_process(struct bsd_acct_struct *acct,   * the cache line to have the data after getting the lock.   */  struct bsd_acct_struct { -	volatile int		active; -	volatile int		needcheck; +	int			active; +	unsigned long		needcheck;  	struct file		*file;  	struct pid_namespace	*ns; -	struct timer_list	timer;  	struct list_head	list;  }; @@ -96,15 +95,6 @@ static DEFINE_SPINLOCK(acct_lock);  static LIST_HEAD(acct_list);  /* - * Called whenever the timer says to check the free space. - */ -static void acct_timeout(unsigned long x) -{ -	struct bsd_acct_struct *acct = (struct bsd_acct_struct *)x; -	acct->needcheck = 1; -} - -/*   * Check the amount of free space and suspend/resume accordingly.   */  static int check_free_space(struct bsd_acct_struct *acct, struct file *file) @@ -112,12 +102,12 @@ static int check_free_space(struct bsd_acct_struct *acct, struct file *file)  	struct kstatfs sbuf;  	int res;  	int act; -	sector_t resume; -	sector_t suspend; +	u64 resume; +	u64 suspend;  	spin_lock(&acct_lock);  	res = acct->active; -	if (!file || !acct->needcheck) +	if (!file || time_is_before_jiffies(acct->needcheck))  		goto out;  	spin_unlock(&acct_lock); @@ -127,8 +117,8 @@ static int check_free_space(struct bsd_acct_struct *acct, struct file *file)  	suspend = sbuf.f_blocks * SUSPEND;  	resume = sbuf.f_blocks * RESUME; -	sector_div(suspend, 100); -	sector_div(resume, 100); +	do_div(suspend, 100); +	do_div(resume, 100);  	if (sbuf.f_bavail <= suspend)  		act = -1; @@ -160,10 +150,7 @@ static int check_free_space(struct bsd_acct_struct *acct, struct file *file)  		}  	} -	del_timer(&acct->timer); -	acct->needcheck = 0; -	acct->timer.expires = jiffies + ACCT_TIMEOUT*HZ; -	add_timer(&acct->timer); +	acct->needcheck = jiffies + ACCT_TIMEOUT*HZ;  	res = acct->active;  out:  	spin_unlock(&acct_lock); @@ -185,9 +172,7 @@ static void acct_file_reopen(struct bsd_acct_struct *acct, struct file *file,  	if (acct->file) {  		old_acct = acct->file;  		old_ns = acct->ns; -		del_timer(&acct->timer);  		acct->active = 0; -		acct->needcheck = 0;  		acct->file = NULL;  		acct->ns = NULL;  		list_del(&acct->list); @@ -195,13 +180,9 @@ static void acct_file_reopen(struct bsd_acct_struct *acct, struct file *file,  	if (file) {  		acct->file = file;  		acct->ns = ns; -		acct->needcheck = 0; +		acct->needcheck = jiffies + ACCT_TIMEOUT*HZ;  		acct->active = 1;  		list_add(&acct->list, &acct_list); -		/* It's been deleted if it was used before so this is safe */ -		setup_timer(&acct->timer, acct_timeout, (unsigned long)acct); -		acct->timer.expires = jiffies + ACCT_TIMEOUT*HZ; -		add_timer(&acct->timer);  	}  	if (old_acct) {  		mnt_unpin(old_acct->f_path.mnt); @@ -334,7 +315,7 @@ void acct_auto_close(struct super_block *sb)  	spin_lock(&acct_lock);  restart:  	list_for_each_entry(acct, &acct_list, list) -		if (acct->file && acct->file->f_path.mnt->mnt_sb == sb) { +		if (acct->file && acct->file->f_path.dentry->d_sb == sb) {  			acct_file_reopen(acct, NULL, NULL);  			goto restart;  		} @@ -348,7 +329,6 @@ void acct_exit_ns(struct pid_namespace *ns)  	if (acct == NULL)  		return; -	del_timer_sync(&acct->timer);  	spin_lock(&acct_lock);  	if (acct->file != NULL)  		acct_file_reopen(acct, NULL, NULL); @@ -498,7 +478,7 @@ static void do_acct_process(struct bsd_acct_struct *acct,  	 * Fill the accounting struct with the needed info as recorded  	 * by the different kernel functions.  	 */ -	memset((caddr_t)&ac, 0, sizeof(acct_t)); +	memset(&ac, 0, sizeof(acct_t));  	ac.ac_version = ACCT_VERSION | ACCT_BYTEORDER;  	strlcpy(ac.ac_comm, current->comm, sizeof(ac.ac_comm)); @@ -613,8 +593,8 @@ void acct_collect(long exitcode, int group_dead)  		pacct->ac_flag |= ACORE;  	if (current->flags & PF_SIGNALED)  		pacct->ac_flag |= AXSIG; -	pacct->ac_utime = cputime_add(pacct->ac_utime, current->utime); -	pacct->ac_stime = cputime_add(pacct->ac_stime, current->stime); +	pacct->ac_utime += current->utime; +	pacct->ac_stime += current->stime;  	pacct->ac_minflt += current->min_flt;  	pacct->ac_majflt += current->maj_flt;  	spin_unlock_irq(¤t->sighand->siglock); | 
