mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Add missing dmu_buf_unlock_parent() calls to dbuf_read_impl()
As explained by the comment in dbuf_read() and above dbuf_read_impl(). Under all circumstances the parent lock specified by dblt should be dropped when existing dbuf_read_impl(). This was not being done for two exist paths. Additionally, ensure the mutex is unlocked before dropping the parent lock. Reviewed-by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Igor Kozhukhov <igor@dilos.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #9968
This commit is contained in:
		
							parent
							
								
									bc67cba7c0
								
							
						
					
					
						commit
						dceeca5bbd
					
				| @ -1321,6 +1321,7 @@ dbuf_read_impl(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags, | ||||
| 		if (err != 0) { | ||||
| 			DB_DNODE_EXIT(db); | ||||
| 			mutex_exit(&db->db_mtx); | ||||
| 			dmu_buf_unlock_parent(db, dblt, tag); | ||||
| 			return (err); | ||||
| 		} | ||||
| 
 | ||||
| @ -1390,6 +1391,7 @@ dbuf_read_impl(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags, | ||||
| 		    SPA_FEATURE_REDACTED_DATASETS)); | ||||
| 		DB_DNODE_EXIT(db); | ||||
| 		mutex_exit(&db->db_mtx); | ||||
| 		dmu_buf_unlock_parent(db, dblt, tag); | ||||
| 		return (SET_ERROR(EIO)); | ||||
| 	} | ||||
| 
 | ||||
| @ -1414,8 +1416,8 @@ dbuf_read_impl(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags, | ||||
| 	err = dbuf_read_verify_dnode_crypt(db, flags); | ||||
| 	if (err != 0) { | ||||
| 		DB_DNODE_EXIT(db); | ||||
| 		dmu_buf_unlock_parent(db, dblt, tag); | ||||
| 		mutex_exit(&db->db_mtx); | ||||
| 		dmu_buf_unlock_parent(db, dblt, tag); | ||||
| 		return (err); | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Brian Behlendorf
						Brian Behlendorf