unsigned long vm_flags = vmf->vma->vm_flags;
        unsigned int mmap_miss;
 
+       /*
+        * If we have pre-content watches we need to disable readahead to make
+        * sure that we don't populate our mapping with 0 filled pages that we
+        * never emitted an event for.
+        */
+       if (unlikely(FMODE_FSNOTIFY_HSM(file->f_mode)))
+               return fpin;
+
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
        /* Use the readahead code, even if readahead is disabled */
        if ((vm_flags & VM_HUGEPAGE) && HPAGE_PMD_ORDER <= MAX_PAGECACHE_ORDER) {
        struct file *fpin = NULL;
        unsigned int mmap_miss;
 
+       /* See comment in do_sync_mmap_readahead. */
+       if (unlikely(FMODE_FSNOTIFY_HSM(file->f_mode)))
+               return fpin;
+
        /* If we don't want any read-ahead, don't bother */
        if (vmf->vma->vm_flags & VM_RAND_READ || !ra->ra_pages)
                return fpin;
 
 #include <linux/blk-cgroup.h>
 #include <linux/fadvise.h>
 #include <linux/sched/mm.h>
+#include <linux/fsnotify.h>
 
 #include "internal.h"
 
        unsigned long max_pages, contig_count;
        pgoff_t prev_index, miss;
 
+       /*
+        * If we have pre-content watches we need to disable readahead to make
+        * sure that we don't find 0 filled pages in cache that we never emitted
+        * events for. Filesystems supporting HSM must make sure to not call
+        * this function with ractl->file unset for files handled by HSM.
+        */
+       if (ractl->file && unlikely(FMODE_FSNOTIFY_HSM(ractl->file->f_mode)))
+               return;
+
        /*
         * Even if readahead is disabled, issue this request as readahead
         * as we'll need it to satisfy the requested range. The forced
        if (!ra->ra_pages)
                return;
 
+       /* See the comment in page_cache_sync_ra. */
+       if (ractl->file && unlikely(FMODE_FSNOTIFY_HSM(ractl->file->f_mode)))
+               return;
+
        /*
         * Same bit is used for PG_readahead and PG_reclaim.
         */