hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/ata/libata-transport.c
....@@ -1,6 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright 2008 ioogle, Inc. All rights reserved.
3
- * Released under GPL v2.
44 *
55 * Libata transport class.
66 *
....@@ -196,7 +196,7 @@
196196 { XFER_PIO_0, "XFER_PIO_0" },
197197 { XFER_PIO_SLOW, "XFER_PIO_SLOW" }
198198 };
199
-ata_bitfield_name_match(xfer,ata_xfer_names)
199
+ata_bitfield_name_search(xfer, ata_xfer_names)
200200
201201 /*
202202 * ATA Port attributes
....@@ -208,7 +208,7 @@
208208 { \
209209 struct ata_port *ap = transport_class_to_port(dev); \
210210 \
211
- return snprintf(buf, 20, format_string, cast ap->field); \
211
+ return scnprintf(buf, 20, format_string, cast ap->field); \
212212 }
213213
214214 #define ata_port_simple_attr(field, name, format_string, type) \
....@@ -301,7 +301,9 @@
301301 pm_runtime_enable(dev);
302302 pm_runtime_forbid(dev);
303303
304
- transport_add_device(dev);
304
+ error = transport_add_device(dev);
305
+ if (error)
306
+ goto tport_transport_add_err;
305307 transport_configure_device(dev);
306308
307309 error = ata_tlink_add(&ap->link);
....@@ -312,12 +314,12 @@
312314
313315 tport_link_err:
314316 transport_remove_device(dev);
317
+ tport_transport_add_err:
315318 device_del(dev);
316319
317320 tport_err:
318321 transport_destroy_device(dev);
319322 put_device(dev);
320
- ata_host_put(ap->host);
321323 return error;
322324 }
323325
....@@ -426,7 +428,9 @@
426428 goto tlink_err;
427429 }
428430
429
- transport_add_device(dev);
431
+ error = transport_add_device(dev);
432
+ if (error)
433
+ goto tlink_transport_err;
430434 transport_configure_device(dev);
431435
432436 ata_for_each_dev(ata_dev, link, ALL) {
....@@ -441,6 +445,7 @@
441445 ata_tdev_delete(ata_dev);
442446 }
443447 transport_remove_device(dev);
448
+ tlink_transport_err:
444449 device_del(dev);
445450 tlink_err:
446451 transport_destroy_device(dev);
....@@ -479,7 +484,7 @@
479484 { \
480485 struct ata_device *ata_dev = transport_class_to_dev(dev); \
481486 \
482
- return snprintf(buf, 20, format_string, cast ata_dev->field); \
487
+ return scnprintf(buf, 20, format_string, cast ata_dev->field); \
483488 }
484489
485490 #define ata_dev_simple_attr(field, format_string, type) \
....@@ -533,7 +538,7 @@
533538 if (ata_dev->class == ATA_DEV_PMP)
534539 return 0;
535540 for(i=0;i<ATA_ID_WORDS;i++) {
536
- written += snprintf(buf+written, 20, "%04x%c",
541
+ written += scnprintf(buf+written, 20, "%04x%c",
537542 ata_dev->id[i],
538543 ((i+1) & 7) ? ' ' : '\n');
539544 }
....@@ -552,7 +557,7 @@
552557 if (ata_dev->class != ATA_DEV_PMP)
553558 return 0;
554559 for(i=0;i<SATA_PMP_GSCR_DWORDS;i++) {
555
- written += snprintf(buf+written, 20, "%08x%c",
560
+ written += scnprintf(buf+written, 20, "%08x%c",
556561 ata_dev->gscr[i],
557562 ((i+1) & 3) ? ' ' : '\n');
558563 }
....@@ -581,7 +586,7 @@
581586 else
582587 mode = "unqueued";
583588
584
- return snprintf(buf, 20, "%s\n", mode);
589
+ return scnprintf(buf, 20, "%s\n", mode);
585590 }
586591
587592 static DEVICE_ATTR(trim, S_IRUGO, show_ata_dev_trim, NULL);
....@@ -678,7 +683,13 @@
678683 return error;
679684 }
680685
681
- transport_add_device(dev);
686
+ error = transport_add_device(dev);
687
+ if (error) {
688
+ device_del(dev);
689
+ ata_tdev_free(ata_dev);
690
+ return error;
691
+ }
692
+
682693 transport_configure_device(dev);
683694 return 0;
684695 }