On Tue, Jun 15 2021, Christoph Hellwig <hch@xxxxxx> wrote: > EPROBE_DEFER is an internal kernel error code and it should not be leaked > to userspace via the bind_store() sysfs. Userspace doesn't have this > constant and cannot understand it. > > Further, it doesn't really make sense to have userspace trigger a deferred > probe via bind_store(), which could eventually succeed, while > simultaneously returning an error back. > > Resolve this by splitting driver_probe_device so that the version used > by the sysfs binding that turns EPROBE_DEFER into -EAGAIN, while the one > used for internally binding keeps the error code, and calls > driver_deferred_probe_add where needed. This also allows to nicely split > out the defer_all_probes / probe_count checks so that they actually allow > for full device_{block,unblock}_probing protection while not bothering > the sysfs bind case. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > --- > drivers/base/dd.c | 78 +++++++++++++++++++++++++---------------------- > 1 file changed, 42 insertions(+), 36 deletions(-) > Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx>