Skip to content

USB 3.0 Error "Failed to Submit Transfer Status=0xe2100001" on Linux#

Issue#

If you run a USB 3.0 camera on Linux and increased the transport layer MaxTransferSize parameter to a value bigger than 65536 Bytes, you may repeatedly get the following error message in the console:

Failed to submit transfer status=0xe2100001.

Increasing the transport layer MaxTransferSize parameter would usually reduce the CPU load, as it reduces the data overhead and causes less CPU interrupts. On Linux, the maximum size of the Maximum Transfer Size is around 3 MB.

The reason for this error message is that the kernel module "usbcore" doesn't have enough memory for the requested USB Request Block (URB) size. By default, the "usbcore" has about 16 MB of memory available.

The requested URB size is calculated as follows:

Maximum Transfer Size x Num Max Queued URBs

By default, Num Max Queued URBs is set to 64.

Solution#

In order to avoid the above error message, proceed as follows:

  1. Use the above-mentioned formula and reduce the NumMaxQueuedUrbs value in pylon Viewer or in your application until the error message disappeared.
  2. Allocate more memory for the kernel module "usbcore":

    1. In order to find out what the currently allocated memory is (in MBytes), execute the following command in the console:

      cat /sys/module/usbcore/parameters/usbfs_memory_mb
      
    2. In order to increase the memory (e.g., to 32 MB) for the current session only, log in as a root and execute:

      echo -n 32 > /sys/module/usbcore/parameters/usbfs_memory_mb
      

How to permanently increase the allocated memory depends on the given Linux distribution.

For Ubuntu with "grub2" one can do the following:

  1. Edit the file: /etc/default/grub.
  2. Change the variable: GRUB_CMDLINE_LINUX. For example:
    GRUB_CMDLINE_LINUX="usbcore.usbfs_memory_mb=32"
    
  3. Execute the following command as a root and reboot:
    update-grub
    

Back to Knowledge Articles