mirror of https://github.com/openzfs/zfs.git
Positive Solaris ioctl return codes need to be negated for use by libc
This commit is contained in:
parent
3c9ce2bf69
commit
7064b767c2
|
@ -63,12 +63,19 @@ mod_generic_ioctl(struct inode *ino, struct file *file,
|
||||||
|
|
||||||
di = get_dev_info(MKDEV(imajor(ino), iminor(ino)));
|
di = get_dev_info(MKDEV(imajor(ino), iminor(ino)));
|
||||||
if (di == NULL)
|
if (di == NULL)
|
||||||
return EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
rc = di->di_ops->devo_cb_ops->cb_ioctl(di->di_dev,
|
rc = di->di_ops->devo_cb_ops->cb_ioctl(di->di_dev,
|
||||||
(int)cmd, (intptr_t)arg,
|
(int)cmd, (intptr_t)arg,
|
||||||
flags, cr, &rvalp);
|
flags, cr, &rvalp);
|
||||||
return rc;
|
/*
|
||||||
|
* The Solaris the kernel returns positive error codes to indicate
|
||||||
|
* a failure. Under linux the kernel is expected to return a
|
||||||
|
* small negative value which is trapped by libc and used to
|
||||||
|
* set errno correctly. For this reason we negate the Solaris
|
||||||
|
* return code to ensure errno gets set correctly.
|
||||||
|
*/
|
||||||
|
return -rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
|
|
Loading…
Reference in New Issue