added errno.EINVAL check to fallocate

On some systems (eg Illumos), posix_fallocate() returns
EINVAL when the underlying filesystem doesn't support the
operation. On Linux, the fallocate() call returns
EOPNOTSUPP.

The need for this patch was revealed by Victor Rodionov
<victor.rodionov@nexenta.com>.

Change-Id: I06fa9d49e7ec4084135843b7e0c91948dc098d27
This commit is contained in:
John Dickinson 2012-09-12 08:46:50 -07:00
parent a7e6d44706
commit 2ca379d40f

View File

@ -170,7 +170,8 @@ def fallocate(fd, size):
# 1 means "FALLOC_FL_KEEP_SIZE", which means it pre-allocates invisibly
ret = _sys_fallocate(fd, 1, 0, ctypes.c_uint64(size))
err = ctypes.get_errno()
if ret and err not in (0, errno.ENOSYS, errno.EOPNOTSUPP):
if ret and err not in (0, errno.ENOSYS, errno.EOPNOTSUPP,
errno.EINVAL):
raise OSError(err, 'Unable to fallocate(%s)' % size)