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

Configure Feed

Select the types of activity you want to include in your feed.

driver core: simplify __device_set_driver_override() clearing logic

Currently, __device_set_driver_override() handles clearing the override
via empty string ("") and newline ("\n") in two separate paths. The "\n"
case also performs an unnecessary memory allocation and immediate free.

Simplify the logic by initializing 'new' to NULL and only allocating
memory if the string length remains non-zero after stripping the
trailing newline.

Reduce code size, improve readability, and avoid unnecessary memory
operations.

No functional change intended.

Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/driver-core/DGS82WWLXPJ0.2EH4VJSF30UR5@kernel.org/
Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com>
Link: https://patch.msgid.link/20260325090905.169000-1-hanguidong02@gmail.com
[ Narrow cp's scope to the newline handling block; use scoped_guard().
- Danilo ]
Signed-off-by: Danilo Krummrich <dakr@kernel.org>

authored by

Gui-Dong Han and committed by
Danilo Krummrich
3210dabb a1fa010b

+22 -30
+22 -30
drivers/base/dd.c
··· 383 383 384 384 int __device_set_driver_override(struct device *dev, const char *s, size_t len) 385 385 { 386 - const char *new, *old; 387 - char *cp; 386 + const char *new = NULL, *old; 388 387 389 388 if (!s) 390 389 return -EINVAL; ··· 403 404 */ 404 405 len = strlen(s); 405 406 406 - if (!len) { 407 - /* Empty string passed - clear override */ 408 - spin_lock(&dev->driver_override.lock); 407 + /* Handle trailing newline */ 408 + if (len) { 409 + char *cp; 410 + 411 + cp = strnchr(s, len, '\n'); 412 + if (cp) 413 + len = cp - s; 414 + } 415 + 416 + /* 417 + * If empty string or "\n" passed, new remains NULL, clearing 418 + * the driver_override.name. 419 + */ 420 + if (len) { 421 + new = kstrndup(s, len, GFP_KERNEL); 422 + if (!new) 423 + return -ENOMEM; 424 + } 425 + 426 + scoped_guard(spinlock, &dev->driver_override.lock) { 409 427 old = dev->driver_override.name; 410 - dev->driver_override.name = NULL; 411 - spin_unlock(&dev->driver_override.lock); 412 - kfree(old); 413 - 414 - return 0; 415 - } 416 - 417 - cp = strnchr(s, len, '\n'); 418 - if (cp) 419 - len = cp - s; 420 - 421 - new = kstrndup(s, len, GFP_KERNEL); 422 - if (!new) 423 - return -ENOMEM; 424 - 425 - spin_lock(&dev->driver_override.lock); 426 - old = dev->driver_override.name; 427 - if (cp != s) { 428 428 dev->driver_override.name = new; 429 - spin_unlock(&dev->driver_override.lock); 430 - } else { 431 - /* "\n" passed - clear override */ 432 - dev->driver_override.name = NULL; 433 - spin_unlock(&dev->driver_override.lock); 434 - 435 - kfree(new); 436 429 } 430 + 437 431 kfree(old); 438 432 439 433 return 0;