engines/glfs_async: add trim support

If available.

Signed-off-by: Jens Axboe <axboe@fb.com>
diff --git a/configure b/configure
index da637a9..de0fc89 100755
--- a/configure
+++ b/configure
@@ -1261,6 +1261,7 @@
 
 ##########################################
 # check for gfapi fadvise support
+if test "$gfapi" = "yes" ; then
 gf_fadvise="no"
 cat > $TMPC << EOF
 #include <glusterfs/api/glfs.h>
@@ -1273,11 +1274,29 @@
   return 0;
 }
 EOF
-
 if compile_prog "" "-lgfapi -lglusterfs" "gfapi"; then
   gf_fadvise="yes"
 fi
 echo "Gluster API use fadvise       $gf_fadvise"
+fi
+
+##########################################
+# check for gfapi trim support
+gf_trim="no"
+if test "$gfapi" = "yes" ; then
+cat > $TMPC << EOF
+#include <glusterfs/api/glfs.h>
+
+int main(int argc, char **argv)
+{
+  return glfs_discard_async(NULL, 0, 0);
+}
+EOF
+if compile_prog "" "-lgfapi -lglusterfs" "gf trim"; then
+  gf_trim="yes"
+fi
+echo "Gluster API trim support      $gf_trim"
+fi
 
 ##########################################
 # Check if we support stckf on s390
@@ -1525,6 +1544,9 @@
 if test "$gf_fadvise" = "yes" ; then
   output_sym "CONFIG_GF_FADVISE"
 fi
+if test "$gf_trim" = "yes" ; then
+  output_sym "CONFIG_GF_TRIM"
+fi
 if test "$libhdfs" = "yes" ; then
   output_sym "CONFIG_LIBHDFS"
 fi
diff --git a/engines/glusterfs_async.c b/engines/glusterfs_async.c
index cf6ea70..f2b9818 100644
--- a/engines/glusterfs_async.c
+++ b/engines/glusterfs_async.c
@@ -120,6 +120,11 @@
 		r = glfs_pwrite_async(g->fd, io_u->xfer_buf, io_u->xfer_buflen,
 				      io_u->offset, 0, gf_async_cb,
 				      (void *)io_u);
+#if defined(CONFIG_GF_TRIM)
+	else if (io_u->ddir == DDIR_TRIM)
+		r = glfs_discard_async(g->fd, io_u->offset, io_u->xfer_buflen,
+				       gf_async_cb, io_u);
+#endif
 	else if (io_u->ddir == DDIR_SYNC) {
 		r = glfs_fsync_async(g->fd, gf_async_cb, (void *)io_u);
 	} else {