Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Evgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Evgeniy Polyakov and committed by
Greg Kroah-Hartman
30c7c1c6 e55b6892

+23
+23
drivers/staging/dst/dcore.c
··· 100 100 static int dst_request(struct request_queue *q, struct bio *bio) 101 101 { 102 102 struct dst_node *n = q->queuedata; 103 + int err = -EIO; 104 + 105 + if (bio_empty_barrier(bio) && !q->prepare_discard_fn) { 106 + /* 107 + * This is a dirty^Wnice hack, but if we complete this 108 + * operation with -EOPNOTSUPP like intended, XFS 109 + * will stuck and freeze the machine. This may be 110 + * not particulary XFS problem though, but it is the 111 + * only FS which sends empty barrier at umount time 112 + * I worked with. 113 + * 114 + * Empty barriers are not allowed anyway, see 51fd77bd9f512 115 + * for example, although later it was changed to bio_discard() 116 + * only, which does not work in this case. 117 + */ 118 + //err = -EOPNOTSUPP; 119 + err = 0; 120 + goto end_io; 121 + } 103 122 104 123 bio_get(bio); 105 124 106 125 return dst_process_bio(n, bio); 126 + 127 + end_io: 128 + bio_endio(bio, err); 129 + return err; 107 130 } 108 131 109 132 /*