mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	ZAP: Add by_dnode variants to lookup/prefetch_uint64
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Pawel Jakub Dawidek <pjd@FreeBSD.org> Reviewed-by: Brian Atkinson <batkinson@lanl.gov> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc. Closes #16740
This commit is contained in:
		
							parent
							
								
									2b64d41be8
								
							
						
					
					
						commit
						1917c26944
					
				@ -223,11 +223,15 @@ int zap_lookup_norm(objset_t *ds, uint64_t zapobj, const char *name,
 | 
			
		||||
    boolean_t *normalization_conflictp);
 | 
			
		||||
int zap_lookup_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
 | 
			
		||||
    int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf);
 | 
			
		||||
int zap_lookup_uint64_by_dnode(dnode_t *dn, const uint64_t *key,
 | 
			
		||||
    int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf);
 | 
			
		||||
int zap_contains(objset_t *ds, uint64_t zapobj, const char *name);
 | 
			
		||||
int zap_prefetch(objset_t *os, uint64_t zapobj, const char *name);
 | 
			
		||||
int zap_prefetch_object(objset_t *os, uint64_t zapobj);
 | 
			
		||||
int zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
 | 
			
		||||
    int key_numints);
 | 
			
		||||
int zap_prefetch_uint64_by_dnode(dnode_t *dn, const uint64_t *key,
 | 
			
		||||
    int key_numints);
 | 
			
		||||
 | 
			
		||||
int zap_lookup_by_dnode(dnode_t *dn, const char *name,
 | 
			
		||||
    uint64_t integer_size, uint64_t num_integers, void *buf);
 | 
			
		||||
@ -236,9 +240,6 @@ int zap_lookup_norm_by_dnode(dnode_t *dn, const char *name,
 | 
			
		||||
    matchtype_t mt, char *realname, int rn_len,
 | 
			
		||||
    boolean_t *ncp);
 | 
			
		||||
 | 
			
		||||
int zap_count_write_by_dnode(dnode_t *dn, const char *name,
 | 
			
		||||
    int add, zfs_refcount_t *towrite, zfs_refcount_t *tooverwrite);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Create an attribute with the given name and value.
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
@ -1227,6 +1227,21 @@ zap_lookup_norm_by_dnode(dnode_t *dn, const char *name,
 | 
			
		||||
	return (err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
zap_prefetch_uint64_impl(zap_t *zap, const uint64_t *key, int key_numints)
 | 
			
		||||
{
 | 
			
		||||
	zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints);
 | 
			
		||||
	if (zn == NULL) {
 | 
			
		||||
		zap_unlockdir(zap, FTAG);
 | 
			
		||||
		return (SET_ERROR(ENOTSUP));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fzap_prefetch(zn);
 | 
			
		||||
	zap_name_free(zn);
 | 
			
		||||
	zap_unlockdir(zap, FTAG);
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
 | 
			
		||||
    int key_numints)
 | 
			
		||||
@ -1237,13 +1252,37 @@ zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
 | 
			
		||||
	    zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap);
 | 
			
		||||
	if (err != 0)
 | 
			
		||||
		return (err);
 | 
			
		||||
	err = zap_prefetch_uint64_impl(zap, key, key_numints);
 | 
			
		||||
	/* zap_prefetch_uint64_impl() calls zap_unlockdir() */
 | 
			
		||||
	return (err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
zap_prefetch_uint64_by_dnode(dnode_t *dn, const uint64_t *key, int key_numints)
 | 
			
		||||
{
 | 
			
		||||
	zap_t *zap;
 | 
			
		||||
 | 
			
		||||
	int err =
 | 
			
		||||
	    zap_lockdir_by_dnode(dn, NULL, RW_READER, TRUE, FALSE, FTAG, &zap);
 | 
			
		||||
	if (err != 0)
 | 
			
		||||
		return (err);
 | 
			
		||||
	err = zap_prefetch_uint64_impl(zap, key, key_numints);
 | 
			
		||||
	/* zap_prefetch_uint64_impl() calls zap_unlockdir() */
 | 
			
		||||
	return (err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
zap_lookup_uint64_impl(zap_t *zap, const uint64_t *key,
 | 
			
		||||
    int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf)
 | 
			
		||||
{
 | 
			
		||||
	zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints);
 | 
			
		||||
	if (zn == NULL) {
 | 
			
		||||
		zap_unlockdir(zap, FTAG);
 | 
			
		||||
		return (SET_ERROR(ENOTSUP));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fzap_prefetch(zn);
 | 
			
		||||
	int err = fzap_lookup(zn, integer_size, num_integers, buf,
 | 
			
		||||
	    NULL, 0, NULL);
 | 
			
		||||
	zap_name_free(zn);
 | 
			
		||||
	zap_unlockdir(zap, FTAG);
 | 
			
		||||
	return (err);
 | 
			
		||||
@ -1259,16 +1298,25 @@ zap_lookup_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
 | 
			
		||||
	    zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap);
 | 
			
		||||
	if (err != 0)
 | 
			
		||||
		return (err);
 | 
			
		||||
	zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints);
 | 
			
		||||
	if (zn == NULL) {
 | 
			
		||||
		zap_unlockdir(zap, FTAG);
 | 
			
		||||
		return (SET_ERROR(ENOTSUP));
 | 
			
		||||
	}
 | 
			
		||||
	err = zap_lookup_uint64_impl(zap, key, key_numints, integer_size,
 | 
			
		||||
	    num_integers, buf);
 | 
			
		||||
	/* zap_lookup_uint64_impl() calls zap_unlockdir() */
 | 
			
		||||
	return (err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
	err = fzap_lookup(zn, integer_size, num_integers, buf,
 | 
			
		||||
	    NULL, 0, NULL);
 | 
			
		||||
	zap_name_free(zn);
 | 
			
		||||
	zap_unlockdir(zap, FTAG);
 | 
			
		||||
int
 | 
			
		||||
zap_lookup_uint64_by_dnode(dnode_t *dn, const uint64_t *key,
 | 
			
		||||
    int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf)
 | 
			
		||||
{
 | 
			
		||||
	zap_t *zap;
 | 
			
		||||
 | 
			
		||||
	int err =
 | 
			
		||||
	    zap_lockdir_by_dnode(dn, NULL, RW_READER, TRUE, FALSE, FTAG, &zap);
 | 
			
		||||
	if (err != 0)
 | 
			
		||||
		return (err);
 | 
			
		||||
	err = zap_lookup_uint64_impl(zap, key, key_numints, integer_size,
 | 
			
		||||
	    num_integers, buf);
 | 
			
		||||
	/* zap_lookup_uint64_impl() calls zap_unlockdir() */
 | 
			
		||||
	return (err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user