diff -Nur glib-2.26.1/gio/gfile.c glib-2.26.1_patched/gio/gfile.c
--- glib-2.26.1/gio/gfile.c	2010-11-12 15:52:52.000000000 +0200
+++ glib-2.26.1_patched/gio/gfile.c	2011-01-21 22:05:43.000000000 +0200
@@ -2865,7 +2865,19 @@
   const char *target;
   gboolean result;
 #ifdef HAVE_SPLICE
-  gboolean fallback = TRUE;
+  GFileInfo *fsinfo;
+  char *targetfstype;
+  
+  fsinfo = g_file_query_filesystem_info (destination,
+                G_FILE_ATTRIBUTE_FILESYSTEM_TYPE,
+                cancellable,
+                error);
+  if (fsinfo != NULL) {
+    targetfstype = g_strdup (g_file_info_get_attribute_string (fsinfo, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE));
+    g_object_unref (fsinfo);
+  }
+  
+  gboolean fallback = (targetfstype == NULL || g_strcmp0(targetfstype,"reiser4") == 0);
 #endif
 
   /* need to know the file type */
@@ -2935,6 +2947,7 @@
     }
 
 #ifdef HAVE_SPLICE
+  if(!fallback) {
   if (G_IS_FILE_DESCRIPTOR_BASED (in) && G_IS_FILE_DESCRIPTOR_BASED (out))
     {
       GError *splice_err = NULL;
@@ -2952,7 +2965,7 @@
       else
         g_clear_error (&splice_err);
     }
-
+  }
   if (fallback)
 #endif
     result = copy_stream_with_progress (in, out, source, cancellable,
