+static void
+zpl_truncate_range(struct inode* ip, loff_t start, loff_t end)
+{
+ cred_t *cr = CRED();
+ flock64_t bf;
+
+ ASSERT3S(start, <=, end);
+
+ /*
+ * zfs_freesp() will interpret (len == 0) as meaning "truncate until
+ * the end of the file". We don't want that.
+ */
+ if (start == end)
+ return;
+
+ crhold(cr);
+
+ bf.l_type = F_WRLCK;
+ bf.l_whence = 0;
+ bf.l_start = start;
+ bf.l_len = end - start;
+ bf.l_pid = 0;
+ zfs_space(ip, F_FREESP, &bf, FWRITE, start, cr);
+
+ crfree(cr);
+}
+
+#ifdef HAVE_INODE_FALLOCATE
+static long
+zpl_fallocate(struct inode *ip, int mode, loff_t offset, loff_t len)
+{
+ return zpl_fallocate_common(ip, mode, offset, len);
+}
+#endif /* HAVE_INODE_FALLOCATE */
+
+