gadgetfs: get rid of flipping ->f_op in ep_config()
authorAl Viro <viro@ZenIV.linux.org.uk>
Tue, 3 Mar 2015 08:39:34 +0000 (08:39 +0000)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 8 Mar 2015 17:33:50 +0000 (13:33 -0400)
commitd4461a602cf39c59f32817162539f4e723621865
tree137d043fa8a0be030396b321e54be8d19135c174
parent7fe3976e0f3ab26f8ffd9430d3d2a19a70f2c8d2
gadgetfs: get rid of flipping ->f_op in ep_config()

Final methods start with get_ready_ep(), which will fail unless we have
->state == STATE_EP_ENABLED.  So they'd be failing just fine until that
first write() anyway.  Let's do the following:
* get_ready_ep() gets a new argument - true when called from
ep_write_iter(), false otherwise.
* make it quiet when it finds STATE_EP_READY (no printk, that is;
the case won't be impossible after that change).
* when that new argument is true, treat STATE_EP_READY the same
way as STATE_EP_ENABLED (i.e. return zero and do not unlock).
* in ep_write_iter(), after success of get_ready_ep() turn
if (!usb_endpoint_dir_in(&epdata->desc)) {
into
if (epdata->state == STATE_EP_ENABLED &&
    !usb_endpoint_dir_in(&epdata->desc)) {
- that logics only applies after config.
* have ep_config() take kernel-side buffer (i.e. use memcpy()
instead of copy_from_user() in there) and in the "let's call ep_io or
ep_aio" (again, in ep_write_iter()) add "... or ep_config() in case it's
not configured yet"

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/usb/gadget/legacy/inode.c