audit_backlog_wait_time = audit_backlog_wait_overflow; wake_up(&audit_backlog_wait); 
struct audit_buffer *audit_log_start(struct audit_context *ctx, int gfp_mask,				     int type){	struct audit_buffer	*ab	= NULL;	struct timespec		t;	unsigned int		serial;	int reserve;	if (!audit_initialized)		return NULL;	if (gfp_mask & __GFP_WAIT)		reserve = 0;	else		reserve = 5; /* Allow atomic callers to go up to five 				entries over the normal backlog limit */	while (audit_backlog_limit	       && skb_queue_len(&audit_skb_queue) > audit_backlog_limit + reserve) {		if (gfp_mask & __GFP_WAIT) {			int ret = 1;			/* Wait for auditd to drain the queue a little */			DECLARE_WAITQUEUE(wait, current);			set_current_state(TASK_INTERRUPTIBLE);			add_wait_queue(&audit_backlog_wait, &wait);			if (audit_backlog_limit &&			    skb_queue_len(&audit_skb_queue) > audit_backlog_limit)				ret = schedule_timeout(HZ * 60);			__set_current_state(TASK_RUNNING);			remove_wait_queue(&audit_backlog_wait, &wait);			if (ret)				continue;		}		if (audit_rate_check())			printk(KERN_WARNING			       "audit: audit_backlog=%d > "			       "audit_backlog_limit=%d\n",			       skb_queue_len(&audit_skb_queue),			       audit_backlog_limit);		audit_log_lost("backlog limit exceeded");		return NULL;	}	ab = audit_buffer_alloc(ctx, gfp_mask, type);	if (!ab) {		audit_log_lost("out of memory in audit_log_start");		return NULL;	}	audit_get_stamp(ab->ctx, &t, &serial);	audit_log_format(ab, "audit(%lu.%03lu:%u): ",			 t.tv_sec, t.tv_nsec/1000000, serial);	return ab;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ac4cec443a80bfde829516e7a7db10f7325aa528/audit.c/clean/kernel/audit.c