diff options
| author | Robert Richter <robert.richter@amd.com> | 2010-10-01 02:54:17 -0400 |
|---|---|---|
| committer | Robert Richter <robert.richter@amd.com> | 2010-10-01 02:54:17 -0400 |
| commit | ef70fcc0cd5d98f5e2df82c9e598b47f351d4f66 (patch) | |
| tree | b801ba4d7ebb1155df68d530df49444ffa6252cc /net/unix/af_unix.c | |
| parent | 4cbe75be5c6ae86bdc7daec864eeb2dfd66f48bb (diff) | |
| parent | 98d943b02f6f1b57787ff1aa6f34d019a407e3ee (diff) | |
Merge branch 'oprofile/urgent' into oprofile/core
Conflicts:
arch/arm/oprofile/common.c
Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'net/unix/af_unix.c')
| -rw-r--r-- | net/unix/af_unix.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 4414a18c63b4..0b39b2451ea5 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
| @@ -692,6 +692,7 @@ static int unix_autobind(struct socket *sock) | |||
| 692 | static u32 ordernum = 1; | 692 | static u32 ordernum = 1; |
| 693 | struct unix_address *addr; | 693 | struct unix_address *addr; |
| 694 | int err; | 694 | int err; |
| 695 | unsigned int retries = 0; | ||
| 695 | 696 | ||
| 696 | mutex_lock(&u->readlock); | 697 | mutex_lock(&u->readlock); |
| 697 | 698 | ||
| @@ -717,9 +718,17 @@ retry: | |||
| 717 | if (__unix_find_socket_byname(net, addr->name, addr->len, sock->type, | 718 | if (__unix_find_socket_byname(net, addr->name, addr->len, sock->type, |
| 718 | addr->hash)) { | 719 | addr->hash)) { |
| 719 | spin_unlock(&unix_table_lock); | 720 | spin_unlock(&unix_table_lock); |
| 720 | /* Sanity yield. It is unusual case, but yet... */ | 721 | /* |
| 721 | if (!(ordernum&0xFF)) | 722 | * __unix_find_socket_byname() may take long time if many names |
| 722 | yield(); | 723 | * are already in use. |
| 724 | */ | ||
| 725 | cond_resched(); | ||
| 726 | /* Give up if all names seems to be in use. */ | ||
| 727 | if (retries++ == 0xFFFFF) { | ||
| 728 | err = -ENOSPC; | ||
| 729 | kfree(addr); | ||
| 730 | goto out; | ||
| 731 | } | ||
| 723 | goto retry; | 732 | goto retry; |
| 724 | } | 733 | } |
| 725 | addr->hash ^= sk->sk_type; | 734 | addr->hash ^= sk->sk_type; |
