• Al Viro's avatar
    gadgetfs: get rid of flipping ->f_op in ep_config() · d4461a60
    Al Viro authored
    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: default avatarAl Viro <viro@zeniv.linux.org.uk>
    d4461a60
inode.c 50.8 KB