From patchwork Fri Dec 17 19:50:09 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Dilger X-Patchwork-Id: 75972 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 5DE181007D3 for ; Sat, 18 Dec 2010 06:50:15 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751887Ab0LQTuM (ORCPT ); Fri, 17 Dec 2010 14:50:12 -0500 Received: from idcmail-mo2no.shaw.ca ([64.59.134.9]:50369 "EHLO idcmail-mo2no.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752282Ab0LQTuL (ORCPT ); Fri, 17 Dec 2010 14:50:11 -0500 Received: from pd5ml3no-ssvc.prod.shaw.ca ([10.0.153.148]) by pd5mo1no-svcs.prod.shaw.ca with ESMTP; 17 Dec 2010 12:50:10 -0700 X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.1 cv=EPI+Anp5axUU12/DJ58YCKzU/28JrKwJBM9MxN4j1qY= c=1 sm=1 a=MTGm_ih6OTUA:10 a=BLceEmwcHowA:10 a=c23vf5CSMVc0QQz9B4a6RA==:17 a=V-7os7pcnTc_J0fBJe4A:9 a=oa8WkvPUSbkPEqJpctYA:7 a=0qYjPycEgWWYKAENkBd5ac5uxLsA:4 a=HX-EqJCUnWX0frR8:21 a=jQaBvSGA4EALoCSQ:21 a=HpAAvcLHHh0Zw7uRqdWCyQ==:117 Received: from unknown (HELO cabot.adilger.int.com) ([68.147.195.121]) by pd5ml3no-dmz.prod.shaw.ca with ESMTP; 17 Dec 2010 12:50:10 -0700 From: Andreas Dilger To: tytso@mit.edu Cc: linux-ext4@vger.kernel.org, Andreas Dilger Subject: [PATCH] allow e4defrag build against old kernel headers Date: Fri, 17 Dec 2010 12:50:09 -0700 Message-Id: <1292615409-26697-2-git-send-email-adilger.kernel@dilger.ca> X-Mailer: git-send-email 1.7.2 In-Reply-To: <1292615409-26697-1-git-send-email-adilger.kernel@dilger.ca> References: <1292615409-26697-1-git-send-email-adilger.kernel@dilger.ca> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Building e2fsprogs with older userspace with old kernel headers may not define the __NR_fallocate and __NR_sync_file_range system calls, even if a newer kernel is installed on the system. Avoid e4defrag build failures for e2fsprogs on older systems, but may result in the e4defrag command failing at runtime due to the actual lack of these system calls, as opposed to just old kernel headers on a system running a new kernel. --- misc/e4defrag.c | 31 +++++++++++++++++++++++-------- 1 files changed, 23 insertions(+), 8 deletions(-) diff --git a/misc/e4defrag.c b/misc/e4defrag.c index 82e3868..d739da2 100644 --- a/misc/e4defrag.c +++ b/misc/e4defrag.c @@ -304,12 +304,6 @@ static int posix_fadvise(int fd, loff_t offset, size_t len, int advise) #ifndef HAVE_SYNC_FILE_RANGE #warning Using locally defined sync_file_range interface. -#ifndef __NR_sync_file_range -#ifndef __NR_sync_file_range2 /* ppc */ -#error Your kernel headers dont define __NR_sync_file_range -#endif -#endif - /* * sync_file_range() - Sync file region. * @@ -322,8 +316,19 @@ int sync_file_range(int fd, loff_t offset, loff_t length, unsigned int flag) { #ifdef __NR_sync_file_range return syscall(__NR_sync_file_range, fd, offset, length, flag); -#else +#elif defined(__NR_sync_file_range2) return syscall(__NR_sync_file_range2, fd, flag, offset, length); +#else + return fsync(fd); +#ifndef SYNC_FILE_RANGE_WAIT_BEFORE +#define SYNC_FILE_RANGE_WAIT_BEFORE 0 +#endif +#ifndef SYNC_FILE_RANGE_WRITE +#define SYNC_FILE_RANGE_WRITE 0 +#endif +#ifndef SYNC_FILE_RANGE_WAIT_AFTER +#define SYNC_FILE_RANGE_WAIT_AFTER 0 +#endif #endif } #endif /* ! HAVE_SYNC_FILE_RANGE */ @@ -332,7 +337,17 @@ int sync_file_range(int fd, loff_t offset, loff_t length, unsigned int flag) #warning Using locally defined fallocate syscall interface. #ifndef __NR_fallocate -#error Your kernel headers dont define __NR_fallocate +# if defined(__x86_64__) +# define __NR_fallocate 285 +# elif defined(__i386__) +# define __NR_fallocate 324 +# elif defined(__powerpc__) +# define __NR_fallocate 309 +# else +/* fallback position might be posix_fallocate(), but I suspect any kernel + * that doesn't have fallocate will also not have EXT4_IOC_MOVE_EXT */ +# error Your kernel headers dont define __NR_fallocate +# endif #endif /*