/* * fnic_trace_debugfs_open - Open the fnic trace log * @inode: The inode pointer * @file: The file pointer to attach the log output * * Description: * This routine is the entry point for the debugfs open file operation. * It allocates the necessary buffer for the log, fills the buffer from * the in-memory log and then returns a pointer to that log in * the private_data field in @file. * * Returns: * This function returns zero if successful. On error it will return * a negative error value. */ static int fnic_trace_debugfs_open(struct inode *inode, struct file *file) { fnic_dbgfs_t *fnic_dbg_prt; fnic_dbg_prt = kzalloc(sizeof(fnic_dbgfs_t), GFP_KERNEL); if (!fnic_dbg_prt) return -ENOMEM; fnic_dbg_prt->buffer = vmalloc((3*(trace_max_pages * PAGE_SIZE))); if (!fnic_dbg_prt->buffer) return -ENOMEM; memset((void *)fnic_dbg_prt->buffer, 0, (3*(trace_max_pages * PAGE_SIZE))); fnic_dbg_prt->buffer_len = fnic_get_trace_data(fnic_dbg_prt); file->private_data = fnic_dbg_prt; return 0; }
/* * fnic_trace_debugfs_open - Open the fnic trace log * @inode: The inode pointer * @file: The file pointer to attach the log output * * Description: * This routine is the entry point for the debugfs open file operation. * It allocates the necessary buffer for the log, fills the buffer from * the in-memory log and then returns a pointer to that log in * the private_data field in @file. * * Returns: * This function returns zero if successful. On error it will return * a negative error value. */ static int fnic_trace_debugfs_open(struct inode *inode, struct file *file) { fnic_dbgfs_t *fnic_dbg_prt; u8 *rdata_ptr; rdata_ptr = (u8 *)inode->i_private; fnic_dbg_prt = kzalloc(sizeof(fnic_dbgfs_t), GFP_KERNEL); if (!fnic_dbg_prt) return -ENOMEM; if (*rdata_ptr == fc_trc_flag->fnic_trace) { fnic_dbg_prt->buffer = vmalloc(array3_size(3, trace_max_pages, PAGE_SIZE)); if (!fnic_dbg_prt->buffer) { kfree(fnic_dbg_prt); return -ENOMEM; } memset((void *)fnic_dbg_prt->buffer, 0, 3 * (trace_max_pages * PAGE_SIZE)); fnic_dbg_prt->buffer_len = fnic_get_trace_data(fnic_dbg_prt); } else { fnic_dbg_prt->buffer = vmalloc(array3_size(3, fnic_fc_trace_max_pages, PAGE_SIZE)); if (!fnic_dbg_prt->buffer) { kfree(fnic_dbg_prt); return -ENOMEM; } memset((void *)fnic_dbg_prt->buffer, 0, 3 * (fnic_fc_trace_max_pages * PAGE_SIZE)); fnic_dbg_prt->buffer_len = fnic_fc_trace_get_data(fnic_dbg_prt, *rdata_ptr); } file->private_data = fnic_dbg_prt; return 0; }