From 2ca379d40f06d892fdf6e3430ccd8a78726e5626 Mon Sep 17 00:00:00 2001 From: John Dickinson Date: Wed, 12 Sep 2012 08:46:50 -0700 Subject: [PATCH] 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 . Change-Id: I06fa9d49e7ec4084135843b7e0c91948dc098d27 --- swift/common/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/swift/common/utils.py b/swift/common/utils.py index 0249bc661b..9ac4695a34 100644 --- a/swift/common/utils.py +++ b/swift/common/utils.py @@ -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)