diff --git a/bacula/src/findlib/find_one.c b/bacula/src/findlib/find_one.c
index 764a3e5..4293374 100644
--- a/bacula/src/findlib/find_one.c
+++ b/bacula/src/findlib/find_one.c
@@ -719,6 +719,7 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt,
        *   all the files in it.
        */
       errno = 0;
+      Dmsg1(50,"first pass dir - fadvise %s\n",link);
       if ((directory = opendir(fname)) == NULL) {
          ff_pkt->type = FT_NOOPEN;
          ff_pkt->ff_errno = errno;
@@ -730,6 +731,70 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt,
          free_dir_ff_pkt(dir_ff_pkt);
          return rtn_stat;
       }
+      /* JK patch posix_fadvise in here */ 
+      rtn_stat = 1;
+      while (!job_canceled(jcr)) {
+          char *p,*q;
+          int l,i;
+          FILE *fp;
+          struct stat fs; 
+
+          status = breaddir(directory, dname.addr());
+          if (status != 0) {
+              /* error or end of directory */
+              //          Dmsg1(99, "breaddir returned stat=%d\n", status);
+              break;
+          }
+          p = dname.c_str();
+          /* Skip `.', `..', and excluded file names.  */
+          if (p[0] == '\0' || (p[0] == '.' && (p[1] == '\0' ||
+                          (p[1] == '.' && p[2] == '\0')))) {
+              continue;
+          }
+          l = strlen(dname.c_str());
+          if (l + len >= link_len) {
+              link_len = len + l + 1;
+              link = (char *)brealloc(link, link_len + 1);
+          }
+         q = link + len;
+         for (i=0; i < l; i++) {
+            *q++ = *p++;
+         }
+         *q = 0;
+          if (!file_is_excluded(ff_pkt, link)) {
+              Dmsg1(50,"fadvise %s\n",link);
+              if(lstat(link,&fs) < 0){
+                  //fprintf(stderr,"Fail stat %s\n",link);
+                  return 0; /* Hopefully return error code */
+              }
+              if(!S_ISREG(fs.st_mode)){
+                continue; 
+              }   
+              fp = fopen(link,"r");
+              if(fp == NULL){
+                  //printf("1: Error while opening the file: %s\n",link);
+                   return 0; 
+                  exit(EXIT_FAILURE);
+              }
+              posix_fadvise(fileno(fp),0,1024*1024*1,POSIX_FADV_WILLNEED);
+              fclose(fp);
+          }
+      }
+      closedir(directory);
+
+      Dmsg1(50,"second pass dir - fadvise %s\n",fname);
+      if ((directory = opendir(fname)) == NULL) {
+          ff_pkt->type = FT_NOOPEN;
+          ff_pkt->ff_errno = errno;
+          rtn_stat = handle_file(jcr, ff_pkt, top_level);
+          if (ff_pkt->linked) {
+              ff_pkt->linked->FileIndex = ff_pkt->FileIndex;
+          }
+          free(link);
+          free_dir_ff_pkt(dir_ff_pkt);
+          return rtn_stat;
+      }
+
 
       /*
        * Process all files in this directory entry (recursing).
@@ -764,6 +829,8 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt,
             *q++ = *p++;
          }
          *q = 0;
+
+         Dmsg1(50,"reading files %s\n,",link);
          if (!file_is_excluded(ff_pkt, link)) {
             rtn_stat = find_one_file(jcr, ff_pkt, handle_file, link, our_device, false);
             if (ff_pkt->linked) {
