diff options
-rw-r--r-- | drivers/scsi/fcoe/fcoe_transport.c | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/drivers/scsi/fcoe/fcoe_transport.c b/drivers/scsi/fcoe/fcoe_transport.c index 258684101bfd..7b61d00f5c43 100644 --- a/drivers/scsi/fcoe/fcoe_transport.c +++ b/drivers/scsi/fcoe/fcoe_transport.c | |||
@@ -530,9 +530,6 @@ static int fcoe_transport_create(const char *buffer, struct kernel_param *kp) | |||
530 | struct fcoe_transport *ft = NULL; | 530 | struct fcoe_transport *ft = NULL; |
531 | enum fip_state fip_mode = (enum fip_state)(long)kp->arg; | 531 | enum fip_state fip_mode = (enum fip_state)(long)kp->arg; |
532 | 532 | ||
533 | if (!mutex_trylock(&ft_mutex)) | ||
534 | return restart_syscall(); | ||
535 | |||
536 | #ifdef CONFIG_LIBFCOE_MODULE | 533 | #ifdef CONFIG_LIBFCOE_MODULE |
537 | /* | 534 | /* |
538 | * Make sure the module has been initialized, and is not about to be | 535 | * Make sure the module has been initialized, and is not about to be |
@@ -543,6 +540,8 @@ static int fcoe_transport_create(const char *buffer, struct kernel_param *kp) | |||
543 | goto out_nodev; | 540 | goto out_nodev; |
544 | #endif | 541 | #endif |
545 | 542 | ||
543 | mutex_lock(&ft_mutex); | ||
544 | |||
546 | netdev = fcoe_if_to_netdev(buffer); | 545 | netdev = fcoe_if_to_netdev(buffer); |
547 | if (!netdev) { | 546 | if (!netdev) { |
548 | LIBFCOE_TRANSPORT_DBG("Invalid device %s.\n", buffer); | 547 | LIBFCOE_TRANSPORT_DBG("Invalid device %s.\n", buffer); |
@@ -586,10 +585,7 @@ out_putdev: | |||
586 | dev_put(netdev); | 585 | dev_put(netdev); |
587 | out_nodev: | 586 | out_nodev: |
588 | mutex_unlock(&ft_mutex); | 587 | mutex_unlock(&ft_mutex); |
589 | if (rc == -ERESTARTSYS) | 588 | return rc; |
590 | return restart_syscall(); | ||
591 | else | ||
592 | return rc; | ||
593 | } | 589 | } |
594 | 590 | ||
595 | /** | 591 | /** |
@@ -608,9 +604,6 @@ static int fcoe_transport_destroy(const char *buffer, struct kernel_param *kp) | |||
608 | struct net_device *netdev = NULL; | 604 | struct net_device *netdev = NULL; |
609 | struct fcoe_transport *ft = NULL; | 605 | struct fcoe_transport *ft = NULL; |
610 | 606 | ||
611 | if (!mutex_trylock(&ft_mutex)) | ||
612 | return restart_syscall(); | ||
613 | |||
614 | #ifdef CONFIG_LIBFCOE_MODULE | 607 | #ifdef CONFIG_LIBFCOE_MODULE |
615 | /* | 608 | /* |
616 | * Make sure the module has been initialized, and is not about to be | 609 | * Make sure the module has been initialized, and is not about to be |
@@ -621,6 +614,8 @@ static int fcoe_transport_destroy(const char *buffer, struct kernel_param *kp) | |||
621 | goto out_nodev; | 614 | goto out_nodev; |
622 | #endif | 615 | #endif |
623 | 616 | ||
617 | mutex_lock(&ft_mutex); | ||
618 | |||
624 | netdev = fcoe_if_to_netdev(buffer); | 619 | netdev = fcoe_if_to_netdev(buffer); |
625 | if (!netdev) { | 620 | if (!netdev) { |
626 | LIBFCOE_TRANSPORT_DBG("invalid device %s.\n", buffer); | 621 | LIBFCOE_TRANSPORT_DBG("invalid device %s.\n", buffer); |
@@ -645,11 +640,7 @@ out_putdev: | |||
645 | dev_put(netdev); | 640 | dev_put(netdev); |
646 | out_nodev: | 641 | out_nodev: |
647 | mutex_unlock(&ft_mutex); | 642 | mutex_unlock(&ft_mutex); |
648 | 643 | return rc; | |
649 | if (rc == -ERESTARTSYS) | ||
650 | return restart_syscall(); | ||
651 | else | ||
652 | return rc; | ||
653 | } | 644 | } |
654 | 645 | ||
655 | /** | 646 | /** |
@@ -667,9 +658,6 @@ static int fcoe_transport_disable(const char *buffer, struct kernel_param *kp) | |||
667 | struct net_device *netdev = NULL; | 658 | struct net_device *netdev = NULL; |
668 | struct fcoe_transport *ft = NULL; | 659 | struct fcoe_transport *ft = NULL; |
669 | 660 | ||
670 | if (!mutex_trylock(&ft_mutex)) | ||
671 | return restart_syscall(); | ||
672 | |||
673 | #ifdef CONFIG_LIBFCOE_MODULE | 661 | #ifdef CONFIG_LIBFCOE_MODULE |
674 | /* | 662 | /* |
675 | * Make sure the module has been initialized, and is not about to be | 663 | * Make sure the module has been initialized, and is not about to be |
@@ -680,6 +668,8 @@ static int fcoe_transport_disable(const char *buffer, struct kernel_param *kp) | |||
680 | goto out_nodev; | 668 | goto out_nodev; |
681 | #endif | 669 | #endif |
682 | 670 | ||
671 | mutex_lock(&ft_mutex); | ||
672 | |||
683 | netdev = fcoe_if_to_netdev(buffer); | 673 | netdev = fcoe_if_to_netdev(buffer); |
684 | if (!netdev) | 674 | if (!netdev) |
685 | goto out_nodev; | 675 | goto out_nodev; |
@@ -716,9 +706,6 @@ static int fcoe_transport_enable(const char *buffer, struct kernel_param *kp) | |||
716 | struct net_device *netdev = NULL; | 706 | struct net_device *netdev = NULL; |
717 | struct fcoe_transport *ft = NULL; | 707 | struct fcoe_transport *ft = NULL; |
718 | 708 | ||
719 | if (!mutex_trylock(&ft_mutex)) | ||
720 | return restart_syscall(); | ||
721 | |||
722 | #ifdef CONFIG_LIBFCOE_MODULE | 709 | #ifdef CONFIG_LIBFCOE_MODULE |
723 | /* | 710 | /* |
724 | * Make sure the module has been initialized, and is not about to be | 711 | * Make sure the module has been initialized, and is not about to be |
@@ -729,6 +716,8 @@ static int fcoe_transport_enable(const char *buffer, struct kernel_param *kp) | |||
729 | goto out_nodev; | 716 | goto out_nodev; |
730 | #endif | 717 | #endif |
731 | 718 | ||
719 | mutex_lock(&ft_mutex); | ||
720 | |||
732 | netdev = fcoe_if_to_netdev(buffer); | 721 | netdev = fcoe_if_to_netdev(buffer); |
733 | if (!netdev) | 722 | if (!netdev) |
734 | goto out_nodev; | 723 | goto out_nodev; |
@@ -743,10 +732,7 @@ out_putdev: | |||
743 | dev_put(netdev); | 732 | dev_put(netdev); |
744 | out_nodev: | 733 | out_nodev: |
745 | mutex_unlock(&ft_mutex); | 734 | mutex_unlock(&ft_mutex); |
746 | if (rc == -ERESTARTSYS) | 735 | return rc; |
747 | return restart_syscall(); | ||
748 | else | ||
749 | return rc; | ||
750 | } | 736 | } |
751 | 737 | ||
752 | /** | 738 | /** |