FUJITA Tomonori wrote: > On Mon, 23 Feb 2009 19:51:25 +0200 > Boaz Harrosh <bharrosh at panasas.com> wrote: > >> usr/util.h redefines sync_file_range (as __sync_file_range) >> for old systems that don't have this defintion. Make these >> definitions conditional on __CONF_TGT_NO_SYNC_FILE_RANGE which >> should be set by a Makefile on very old systems. >> (Or a ./configure script can detect that automatically) >> >> Normally sync_file_range() definition is now taken from gcc >> headers. >> >> Signed-off-by: Boaz Harrosh <bharrosh at panasas.com> >> --- >> usr/bs_mmap.c | 2 +- >> usr/bs_rdwr.c | 2 +- >> usr/util.h | 6 ++++-- >> 3 files changed, 6 insertions(+), 4 deletions(-) > > Using "sync_file_range" does not work on a box having glibc supporting > sync_file_range properly, I think. > I don't understand? Are you saying that sync_file_range() is broken in glibc? On my new FC10 the source looks the same as yours. Do you have any info on what systems are broken and how? I will try to investigate this, any pointers will help Thanks. > >> diff --git a/usr/bs_mmap.c b/usr/bs_mmap.c >> index bb24f5e..f0037e8 100644 >> --- a/usr/bs_mmap.c >> +++ b/usr/bs_mmap.c >> @@ -60,7 +60,7 @@ static void bs_mmap_request(struct scsi_cmd *cmd) >> unsigned int flags = >> SYNC_FILE_RANGE_WAIT_BEFORE| SYNC_FILE_RANGE_WRITE; >> >> - ret = __sync_file_range(cmd->dev->fd, cmd->offset, length, flags); >> + ret = sync_file_range(cmd->dev->fd, cmd->offset, length, flags); >> if (ret) { >> result = SAM_STAT_CHECK_CONDITION; >> key = MEDIUM_ERROR; >> diff --git a/usr/bs_rdwr.c b/usr/bs_rdwr.c >> index 65a6136..73adf57 100644 >> --- a/usr/bs_rdwr.c >> +++ b/usr/bs_rdwr.c >> @@ -51,7 +51,7 @@ static void bs_sync_sync_range(struct scsi_cmd *cmd, uint32_t length, >> int ret; >> unsigned int flags = SYNC_FILE_RANGE_WAIT_BEFORE| SYNC_FILE_RANGE_WRITE; >> >> - ret = __sync_file_range(cmd->dev->fd, cmd->offset, length, flags); >> + ret = sync_file_range(cmd->dev->fd, cmd->offset, length, flags); >> if (ret) >> set_medium_error(result, key, asc); >> } >> diff --git a/usr/util.h b/usr/util.h >> index 794c70b..11afbaa 100644 >> --- a/usr/util.h >> +++ b/usr/util.h >> @@ -99,6 +99,8 @@ extern unsigned long pagesize, pageshift; >> * most of the distributions aren't shipped with it yet. >> */ >> >> +#ifdef __CONF_TGT_NO_SYNC_FILE_RANGE >> + >> #ifndef __NR_sync_file_range >> #if defined(__i386) >> #define __NR_sync_file_range 314 >> @@ -119,15 +121,15 @@ extern unsigned long pagesize, pageshift; >> >> extern long int syscall(long int sysno, ...); >> >> -static inline int __sync_file_range(int fd, __off64_t offset, __off64_t bytes, >> +static inline int sync_file_range(int fd, __off64_t offset, __off64_t bytes, >> unsigned int flags) >> { >> int ret; >> - >> ret = syscall(__NR_sync_file_range, fd, offset, bytes, flags); >> if (ret == -EPERM) >> ret = fsync(fd); >> return ret; >> } >> +#endif /* def __CONF_TGT_NO_SYNC_FILE_RANGE */ >> >> #endif >> -- >> 1.6.0.6 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe stgt" in >> the body of a message to majordomo at vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe stgt" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html |