Commit 30c7c1c6 authored by Evgeniy Polyakov's avatar Evgeniy Polyakov Committed by Greg Kroah-Hartman

Staging: DST: Do not allow empty barriers.

Do not allow empty barriers or generic_make_request() ->  scsi_setup_fs_cmnd()
will explode
Signed-off-by: default avatarEvgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent e55b6892
...@@ -100,10 +100,33 @@ static void dst_node_set_size(struct dst_node *n) ...@@ -100,10 +100,33 @@ static void dst_node_set_size(struct dst_node *n)
static int dst_request(struct request_queue *q, struct bio *bio) static int dst_request(struct request_queue *q, struct bio *bio)
{ {
struct dst_node *n = q->queuedata; 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); bio_get(bio);
return dst_process_bio(n, bio); return dst_process_bio(n, bio);
end_io:
bio_endio(bio, err);
return err;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment