diff mbox series

[net-next] net: lapbether: Consider it successful if (dis)connecting when already (dis)connected

Message ID 20201208225044.5522-1-xie.he.0141@gmail.com (mailing list archive)
State Accepted
Delegated to: Netdev Maintainers
Headers show
Series [net-next] net: lapbether: Consider it successful if (dis)connecting when already (dis)connected | expand

Checks

Context Check Description
netdev/cover_letter success Link
netdev/fixes_present success Link
netdev/patch_count success Link
netdev/tree_selection success Clearly marked for net-next
netdev/subject_prefix success Link
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Link
netdev/module_param success Was 0 now: 0
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/verify_fixes success Link
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 28 lines checked
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/header_inline success Link
netdev/stable success Stable not CCed

Commit Message

Xie He Dec. 8, 2020, 10:50 p.m. UTC
When the upper layer instruct us to connect (or disconnect), but we have
already connected (or disconnected), consider this operation successful
rather than failed.

This can help the upper layer to correct its record about whether we are
connected or not here in layer 2.

The upper layer may not have the correct information about whether we are
connected or not. This can happen if this driver has already been running
for some time when the "x25" module gets loaded.

Another X.25 driver (hdlc_x25) is already doing this, so we make this
driver do this, too.

Cc: Martin Schiller <ms@dev.tdt.de>
Signed-off-by: Xie He <xie.he.0141@gmail.com>
---
 drivers/net/wan/lapbether.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

Comments

Martin Schiller Dec. 10, 2020, 6:41 a.m. UTC | #1
On 2020-12-08 23:50, Xie He wrote:
> When the upper layer instruct us to connect (or disconnect), but we 
> have
> already connected (or disconnected), consider this operation successful
> rather than failed.
> 
> This can help the upper layer to correct its record about whether we 
> are
> connected or not here in layer 2.
> 
> The upper layer may not have the correct information about whether we 
> are
> connected or not. This can happen if this driver has already been 
> running
> for some time when the "x25" module gets loaded.
> 
> Another X.25 driver (hdlc_x25) is already doing this, so we make this
> driver do this, too.

Looks good to me.

Acked-by: Martin Schiller <ms@dev.tdt.de>

> 
> Cc: Martin Schiller <ms@dev.tdt.de>
> Signed-off-by: Xie He <xie.he.0141@gmail.com>
> ---
>  drivers/net/wan/lapbether.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
> index b6be2454b8bd..605fe555e157 100644
> --- a/drivers/net/wan/lapbether.c
> +++ b/drivers/net/wan/lapbether.c
> @@ -55,6 +55,9 @@ struct lapbethdev {
> 
>  static LIST_HEAD(lapbeth_devices);
> 
> +static void lapbeth_connected(struct net_device *dev, int reason);
> +static void lapbeth_disconnected(struct net_device *dev, int reason);
> +
>  /* 
> ------------------------------------------------------------------------ 
> */
> 
>  /*
> @@ -167,11 +170,17 @@ static netdev_tx_t lapbeth_xmit(struct sk_buff 
> *skb,
>  	case X25_IFACE_DATA:
>  		break;
>  	case X25_IFACE_CONNECT:
> -		if ((err = lapb_connect_request(dev)) != LAPB_OK)
> +		err = lapb_connect_request(dev);
> +		if (err == LAPB_CONNECTED)
> +			lapbeth_connected(dev, LAPB_OK);
> +		else if (err != LAPB_OK)
>  			pr_err("lapb_connect_request error: %d\n", err);
>  		goto drop;
>  	case X25_IFACE_DISCONNECT:
> -		if ((err = lapb_disconnect_request(dev)) != LAPB_OK)
> +		err = lapb_disconnect_request(dev);
> +		if (err == LAPB_NOTCONNECTED)
> +			lapbeth_disconnected(dev, LAPB_OK);
> +		else if (err != LAPB_OK)
>  			pr_err("lapb_disconnect_request err: %d\n", err);
>  		fallthrough;
>  	default:
David Miller Dec. 10, 2020, 9:19 p.m. UTC | #2
From: Xie He <xie.he.0141@gmail.com>
Date: Tue,  8 Dec 2020 14:50:44 -0800

> When the upper layer instruct us to connect (or disconnect), but we have
> already connected (or disconnected), consider this operation successful
> rather than failed.
> 
> This can help the upper layer to correct its record about whether we are
> connected or not here in layer 2.
> 
> The upper layer may not have the correct information about whether we are
> connected or not. This can happen if this driver has already been running
> for some time when the "x25" module gets loaded.
> 
> Another X.25 driver (hdlc_x25) is already doing this, so we make this
> driver do this, too.
> 
> Cc: Martin Schiller <ms@dev.tdt.de>
> Signed-off-by: Xie He <xie.he.0141@gmail.com>

Applied, thank you.
diff mbox series

Patch

diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
index b6be2454b8bd..605fe555e157 100644
--- a/drivers/net/wan/lapbether.c
+++ b/drivers/net/wan/lapbether.c
@@ -55,6 +55,9 @@  struct lapbethdev {
 
 static LIST_HEAD(lapbeth_devices);
 
+static void lapbeth_connected(struct net_device *dev, int reason);
+static void lapbeth_disconnected(struct net_device *dev, int reason);
+
 /* ------------------------------------------------------------------------ */
 
 /*
@@ -167,11 +170,17 @@  static netdev_tx_t lapbeth_xmit(struct sk_buff *skb,
 	case X25_IFACE_DATA:
 		break;
 	case X25_IFACE_CONNECT:
-		if ((err = lapb_connect_request(dev)) != LAPB_OK)
+		err = lapb_connect_request(dev);
+		if (err == LAPB_CONNECTED)
+			lapbeth_connected(dev, LAPB_OK);
+		else if (err != LAPB_OK)
 			pr_err("lapb_connect_request error: %d\n", err);
 		goto drop;
 	case X25_IFACE_DISCONNECT:
-		if ((err = lapb_disconnect_request(dev)) != LAPB_OK)
+		err = lapb_disconnect_request(dev);
+		if (err == LAPB_NOTCONNECTED)
+			lapbeth_disconnected(dev, LAPB_OK);
+		else if (err != LAPB_OK)
 			pr_err("lapb_disconnect_request err: %d\n", err);
 		fallthrough;
 	default: