Skip to content

Commit ebbe788

Browse files
author
Trond Myklebust
committed
SUNRPC: Don't return error values in sysfs read of closed files
Instead of returning an error value, which ends up being the return value for the read() system call, it is more elegant to simply return the error as a string value. Signed-off-by: Trond Myklebust <[email protected]>
1 parent 421ab1b commit ebbe788

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

net/sunrpc/sysfs.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,13 @@ static ssize_t rpc_sysfs_xprt_dstaddr_show(struct kobject *kobj,
9393
struct rpc_xprt *xprt = rpc_sysfs_xprt_kobj_get_xprt(kobj);
9494
ssize_t ret;
9595

96-
if (!xprt)
97-
return 0;
96+
if (!xprt) {
97+
ret = sprintf(buf, "<closed>\n");
98+
goto out;
99+
}
98100
ret = sprintf(buf, "%s\n", xprt->address_strings[RPC_DISPLAY_ADDR]);
99101
xprt_put(xprt);
102+
out:
100103
return ret;
101104
}
102105

@@ -106,10 +109,10 @@ static ssize_t rpc_sysfs_xprt_srcaddr_show(struct kobject *kobj,
106109
{
107110
struct rpc_xprt *xprt = rpc_sysfs_xprt_kobj_get_xprt(kobj);
108111
size_t buflen = PAGE_SIZE;
109-
ssize_t ret = -ENOTSOCK;
112+
ssize_t ret;
110113

111114
if (!xprt || !xprt_connected(xprt)) {
112-
ret = -ENOTCONN;
115+
ret = sprintf(buf, "<closed>\n");
113116
} else if (xprt->ops->get_srcaddr) {
114117
ret = xprt->ops->get_srcaddr(xprt, buf, buflen);
115118
if (ret > 0) {
@@ -118,8 +121,10 @@ static ssize_t rpc_sysfs_xprt_srcaddr_show(struct kobject *kobj,
118121
ret++;
119122
buf[ret] = '\0';
120123
}
121-
}
122-
}
124+
} else
125+
ret = sprintf(buf, "<closed>\n");
126+
} else
127+
ret = sprintf(buf, "<not a socket>\n");
123128
xprt_put(xprt);
124129
return ret;
125130
}
@@ -133,8 +138,8 @@ static ssize_t rpc_sysfs_xprt_info_show(struct kobject *kobj,
133138
ssize_t ret;
134139

135140
if (!xprt || !xprt_connected(xprt)) {
136-
xprt_put(xprt);
137-
return -ENOTCONN;
141+
ret = sprintf(buf, "<closed>\n");
142+
goto out;
138143
}
139144

140145
if (xprt->ops->get_srcport)
@@ -152,6 +157,7 @@ static ssize_t rpc_sysfs_xprt_info_show(struct kobject *kobj,
152157
xprt->backlog.qlen, xprt->main, srcport,
153158
atomic_long_read(&xprt->queuelen),
154159
xprt->address_strings[RPC_DISPLAY_PORT]);
160+
out:
155161
xprt_put(xprt);
156162
return ret;
157163
}
@@ -165,10 +171,7 @@ static ssize_t rpc_sysfs_xprt_state_show(struct kobject *kobj,
165171
int locked, connected, connecting, close_wait, bound, binding,
166172
closing, congested, cwnd_wait, write_space, offline, remove;
167173

168-
if (!xprt)
169-
return 0;
170-
171-
if (!xprt->state) {
174+
if (!(xprt && xprt->state)) {
172175
ret = sprintf(buf, "state=CLOSED\n");
173176
} else {
174177
locked = test_bit(XPRT_LOCKED, &xprt->state);

0 commit comments

Comments
 (0)