mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	brd: remove support for BLKFLSBUF
Discontinue having the brd driver destructively free all pages in the ramdisk in response to the BLKFLSBUF ioctl. Doing so allows a BLKFLSBUF ioctl issued to a logical partition to destroy pages of the parent brd device (and all other partitions of that brd device). This change breaks compatibility - but in this case the compatibility breaks more than it helps. Reported-by: Mikulas Patocka <mpatocka@redhat.com> Suggested-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
		
							parent
							
								
									366f4aea64
								
							
						
					
					
						commit
						ff26956875
					
				
					 1 changed files with 0 additions and 35 deletions
				
			
		| 
						 | 
					@ -395,44 +395,9 @@ static long brd_direct_access(struct block_device *bdev, sector_t sector,
 | 
				
			||||||
#define brd_direct_access NULL
 | 
					#define brd_direct_access NULL
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int brd_ioctl(struct block_device *bdev, fmode_t mode,
 | 
					 | 
				
			||||||
			unsigned int cmd, unsigned long arg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int error;
 | 
					 | 
				
			||||||
	struct brd_device *brd = bdev->bd_disk->private_data;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (cmd != BLKFLSBUF)
 | 
					 | 
				
			||||||
		return -ENOTTY;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * ram device BLKFLSBUF has special semantics, we want to actually
 | 
					 | 
				
			||||||
	 * release and destroy the ramdisk data.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	mutex_lock(&brd_mutex);
 | 
					 | 
				
			||||||
	mutex_lock(&bdev->bd_mutex);
 | 
					 | 
				
			||||||
	error = -EBUSY;
 | 
					 | 
				
			||||||
	if (bdev->bd_openers <= 1) {
 | 
					 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * Kill the cache first, so it isn't written back to the
 | 
					 | 
				
			||||||
		 * device.
 | 
					 | 
				
			||||||
		 *
 | 
					 | 
				
			||||||
		 * Another thread might instantiate more buffercache here,
 | 
					 | 
				
			||||||
		 * but there is not much we can do to close that race.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		kill_bdev(bdev);
 | 
					 | 
				
			||||||
		brd_free_pages(brd);
 | 
					 | 
				
			||||||
		error = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	mutex_unlock(&bdev->bd_mutex);
 | 
					 | 
				
			||||||
	mutex_unlock(&brd_mutex);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return error;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const struct block_device_operations brd_fops = {
 | 
					static const struct block_device_operations brd_fops = {
 | 
				
			||||||
	.owner =		THIS_MODULE,
 | 
						.owner =		THIS_MODULE,
 | 
				
			||||||
	.rw_page =		brd_rw_page,
 | 
						.rw_page =		brd_rw_page,
 | 
				
			||||||
	.ioctl =		brd_ioctl,
 | 
					 | 
				
			||||||
	.direct_access =	brd_direct_access,
 | 
						.direct_access =	brd_direct_access,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue