mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	jbd2: abort journal when detecting metadata writeback error of fs dev
This is a replacement solution of commit bc71726c72 ("ext4: abort
the filesystem if failed to async write metadata buffer"), JBD2 can
detect metadata writeback error of fs dev by 'j_fs_dev_wb_err'.
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20231213013224.2100050-5-chengzhihao1@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
			
			
This commit is contained in:
		
							parent
							
								
									8a4fd33d87
								
							
						
					
					
						commit
						b4e73e6126
					
				
					 1 changed files with 14 additions and 0 deletions
				
			
		| 
						 | 
					@ -1231,11 +1231,25 @@ static bool jbd2_write_access_granted(handle_t *handle, struct buffer_head *bh,
 | 
				
			||||||
int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
 | 
					int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct journal_head *jh;
 | 
						struct journal_head *jh;
 | 
				
			||||||
 | 
						journal_t *journal;
 | 
				
			||||||
	int rc;
 | 
						int rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (is_handle_aborted(handle))
 | 
						if (is_handle_aborted(handle))
 | 
				
			||||||
		return -EROFS;
 | 
							return -EROFS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						journal = handle->h_transaction->t_journal;
 | 
				
			||||||
 | 
						if (jbd2_check_fs_dev_write_error(journal)) {
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * If the fs dev has writeback errors, it may have failed
 | 
				
			||||||
 | 
							 * to async write out metadata buffers in the background.
 | 
				
			||||||
 | 
							 * In this case, we could read old data from disk and write
 | 
				
			||||||
 | 
							 * it out again, which may lead to on-disk filesystem
 | 
				
			||||||
 | 
							 * inconsistency. Aborting journal can avoid it happen.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							jbd2_journal_abort(journal, -EIO);
 | 
				
			||||||
 | 
							return -EIO;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (jbd2_write_access_granted(handle, bh, false))
 | 
						if (jbd2_write_access_granted(handle, bh, false))
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue