]> git.proxmox.com Git - mirror_spl-debian.git/blobdiff - module/spl/spl-vnode.c
RHEL 6.4 compat, fallocate()
[mirror_spl-debian.git] / module / spl / spl-vnode.c
index 0ecd9addfa06f3d184c0cf60a794be07fdd28289..d8da9814b75a9b33714e8de8cb42950682ccaddb 100644 (file)
@@ -654,13 +654,15 @@ int vn_space(vnode_t *vp, int cmd, struct flock *bfp, int flag,
        ASSERT(bfp->l_start >= 0 && bfp->l_len > 0);
 
 #ifdef FALLOC_FL_PUNCH_HOLE
-       if (vp->v_file->f_op->fallocate) {
-               error = -vp->v_file->f_op->fallocate(vp->v_file,
-                   FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE,
-                   bfp->l_start, bfp->l_len);
-               if (!error)
-                       SRETURN(0);
-       }
+       /*
+        * When supported by the underlying file system preferentially
+        * use the fallocate() callback to preallocate the space.
+        */
+       error = -spl_filp_fallocate(vp->v_file,
+           FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE,
+           bfp->l_start, bfp->l_len);
+       if (error == 0)
+               SRETURN(0);
 #endif
 
 #ifdef HAVE_INODE_TRUNCATE_RANGE