mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	block: add a sanity check for non-write flush/fua bios
Check that the PREFUSH and FUA flags are only set on write bios, given that the flush state machine expects that. [Damien] The check is also extended to REQ_OP_ZONE_APPEND operations as these are data write operations used by btrfs and zonefs and may also have the REQ_FUA bit set. Reported-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> Reviewed-by: Jens Axboe <axboe@kernel.dk> Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com> Reviewed-by: Hannes Reinecke <hare@suse.de>
This commit is contained in:
		
							parent
							
								
									002c487119
								
							
						
					
					
						commit
						b4a6bb3a67
					
				
					 1 changed files with 9 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -744,12 +744,16 @@ void submit_bio_noacct(struct bio *bio)
 | 
			
		|||
	 * Filter flush bio's early so that bio based drivers without flush
 | 
			
		||||
	 * support don't have to worry about them.
 | 
			
		||||
	 */
 | 
			
		||||
	if (op_is_flush(bio->bi_opf) &&
 | 
			
		||||
	    !test_bit(QUEUE_FLAG_WC, &q->queue_flags)) {
 | 
			
		||||
		bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA);
 | 
			
		||||
		if (!bio_sectors(bio)) {
 | 
			
		||||
			status = BLK_STS_OK;
 | 
			
		||||
	if (op_is_flush(bio->bi_opf)) {
 | 
			
		||||
		if (WARN_ON_ONCE(bio_op(bio) != REQ_OP_WRITE &&
 | 
			
		||||
				 bio_op(bio) != REQ_OP_ZONE_APPEND))
 | 
			
		||||
			goto end_io;
 | 
			
		||||
		if (!test_bit(QUEUE_FLAG_WC, &q->queue_flags)) {
 | 
			
		||||
			bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA);
 | 
			
		||||
			if (!bio_sectors(bio)) {
 | 
			
		||||
				status = BLK_STS_OK;
 | 
			
		||||
				goto end_io;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue