ALSA: firewire: Use common error handling code in snd_motu_stream_start_duplex()
authorMarkus Elfring <elfring@users.sourceforge.net>
Wed, 6 Sep 2017 11:30:14 +0000 (13:30 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 12 Sep 2017 07:23:26 +0000 (09:23 +0200)
Add a jump target so that a bit of exception handling can be better reused
at the end of this function.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/motu/motu-stream.c

index dc5541c8b35927bb28875eef10d4c40989d9cf87..73e7a5e527fc02445cab88df91f81c4ceae883f2 100644 (file)
@@ -253,24 +253,21 @@ int snd_motu_stream_start_duplex(struct snd_motu *motu, unsigned int rate)
                if (err < 0) {
                        dev_err(&motu->unit->device,
                                "fail to start isochronous comm: %d\n", err);
-                       stop_both_streams(motu);
-                       return err;
+                       goto stop_streams;
                }
 
                err = start_isoc_ctx(motu, &motu->rx_stream);
                if (err < 0) {
                        dev_err(&motu->unit->device,
                                "fail to start IT context: %d\n", err);
-                       stop_both_streams(motu);
-                       return err;
+                       goto stop_streams;
                }
 
                err = protocol->switch_fetching_mode(motu, true);
                if (err < 0) {
                        dev_err(&motu->unit->device,
                                "fail to enable frame fetching: %d\n", err);
-                       stop_both_streams(motu);
-                       return err;
+                       goto stop_streams;
                }
        }
 
@@ -281,12 +278,15 @@ int snd_motu_stream_start_duplex(struct snd_motu *motu, unsigned int rate)
                        dev_err(&motu->unit->device,
                                "fail to start IR context: %d", err);
                        amdtp_stream_stop(&motu->rx_stream);
-                       stop_both_streams(motu);
-                       return err;
+                       goto stop_streams;
                }
        }
 
        return 0;
+
+stop_streams:
+       stop_both_streams(motu);
+       return err;
 }
 
 void snd_motu_stream_stop_duplex(struct snd_motu *motu)