Mailing List Archive

[Question] Usage of ENOTSUPP error code
Hello experts,


I noticed many drivers return -ENOTSUPP on error.



I assume ENOTSUPP is defined in include/linux/errno.h
as follows:


/* Defined for the NFSv3 protocol */
#define EBADHANDLE 521 /* Illegal NFS file handle */
#define ENOTSYNC 522 /* Update synchronization mismatch */
#define EBADCOOKIE 523 /* Cookie is stale */
#define ENOTSUPP 524 /* Operation is not supported */
#define ETOOSMALL 525 /* Buffer or request is too small */
#define ESERVERFAULT 526 /* An untranslatable error occurred */
#define EBADTYPE 527 /* Type not supported by server */
#define EJUKEBOX 528 /* Request initiated, but will not complete
before timeout */
#define EIOCBQUEUED 529 /* iocb queued, will get completion event */


I also assume the comment "Defined for the NFSv3 protocol"
is valid for whole of this block.

If so, should ENOTSUPP be only used for NFS-related errors?

In fact, ENOTSUPP is used by various drivers
including non-network ones such as pinctrl, USB, etc.





--
Best Regards
Masahiro Yamada
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: [Question] Usage of ENOTSUPP error code [ In reply to ]
Masahiro Yamada wrote:
> I noticed many drivers return -ENOTSUPP on error.
>
> I assume ENOTSUPP is defined in include/linux/errno.h
> as follows:
>
> /* Defined for the NFSv3 protocol */
> ...
> #define ENOTSUPP 524 /* Operation is not supported */
>
> If so, should ENOTSUPP be only used for NFS-related errors?

There is typcially no such restriction.

However, the problem with ENOTSUPP is that it is not defined in
the uapi header, so it will not be known to user space programs.

> In fact, ENOTSUPP is used by various drivers
> including non-network ones such as pinctrl, USB, etc.

If it is possible that the error code shows up for user space, ENOTSUPP
should not be used. Alternatives would be something like ENOTSUP,
EOPNOTSUPP, ENOIOCTLCMD, ENOSYS, or EINVAL.


Regards,
Clemens
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: [Question] Usage of ENOTSUPP error code [ In reply to ]
Hi Clemens,

Thanks for your clarification.


2015-07-06 16:37 GMT+09:00 Clemens Ladisch <clemens@ladisch.de>:
> Masahiro Yamada wrote:
>> I noticed many drivers return -ENOTSUPP on error.
>>
>> I assume ENOTSUPP is defined in include/linux/errno.h
>> as follows:
>>
>> /* Defined for the NFSv3 protocol */
>> ...
>> #define ENOTSUPP 524 /* Operation is not supported */
>>
>> If so, should ENOTSUPP be only used for NFS-related errors?
>
> There is typcially no such restriction.


Maybe, shoulld such a confusing comment be deleted?


> However, the problem with ENOTSUPP is that it is not defined in
> the uapi header, so it will not be known to user space programs.
>
>> In fact, ENOTSUPP is used by various drivers
>> including non-network ones such as pinctrl, USB, etc.
>
> If it is possible that the error code shows up for user space, ENOTSUPP
> should not be used. Alternatives would be something like ENOTSUP,
> EOPNOTSUPP, ENOIOCTLCMD, ENOSYS, or EINVAL.
>

Oh dear, we have ENOTSUP as well as ENOTSUPP...
but, it looks like ENOTSUP is only defined by
arch/parisc/include/uapi/asm/errno.h,
so it is not globally available.

EOPNOTSUPP is also accompanied with a comment that implies it is
intended for network.


After all, I often use EINVAL when unsupported operations are requested.



--
Best Regards
Masahiro Yamada
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/