Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/qdio: simplify debugfs code

There's no need for error handling, the debugfs core is smart enough to
deal with IS_ERR() internally.

This will also keep us from creating the debugfs files if the device
directory doesn't exist. Currently (because irq_ptr->debugfs_dev gets set
to NULL on error) the files would be placed into the debugfs root - without
any association to their parent device.

On teardown, use the debugfs_remove_recursive() helper to avoid keeping
track of each created file/directory.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>

authored by

Julian Wiedmann and committed by
Vasily Gorbik
d5d006fa 6e2a7b51

+9 -29
-2
drivers/s390/cio/qdio.h
··· 254 254 /* upper-layer program handler */ 255 255 qdio_handler_t (*handler); 256 256 257 - struct dentry *debugfs_q; 258 257 struct qdio_irq *irq_ptr; 259 258 struct sl *sl; 260 259 /* ··· 269 270 struct ccw_device *cdev; 270 271 struct list_head entry; /* list of thinint devices */ 271 272 struct dentry *debugfs_dev; 272 - struct dentry *debugfs_perf; 273 273 274 274 unsigned long int_parm; 275 275 struct subchannel_id schid;
+8 -26
drivers/s390/cio/qdio_debug.c
··· 284 284 .release = single_release, 285 285 }; 286 286 287 - static void setup_debugfs_entry(struct qdio_q *q) 287 + static void setup_debugfs_entry(struct dentry *parent, struct qdio_q *q) 288 288 { 289 289 char name[QDIO_DEBUGFS_NAME_LEN]; 290 290 291 291 snprintf(name, QDIO_DEBUGFS_NAME_LEN, "%s_%d", 292 292 q->is_input_q ? "input" : "output", 293 293 q->nr); 294 - q->debugfs_q = debugfs_create_file(name, 0444, 295 - q->irq_ptr->debugfs_dev, q, &qstat_fops); 296 - if (IS_ERR(q->debugfs_q)) 297 - q->debugfs_q = NULL; 294 + debugfs_create_file(name, 0444, parent, q, &qstat_fops); 298 295 } 299 296 300 297 void qdio_setup_debug_entries(struct qdio_irq *irq_ptr, struct ccw_device *cdev) ··· 301 304 302 305 irq_ptr->debugfs_dev = debugfs_create_dir(dev_name(&cdev->dev), 303 306 debugfs_root); 304 - if (IS_ERR(irq_ptr->debugfs_dev)) 305 - irq_ptr->debugfs_dev = NULL; 306 - 307 - irq_ptr->debugfs_perf = debugfs_create_file("statistics", 308 - S_IFREG | S_IRUGO | S_IWUSR, 309 - irq_ptr->debugfs_dev, irq_ptr, 310 - &debugfs_perf_fops); 311 - if (IS_ERR(irq_ptr->debugfs_perf)) 312 - irq_ptr->debugfs_perf = NULL; 307 + debugfs_create_file("statistics", S_IFREG | S_IRUGO | S_IWUSR, 308 + irq_ptr->debugfs_dev, irq_ptr, &debugfs_perf_fops); 313 309 314 310 for_each_input_queue(irq_ptr, q, i) 315 - setup_debugfs_entry(q); 311 + setup_debugfs_entry(irq_ptr->debugfs_dev, q); 316 312 for_each_output_queue(irq_ptr, q, i) 317 - setup_debugfs_entry(q); 313 + setup_debugfs_entry(irq_ptr->debugfs_dev, q); 318 314 } 319 315 320 316 void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr) 321 317 { 322 - struct qdio_q *q; 323 - int i; 324 - 325 - for_each_input_queue(irq_ptr, q, i) 326 - debugfs_remove(q->debugfs_q); 327 - for_each_output_queue(irq_ptr, q, i) 328 - debugfs_remove(q->debugfs_q); 329 - debugfs_remove(irq_ptr->debugfs_perf); 330 - debugfs_remove(irq_ptr->debugfs_dev); 318 + debugfs_remove_recursive(irq_ptr->debugfs_dev); 331 319 } 332 320 333 321 int __init qdio_debug_init(void) ··· 334 352 void qdio_debug_exit(void) 335 353 { 336 354 qdio_clear_dbf_list(); 337 - debugfs_remove(debugfs_root); 355 + debugfs_remove_recursive(debugfs_root); 338 356 debug_unregister(qdio_dbf_setup); 339 357 debug_unregister(qdio_dbf_error); 340 358 }
+1 -1
drivers/s390/cio/qdio_setup.c
··· 461 461 memset(&irq_ptr->ssqd_desc, 0, sizeof(irq_ptr->ssqd_desc)); 462 462 memset(&irq_ptr->perf_stat, 0, sizeof(irq_ptr->perf_stat)); 463 463 464 - irq_ptr->debugfs_dev = irq_ptr->debugfs_perf = NULL; 464 + irq_ptr->debugfs_dev = NULL; 465 465 irq_ptr->sch_token = irq_ptr->perf_stat_enabled = 0; 466 466 irq_ptr->state = QDIO_IRQ_STATE_INACTIVE; 467 467