summaryrefslogtreecommitdiffstats
path: root/net/tipc/server.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2013-08-09 10:49:58 +0200
committerJan Kara <jack@suse.cz>2013-08-09 10:49:58 +0200
commit97a2847d064e2fdd2e3cd4ff14cad2f377f0677a (patch)
treee49ce105dc6febc25dc3ceba6070ea3998c7330c /net/tipc/server.c
parente99a03c6f50a699d63b5751e3e88f84e43b037a7 (diff)
parentd2d0395fd1778d4bf714adc5bfd23a5d748d7802 (diff)
Merge branch 'for-3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/jeffm/linux-reiserfs into for_next_testing
Reiserfs locking fixes.
Diffstat (limited to 'net/tipc/server.c')
-rw-r--r--net/tipc/server.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/net/tipc/server.c b/net/tipc/server.c
index 19da5abe0fa..fd3fa57a410 100644
--- a/net/tipc/server.c
+++ b/net/tipc/server.c
@@ -355,8 +355,12 @@ static int tipc_open_listening_sock(struct tipc_server *s)
return PTR_ERR(con);
sock = tipc_create_listen_sock(con);
- if (!sock)
+ if (!sock) {
+ idr_remove(&s->conn_idr, con->conid);
+ s->idr_in_use--;
+ kfree(con);
return -EINVAL;
+ }
tipc_register_callbacks(sock, con);
return 0;
@@ -563,9 +567,14 @@ int tipc_server_start(struct tipc_server *s)
kmem_cache_destroy(s->rcvbuf_cache);
return ret;
}
+ ret = tipc_open_listening_sock(s);
+ if (ret < 0) {
+ tipc_work_stop(s);
+ kmem_cache_destroy(s->rcvbuf_cache);
+ return ret;
+ }
s->enabled = 1;
-
- return tipc_open_listening_sock(s);
+ return ret;
}
void tipc_server_stop(struct tipc_server *s)