1 /* $Id$ */
2 /* routine drop i/o caches */
3 #define _FILE_OFFSET_BITS 64
4 #include "typesf2c.h"
5 #ifdef __linux__
6 #define _XOPEN_SOURCE 600
7 #include <sys/types.h>
8 #include <sys/stat.h>
9 #include <unistd.h>
10 #include <fcntl.h>
11 #endif
12 #if defined(POSIX_FADV_DONTNEED)
13 #include "ga.h"
14 #include "macdecls.h"
15
16 Integer fortchar_to_string(const char *, Integer, char *, const Integer);
17 void FATR util_fadvise(const char *, int);
18
util_fadvise_dontneed_(const char * fort_fname,int flen)19 void FATR util_fadvise_dontneed_(const char *fort_fname, int flen){
20 char buf[1024];
21 if (!fortchar_to_string(fort_fname, flen, buf, sizeof(buf)))
22 GA_Error("util_fadvise: fortchar_to_string failed for fname",0);
23
24 (void) FATR util_fadvise(buf, POSIX_FADV_DONTNEED);
25 }
26
util_fadvise_noreuse_(const char * fort_fname,int flen)27 void FATR util_fadvise_noreuse_(const char *fort_fname, int flen){
28 char buf[1024];
29 if (!fortchar_to_string(fort_fname, flen, buf, sizeof(buf)))
30 GA_Error("util_fadvise: fortchar_to_string failed for fname",0);
31
32 (void) FATR util_fadvise(buf, POSIX_FADV_NOREUSE);
33 }
34
35
36
util_fadvise(const char * buf,int mode)37 void FATR util_fadvise(const char *buf, int mode){
38
39 int fd = open(buf, O_RDWR);
40
41 // printf(" fadvise fd %d fname %s\n", fd, fort_fname);
42 struct stat fd_stat ;
43
44 if ( fstat( fd, &fd_stat ) < 0 ) {
45 perror( "Could not stat file: " );
46 return;
47 }
48 off_t offset = 0;
49 off_t length = fd_stat.st_size;
50
51
52 /* (void) fdatasync(fd);*/
53 if(posix_fadvise( fd, offset, length, mode)!=0) perror("fadvise");
54 close(fd);
55
56 }
57 #else
58 /* stubs */
util_fadvise_dontneed_(const char * fort_fname,int flen)59 void FATR util_fadvise_dontneed_(const char *fort_fname, int flen){
60 }
util_fadvise_noreuse_(const char * fort_fname,int flen)61 void FATR util_fadvise_noreuse_(const char *fort_fname, int flen){
62 }
63 #endif
64