svcrpc: implement O_NONBLOCK behavior for use-gss-proxy
Somebody noticed LTP was complaining about O_NONBLOCK opens of /proc/net/rpc/use-gss-proxy succeeding and then a following read hanging. I'm not convinced LTP really has any business opening random proc files and expecting them to behave a certain way. Maybe this isn't really a bug. But in any case the O_NONBLOCK behavior could be useful for someone that wants to test whether gss-proxy is up without waiting. Reported-by: Jan Stancek <jstancek@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
625cdd78d1
commit
b161c14440
1 changed files with 4 additions and 2 deletions
|
@ -1317,10 +1317,12 @@ static inline bool gssp_ready(struct sunrpc_net *sn)
|
|||
return false;
|
||||
}
|
||||
|
||||
static int wait_for_gss_proxy(struct net *net)
|
||||
static int wait_for_gss_proxy(struct net *net, struct file *file)
|
||||
{
|
||||
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
|
||||
if (file->f_flags & O_NONBLOCK && !gssp_ready(sn))
|
||||
return -EAGAIN;
|
||||
return wait_event_interruptible(sn->gssp_wq, gssp_ready(sn));
|
||||
}
|
||||
|
||||
|
@ -1362,7 +1364,7 @@ static ssize_t read_gssp(struct file *file, char __user *buf,
|
|||
size_t len;
|
||||
int ret;
|
||||
|
||||
ret = wait_for_gss_proxy(net);
|
||||
ret = wait_for_gss_proxy(net, file);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
Loading…
Reference in a new issue