You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================


ChangeSet@1.1414.4.1, 2003-11-08 23:13:29-02:00, acme@conectiva.com.br
  o LLC: make llc_frame_alloc take a net_device as an argument
  
  So as to set the newly created sk_buff ->dev member with it,
  that way we stop using dev_base->next, that is the wrong thing
  to do, as there may well be several interfaces being used with
  LLC. This was not such a big problem after all as most of the
  users of llc_alloc_frame were setting the correct dev, but this
  way code is reduced.
  
  This also fixes another bug in llc_station_ac_send_null_dsap_xid_c,
  that was not setting the skb->dev field.


 include/net/llc_sap.h |    3 -
 net/llc/llc_c_ac.c    |  121 +++++++++++++++++++-------------------------------
 net/llc/llc_s_ac.c    |    6 --
 net/llc/llc_sap.c     |    5 +-
 net/llc/llc_station.c |    8 +--
 5 files changed, 58 insertions(+), 85 deletions(-)


diff -Nru a/include/net/llc_sap.h b/include/net/llc_sap.h
--- a/include/net/llc_sap.h	Sat Nov 15 17:05:25 2003
+++ b/include/net/llc_sap.h	Sat Nov 15 17:05:25 2003
@@ -13,11 +13,12 @@
  */
 struct llc_sap;
 struct sk_buff;
+struct net_device;
 
 extern void llc_sap_state_process(struct llc_sap *sap, struct sk_buff *skb);
 extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb);
 extern void llc_save_primitive(struct sk_buff* skb, unsigned char prim);
-extern struct sk_buff *llc_alloc_frame(void);
+extern struct sk_buff *llc_alloc_frame(struct net_device *dev);
 
 extern void llc_build_and_send_test_pkt(struct llc_sap *sap,
 				        struct sk_buff *skb,
diff -Nru a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c
--- a/net/llc/llc_c_ac.c	Sat Nov 15 17:05:25 2003
+++ b/net/llc/llc_c_ac.c	Sat Nov 15 17:05:25 2003
@@ -215,13 +215,12 @@
 int llc_conn_ac_send_disc_cmd_p_set_x(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_CMD);
 		llc_pdu_init_as_disc_cmd(nskb, 1);
@@ -241,14 +240,13 @@
 int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		u8 f_bit;
 
-		nskb->dev = llc->dev;
 		llc_pdu_decode_pf_bit(skb, &f_bit);
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
@@ -268,14 +266,13 @@
 int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		u8 f_bit = 1;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_dm_rsp(nskb, f_bit);
@@ -294,14 +291,13 @@
 int llc_conn_ac_send_dm_rsp_f_set_f_flag(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		u8 f_bit = llc->f_flag;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_dm_rsp(nskb, f_bit);
@@ -330,11 +326,10 @@
 		llc_pdu_decode_pf_bit(skb, &f_bit);
 	else
 		f_bit = 0;
-	nskb = llc_alloc_frame();
+	nskb = llc_alloc_frame(llc->dev);
 	if (nskb) {
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS,
@@ -354,15 +349,14 @@
 int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
 		u8 f_bit = 0;
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		struct llc_pdu_sn *pdu = (struct llc_pdu_sn *)&llc->rx_pdu_hdr;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS,
@@ -384,15 +378,14 @@
 	u8 f_bit;
 	int rc = -ENOBUFS;
 	struct sk_buff *nskb;
+	struct llc_opt *llc = llc_sk(sk);
 
 	llc_pdu_decode_pf_bit(skb, &f_bit);
-	nskb = llc_alloc_frame();
+	nskb = llc_alloc_frame(llc->dev);
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_frmr_rsp(nskb, pdu, f_bit, llc->vS,
@@ -496,13 +489,12 @@
 	u8 nr;
 	struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR);
@@ -532,13 +524,12 @@
 int llc_conn_ac_send_rej_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_CMD);
 		llc_pdu_init_as_rej_cmd(nskb, 1, llc->vR);
@@ -557,14 +548,13 @@
 int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
 		u8 f_bit = 1;
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR);
@@ -583,14 +573,13 @@
 int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		u8 f_bit = 0;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rej_rsp(nskb, f_bit, llc->vR);
@@ -609,13 +598,12 @@
 int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_CMD);
 		llc_pdu_init_as_rnr_cmd(nskb, 1, llc->vR);
@@ -634,14 +622,13 @@
 int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		u8 f_bit = 1;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR);
@@ -660,14 +647,13 @@
 int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
 		u8 f_bit = 0;
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rnr_rsp(nskb, f_bit, llc->vR);
@@ -698,13 +684,12 @@
 int llc_conn_ac_opt_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rnr_rsp(nskb, 0, llc->vR);
@@ -723,13 +708,12 @@
 int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_CMD);
 		llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR);
@@ -748,13 +732,12 @@
 int llc_conn_ac_send_ack_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_CMD);
 		llc_pdu_init_as_rr_cmd(nskb, 1, llc->vR);
@@ -773,14 +756,13 @@
 int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		u8 f_bit = 1;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR);
@@ -799,14 +781,13 @@
 int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 		u8 f_bit = 1;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rr_rsp(nskb, f_bit, llc->vR);
@@ -825,13 +806,12 @@
 int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR);
@@ -850,13 +830,12 @@
 int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rr_rsp(nskb, 0, llc->vR);
@@ -885,8 +864,8 @@
 int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
 	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
 		struct llc_sap *sap = llc->sap;
@@ -894,7 +873,6 @@
 
 		if (llc->dev->flags & IFF_LOOPBACK)
 			dmac = llc->dev->dev_addr;
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_CMD);
 		llc_pdu_init_as_sabme_cmd(nskb, 1);
@@ -914,13 +892,12 @@
 int llc_conn_ac_send_ua_rsp_f_set_f_flag(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_ua_rsp(nskb, llc->f_flag);
@@ -940,14 +917,13 @@
 {
 	u8 f_bit;
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	llc_pdu_decode_pf_bit(skb, &f_bit);
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_ua_rsp(nskb, f_bit);
@@ -1094,13 +1070,12 @@
 int llc_conn_ac_send_rr_rsp_f_set_ackpf(struct sock *sk, struct sk_buff *skb)
 {
 	int rc = -ENOBUFS;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct llc_opt *llc = llc_sk(sk);
+	struct sk_buff *nskb = llc_alloc_frame(llc->dev);
 
 	if (nskb) {
-		struct llc_opt *llc = llc_sk(sk);
 		struct llc_sap *sap = llc->sap;
 
-		nskb->dev = llc->dev;
 		llc_pdu_header_init(nskb, LLC_PDU_TYPE_S, sap->laddr.lsap,
 				    llc->daddr.lsap, LLC_PDU_RSP);
 		llc_pdu_init_as_rr_rsp(nskb, llc->ack_pf, llc->vR);
diff -Nru a/net/llc/llc_s_ac.c b/net/llc/llc_s_ac.c
--- a/net/llc/llc_s_ac.c	Sat Nov 15 17:05:25 2003
+++ b/net/llc/llc_s_ac.c	Sat Nov 15 17:05:25 2003
@@ -103,10 +103,9 @@
 	llc_pdu_decode_sa(skb, mac_da);
 	llc_pdu_decode_da(skb, mac_sa);
 	llc_pdu_decode_ssap(skb, &dsap);
-	nskb = llc_alloc_frame();
+	nskb = llc_alloc_frame(skb->dev);
 	if (!nskb)
 		goto out;
-	nskb->dev = skb->dev;
 	llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap,
 			    LLC_PDU_RSP);
 	llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 0);
@@ -149,10 +148,9 @@
 	llc_pdu_decode_sa(skb, mac_da);
 	llc_pdu_decode_da(skb, mac_sa);
 	llc_pdu_decode_ssap(skb, &dsap);
-	nskb = llc_alloc_frame();
+	nskb = llc_alloc_frame(skb->dev);
 	if (!nskb)
 		goto out;
-	nskb->dev = skb->dev;
 	llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap,
 			    LLC_PDU_RSP);
 	llc_pdu_init_as_test_rsp(nskb, skb);
diff -Nru a/net/llc/llc_sap.c b/net/llc/llc_sap.c
--- a/net/llc/llc_sap.c	Sat Nov 15 17:05:25 2003
+++ b/net/llc/llc_sap.c	Sat Nov 15 17:05:25 2003
@@ -26,11 +26,12 @@
 
 /**
  *	llc_alloc_frame - allocates sk_buff for frame
+ *	@dev: network device this skb will be sent over
  *
  *	Allocates an sk_buff for frame and initializes sk_buff fields.
  *	Returns allocated skb or %NULL when out of memory.
  */
-struct sk_buff *llc_alloc_frame(void)
+struct sk_buff *llc_alloc_frame(struct net_device *dev)
 {
 	struct sk_buff *skb = alloc_skb(128, GFP_ATOMIC);
 
@@ -38,7 +39,7 @@
 		skb_reserve(skb, 50);
 		skb->nh.raw   = skb->h.raw = skb->data;
 		skb->protocol = htons(ETH_P_802_2);
-		skb->dev      = dev_base->next;
+		skb->dev      = dev;
 		skb->mac.raw  = skb->head;
 	}
 	return skb;
diff -Nru a/net/llc/llc_station.c b/net/llc/llc_station.c
--- a/net/llc/llc_station.c	Sat Nov 15 17:05:25 2003
+++ b/net/llc/llc_station.c	Sat Nov 15 17:05:25 2003
@@ -249,7 +249,7 @@
 static int llc_station_ac_send_null_dsap_xid_c(struct sk_buff *skb)
 {
 	int rc = 1;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct sk_buff *nskb = llc_alloc_frame(skb->dev);
 
 	if (!nskb)
 		goto out;
@@ -270,12 +270,11 @@
 {
 	u8 mac_da[ETH_ALEN], dsap;
 	int rc = 1;
-	struct sk_buff* nskb = llc_alloc_frame();
+	struct sk_buff* nskb = llc_alloc_frame(skb->dev);
 
 	if (!nskb)
 		goto out;
 	rc = 0;
-	nskb->dev = skb->dev;
 	llc_pdu_decode_sa(skb, mac_da);
 	llc_pdu_decode_ssap(skb, &dsap);
 	llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP);
@@ -295,12 +294,11 @@
 {
 	u8 mac_da[ETH_ALEN], dsap;
 	int rc = 1;
-	struct sk_buff *nskb = llc_alloc_frame();
+	struct sk_buff *nskb = llc_alloc_frame(skb->dev);
 
 	if (!nskb)
 		goto out;
 	rc = 0;
-	nskb->dev = skb->dev;
 	llc_pdu_decode_sa(skb, mac_da);
 	llc_pdu_decode_ssap(skb, &dsap);
 	llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP);

===================================================================


This BitKeeper patch contains the following changesets:
1.1414.4.1
## Wrapped with gzip_uu ##


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
>>QO>//R35CIWZ:)9K\ZS6<XR8W3T'Q)S% X')@  
 
