From d907f8b938aec9d8b57fdb15c241b98641b8b052 Mon Sep 17 00:00:00 2001 From: Dave Eddy Date: Mon, 23 Feb 2015 14:43:52 -0500 Subject: 5397 pfiles slow with many open sockets Reviewed by: Robert Mustacchi Reviewed by: Dan McDonald Approved by: Garrett D'Amore --- usr/src/lib/libproc/common/Pfdinfo.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'usr/src/lib/libproc/common/Pfdinfo.c') diff --git a/usr/src/lib/libproc/common/Pfdinfo.c b/usr/src/lib/libproc/common/Pfdinfo.c index 124439773b..27264091f8 100644 --- a/usr/src/lib/libproc/common/Pfdinfo.c +++ b/usr/src/lib/libproc/common/Pfdinfo.c @@ -134,10 +134,20 @@ load_fdinfo(struct ps_prochandle *P) info->pr_offset = pr_llseek(P, fd, 0, SEEK_CUR); /* attempt to determine the path to it */ - (void) snprintf(path, sizeof (path), - "%s/%d/path/%d", procfs_path, (int)P->pid, fd); - len = readlink(path, info->pr_path, - sizeof (info->pr_path) - 1); + switch (info->pr_mode & S_IFMT) { + case S_IFDOOR: + case S_IFSOCK: + /* not applicable */ + len = -1; + break; + default: + (void) snprintf(path, sizeof (path), + "%s/%d/path/%d", procfs_path, (int)P->pid, + fd); + len = readlink(path, info->pr_path, + sizeof (info->pr_path) - 1); + break; + } if (len < 0) { info->pr_path[0] = 0; -- cgit v1.2.3