Mercurial > illumos > git > illumos-core
changeset 234:b44b1bff9406 onnv_20
6292940 sosctp_assoc() should return the reason of error
author | kcpoon |
---|---|
date | Mon, 25 Jul 2005 22:36:49 -0700 |
parents | c7d5dd0e7d50 |
children | e87a1ba1f4a2 |
files | usr/src/uts/common/fs/sockfs/socksctp.c usr/src/uts/common/fs/sockfs/socksctp.h usr/src/uts/common/fs/sockfs/socksctpsubr.c usr/src/uts/common/fs/sockfs/socksctpvnops.c |
diffstat | 4 files changed, 24 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/sockfs/socksctp.c Mon Jul 25 20:55:31 2005 -0700 +++ b/usr/src/uts/common/fs/sockfs/socksctp.c Mon Jul 25 22:36:49 2005 -0700 @@ -1389,9 +1389,7 @@ } so_unlock_single(so, SOLOCKED); } else { - ssa = sosctp_assoc(ss, aid); - if (ssa == NULL) { - error = EINVAL; + if ((error = sosctp_assoc(ss, aid, &ssa)) != 0) { eprintsoline(so, error); goto done; } @@ -1909,9 +1907,7 @@ * Otherwise set the default setting of a socket. */ if (id != 0) { - ssa = sosctp_assoc(ss, id); - if (ssa == NULL) { - error = EINVAL; + if ((error = sosctp_assoc(ss, id, &ssa)) != 0) { eprintsoline(so, error); goto done; } @@ -1943,8 +1939,8 @@ optlen); mutex_enter(&so->so_lock); for (aid = 1; aid < ss->ss_maxassoc; aid++) { - ssa = sosctp_assoc(ss, aid); - if (ssa == NULL) { + if ((error = sosctp_assoc(ss, aid, &ssa)) != 0) { + error = 0; continue; } mutex_exit(&so->so_lock);
--- a/usr/src/uts/common/fs/sockfs/socksctp.h Mon Jul 25 20:55:31 2005 -0700 +++ b/usr/src/uts/common/fs/sockfs/socksctp.h Mon Jul 25 22:36:49 2005 -0700 @@ -113,8 +113,8 @@ int type); extern void sosctp_pack_cmsg(const uchar_t *, struct nmsghdr *, int); -extern struct sctp_soassoc *sosctp_assoc(struct sctp_sonode *ss, - sctp_assoc_t id); +extern int sosctp_assoc(struct sctp_sonode *ss, sctp_assoc_t id, + struct sctp_soassoc **ssa); extern struct sctp_soassoc *sosctp_assoc_create(struct sctp_sonode *ss, int kmflags); extern void sosctp_assoc_free(struct sctp_sonode *ss, struct sctp_soassoc *ssa); @@ -146,7 +146,7 @@ #define SSA_REFHOLD(ssa) \ { \ - ASSERT(MUTEX_HELD(&ssa->ssa_sonode->ss_so.so_lock)); \ + ASSERT(MUTEX_HELD(&(ssa)->ssa_sonode->ss_so.so_lock)); \ ASSERT((ssa)->ssa_refcnt > 0); \ ++(ssa)->ssa_refcnt; \ dprint(3, ("ssa_refhold on %p %d (%s,%d)\n", (ssa), \
--- a/usr/src/uts/common/fs/sockfs/socksctpsubr.c Mon Jul 25 20:55:31 2005 -0700 +++ b/usr/src/uts/common/fs/sockfs/socksctpsubr.c Mon Jul 25 22:36:49 2005 -0700 @@ -136,29 +136,30 @@ * Convert a id into a pointer to sctp_sockassoc structure. * Increments refcnt. */ -struct sctp_soassoc * -sosctp_assoc(struct sctp_sonode *ss, sctp_assoc_t id) +int +sosctp_assoc(struct sctp_sonode *ss, sctp_assoc_t id, struct sctp_soassoc **ssa) { - struct sctp_soassoc *ssa; - + ASSERT(*ssa != NULL); ASSERT(MUTEX_HELD(&ss->ss_so.so_lock)); if ((uint32_t)id >= ss->ss_maxassoc) { - return (NULL); + *ssa = NULL; + return (EINVAL); } - if ((ssa = ss->ss_assocs[id].ssi_assoc) == NULL) { - return (NULL); + if ((*ssa = ss->ss_assocs[id].ssi_assoc) == NULL) { + return (EINVAL); } - if ((ssa->ssa_state & (SS_CANTSENDMORE|SS_CANTRCVMORE)) == + if (((*ssa)->ssa_state & (SS_CANTSENDMORE|SS_CANTRCVMORE)) == (SS_CANTSENDMORE|SS_CANTRCVMORE)) { /* * Disconnected connection, shouldn't be found anymore */ - return (NULL); + *ssa = NULL; + return (ESHUTDOWN); } - SSA_REFHOLD(ssa) + SSA_REFHOLD(*ssa) - return (ssa); + return (0); } /*
--- a/usr/src/uts/common/fs/sockfs/socksctpvnops.c Mon Jul 25 20:55:31 2005 -0700 +++ b/usr/src/uts/common/fs/sockfs/socksctpvnops.c Mon Jul 25 22:36:49 2005 -0700 @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -468,9 +468,9 @@ intval = STRUCT_FGET(opt, sopt_aid); mutex_enter(&so->so_lock); if ((so->so_type == SOCK_SEQPACKET) && intval) { - if ((ssa = sosctp_assoc(ss, intval)) == NULL) { + if ((error = sosctp_assoc(ss, intval, &ssa)) != 0) { mutex_exit(&so->so_lock); - return (EINVAL); + return (error); } conn = ssa->ssa_conn; ASSERT(conn != NULL); @@ -533,9 +533,9 @@ intval = STRUCT_FGET(opt, sopt_aid); mutex_enter(&so->so_lock); if (intval != 0) { - if ((ssa = sosctp_assoc(ss, intval)) == NULL) { + if ((error = sosctp_assoc(ss, intval, &ssa)) != 0) { mutex_exit(&so->so_lock); - return (EINVAL); + return (error); } conn = ssa->ssa_conn; ASSERT(conn != NULL);