static int dst_request(struct request_queue *q, struct bio *bio)
 {
        struct dst_node *n = q->queuedata;
+       int err = -EIO;
+
+       if (bio_empty_barrier(bio) && !q->prepare_discard_fn) {
+               /*
+                * This is a dirty^Wnice hack, but if we complete this
+                * operation with -EOPNOTSUPP like intended, XFS
+                * will stuck and freeze the machine. This may be
+                * not particulary XFS problem though, but it is the
+                * only FS which sends empty barrier at umount time
+                * I worked with.
+                *
+                * Empty barriers are not allowed anyway, see 51fd77bd9f512
+                * for example, although later it was changed to bio_discard()
+                * only, which does not work in this case.
+                */
+               //err = -EOPNOTSUPP;
+               err = 0;
+               goto end_io;
+       }
 
        bio_get(bio);
 
        return dst_process_bio(n, bio);
+
+end_io:
+       bio_endio(bio, err);
+       return err;
 }
 
 /*