mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	bcachefs: Stash a pointer to the filesystem for blk_holder_ops
Note that we open block devices before we allocate bch_fs, but once attached to a filesystem they will be closed before the bch_fs is torn down - so stashing a pointer without a refcount looks incorrect but it's not. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
		
							parent
							
								
									b31c070407
								
							
						
					
					
						commit
						13fd6be102
					
				
					 3 changed files with 15 additions and 2 deletions
				
			
		|  | @ -748,7 +748,7 @@ retry: | |||
| 	memset(sb, 0, sizeof(*sb)); | ||||
| 	sb->mode	= BLK_OPEN_READ; | ||||
| 	sb->have_bio	= true; | ||||
| 	sb->holder	= kmalloc(1, GFP_KERNEL); | ||||
| 	sb->holder	= kzalloc(sizeof(*sb->holder), GFP_KERNEL); | ||||
| 	if (!sb->holder) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1431,6 +1431,13 @@ static int __bch2_dev_attach_bdev(struct bch_dev *ca, struct bch_sb_handle *sb) | |||
| 	ca->disk_sb = *sb; | ||||
| 	memset(sb, 0, sizeof(*sb)); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Stash pointer to the filesystem for blk_holder_ops - note that once | ||||
| 	 * attached to a filesystem, we will always close the block device | ||||
| 	 * before tearing down the filesystem object. | ||||
| 	 */ | ||||
| 	ca->disk_sb.holder->c = ca->fs; | ||||
| 
 | ||||
| 	ca->dev = ca->disk_sb.bdev->bd_dev; | ||||
| 
 | ||||
| 	percpu_ref_reinit(&ca->io_ref); | ||||
|  |  | |||
|  | @ -2,13 +2,19 @@ | |||
| #ifndef _BCACHEFS_SUPER_TYPES_H | ||||
| #define _BCACHEFS_SUPER_TYPES_H | ||||
| 
 | ||||
| struct bch_fs; | ||||
| 
 | ||||
| struct bch_sb_handle_holder { | ||||
| 	struct bch_fs		*c; | ||||
| }; | ||||
| 
 | ||||
| struct bch_sb_handle { | ||||
| 	struct bch_sb		*sb; | ||||
| 	struct file		*s_bdev_file; | ||||
| 	struct block_device	*bdev; | ||||
| 	char			*sb_name; | ||||
| 	struct bio		*bio; | ||||
| 	void			*holder; | ||||
| 	struct bch_sb_handle_holder *holder; | ||||
| 	size_t			buffer_size; | ||||
| 	blk_mode_t		mode; | ||||
| 	unsigned		have_layout:1; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Kent Overstreet
						Kent Overstreet