lbuf->l_log = log; init_waitqueue_head(&lbuf->l_ioevent);  lbuf->l_freelist = log->lbuf_free; log->lbuf_free = lbuf; 
static int lbmLogInit(struct jfs_log * log){				/* log inode */	int i;	struct lbuf *lbuf;	jfs_info("lbmLogInit: log:0x%p", log);	/* initialize current buffer cursor */	log->bp = NULL;	/* initialize log device write queue */	log->wqueue = NULL;	/*	 * Each log has its own buffer pages allocated to it.  These are	 * not managed by the page cache.  This ensures that a transaction	 * writing to the log does not block trying to allocate a page from	 * the page cache (for the log).  This would be bad, since page	 * allocation waits on the kswapd thread that may be committing inodes	 * which would cause log activity.  Was that clear?  I'm trying to	 * avoid deadlock here.	 */	init_waitqueue_head(&log->free_wait);	log->lbuf_free = NULL;	for (i = 0; i < LOGPAGES; i++) {		lbuf = kmalloc(sizeof(struct lbuf), GFP_KERNEL);		if (lbuf == 0)			goto error;		lbuf->l_ldata = (char *) get_zeroed_page(GFP_KERNEL);		if (lbuf->l_ldata == 0) {			kfree(lbuf);			goto error;		}		lbuf->l_log = log;		init_waitqueue_head(&lbuf->l_ioevent);		lbuf->l_freelist = log->lbuf_free;		log->lbuf_free = lbuf;	}	return (0);      error:	lbmLogShutdown(log);	return -ENOMEM;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/dc5798d9a7b656550533a5c0177dba17d4ef4990/jfs_logmgr.c/buggy/fs/jfs/jfs_logmgr.c