From 8ca0d17bd716c0aa3f496714e0e304fc6b982ae3 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Mon, 20 Mar 2006 22:51:53 -0800 Subject: [DCCP] feat: Pass dccp_minisock ptr where only the minisock is used This is in preparation for having a dccp_minisock embedded into dccp_request_sock so that feature negotiation can be done prior to creating the full blown dccp_sock. Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: David S. Miller --- net/dccp/feat.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'net/dccp/feat.c') diff --git a/net/dccp/feat.c b/net/dccp/feat.c index b09064c..e3dd30d 100644 --- a/net/dccp/feat.c +++ b/net/dccp/feat.c @@ -19,10 +19,9 @@ #define DCCP_FEAT_SP_NOAGREE (-123) -int dccp_feat_change(struct sock *sk, u8 type, u8 feature, u8 *val, u8 len, - gfp_t gfp) +int dccp_feat_change(struct dccp_minisock *dmsk, u8 type, u8 feature, + u8 *val, u8 len, gfp_t gfp) { - struct dccp_minisock *dmsk = dccp_msk(sk); struct dccp_opt_pend *opt; dccp_pr_debug("feat change type=%d feat=%d\n", type, feature); @@ -307,9 +306,9 @@ static int dccp_feat_nn(struct sock *sk, u8 type, u8 feature, u8 *val, u8 len) return 0; } -static void dccp_feat_empty_confirm(struct sock *sk, u8 type, u8 feature) +static void dccp_feat_empty_confirm(struct dccp_minisock *dmsk, + u8 type, u8 feature) { - struct dccp_minisock *dmsk = dccp_msk(sk); /* XXX check if other confirms for that are queued and recycle slot */ struct dccp_opt_pend *opt = kzalloc(sizeof(*opt), GFP_ATOMIC); @@ -388,7 +387,7 @@ int dccp_feat_change_recv(struct sock *sk, u8 type, u8 feature, u8 *val, u8 len) * mandatory */ if (rc != DCCP_FEAT_SP_NOAGREE) - dccp_feat_empty_confirm(sk, type, feature); + dccp_feat_empty_confirm(dccp_msk(sk), type, feature); } /* generate the confirm [if required] */ @@ -456,9 +455,8 @@ int dccp_feat_confirm_recv(struct sock *sk, u8 type, u8 feature, EXPORT_SYMBOL_GPL(dccp_feat_confirm_recv); -void dccp_feat_clean(struct sock *sk) +void dccp_feat_clean(struct dccp_minisock *dmsk) { - struct dccp_minisock *dmsk = dccp_msk(sk); struct dccp_opt_pend *opt, *next; list_for_each_entry_safe(opt, next, &dmsk->dccpms_pending, @@ -537,49 +535,49 @@ out: return rc; out_clean: - dccp_feat_clean(newsk); + dccp_feat_clean(newdmsk); rc = -ENOMEM; goto out; } EXPORT_SYMBOL_GPL(dccp_feat_clone); -static int __dccp_feat_init(struct sock *sk, u8 type, u8 feat, u8 *val, u8 len) +static int __dccp_feat_init(struct dccp_minisock *dmsk, u8 type, u8 feat, + u8 *val, u8 len) { int rc = -ENOMEM; u8 *copy = kmalloc(len, GFP_KERNEL); if (copy != NULL) { memcpy(copy, val, len); - rc = dccp_feat_change(sk, type, feat, copy, len, GFP_KERNEL); + rc = dccp_feat_change(dmsk, type, feat, copy, len, GFP_KERNEL); if (rc) kfree(copy); } return rc; } -int dccp_feat_init(struct sock *sk) +int dccp_feat_init(struct dccp_minisock *dmsk) { - struct dccp_minisock *dmsk = dccp_msk(sk); int rc; INIT_LIST_HEAD(&dmsk->dccpms_pending); INIT_LIST_HEAD(&dmsk->dccpms_conf); /* CCID L */ - rc = __dccp_feat_init(sk, DCCPO_CHANGE_L, DCCPF_CCID, + rc = __dccp_feat_init(dmsk, DCCPO_CHANGE_L, DCCPF_CCID, &dmsk->dccpms_tx_ccid, 1); if (rc) goto out; /* CCID R */ - rc = __dccp_feat_init(sk, DCCPO_CHANGE_R, DCCPF_CCID, + rc = __dccp_feat_init(dmsk, DCCPO_CHANGE_R, DCCPF_CCID, &dmsk->dccpms_rx_ccid, 1); if (rc) goto out; /* Ack ratio */ - rc = __dccp_feat_init(sk, DCCPO_CHANGE_L, DCCPF_ACK_RATIO, + rc = __dccp_feat_init(dmsk, DCCPO_CHANGE_L, DCCPF_ACK_RATIO, &dmsk->dccpms_ack_ratio, 1); out: return rc; -- cgit v1.1