Skip to content

Commit

Permalink
Remove few pointer dereferences in dbuf_read()
Browse files Browse the repository at this point in the history
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Closes #14199
openzfs/zfs#14199

Change-Id: I73642a34711d27a43d5dd18e6fe5342570039af2
  • Loading branch information
amotin authored and tsoome committed Nov 8, 2024
1 parent 52c7990 commit b637726
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 13 deletions.
9 changes: 4 additions & 5 deletions usr/src/uts/common/fs/zfs/dbuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1158,8 +1158,8 @@ dbuf_read_verify_dnode_crypt(dmu_buf_impl_t *db, uint32_t flags)

ASSERT(MUTEX_HELD(&db->db_mtx));

if (!os->os_encrypted || os->os_raw_receive ||
(flags & DB_RF_NO_DECRYPT) != 0)
if ((flags & DB_RF_NO_DECRYPT) != 0 ||
!os->os_encrypted || os->os_raw_receive)
return (0);

DB_DNODE_ENTER(db);
Expand Down Expand Up @@ -1380,8 +1380,6 @@ dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags)

mutex_enter(&db->db_mtx);
if (db->db_state == DB_CACHED) {
spa_t *spa = dn->dn_objset->os_spa;

/*
* Ensure that this block's dnode has been decrypted if
* the caller has requested decrypted data.
Expand All @@ -1400,6 +1398,7 @@ dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags)
(arc_is_encrypted(db->db_buf) ||
arc_is_unauthenticated(db->db_buf) ||
arc_get_compression(db->db_buf) != ZIO_COMPRESS_OFF)) {
spa_t *spa = dn->dn_objset->os_spa;
zbookmark_phys_t zb;

SET_BOOKMARK(&zb, dmu_objset_id(db->db_objset),
Expand All @@ -1415,13 +1414,13 @@ dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags)
}
DB_DNODE_EXIT(db);
} else if (db->db_state == DB_UNCACHED) {
spa_t *spa = dn->dn_objset->os_spa;
boolean_t need_wait = B_FALSE;

db_lock_type_t dblt = dmu_buf_lock_parent(db, RW_READER, FTAG);

if (zio == NULL &&
db->db_blkptr != NULL && !BP_IS_HOLE(db->db_blkptr)) {
spa_t *spa = dn->dn_objset->os_spa;
zio = zio_root(spa, NULL, NULL, ZIO_FLAG_CANFAIL);
need_wait = B_TRUE;
}
Expand Down
8 changes: 0 additions & 8 deletions usr/src/uts/common/fs/zfs/dnode.c
Original file line number Diff line number Diff line change
Expand Up @@ -2252,19 +2252,11 @@ dnode_spill_freed(dnode_t *dn)
uint64_t
dnode_block_freed(dnode_t *dn, uint64_t blkid)
{
void *dp = spa_get_dsl(dn->dn_objset->os_spa);
int i;

if (blkid == DMU_BONUS_BLKID)
return (FALSE);

/*
* If we're in the process of opening the pool, dp will not be
* set yet, but there shouldn't be anything dirty.
*/
if (dp == NULL)
return (FALSE);

if (dn->dn_free_txg)
return (TRUE);

Expand Down

0 comments on commit b637726

Please sign in to comment.