usr/src/uts/common/fs/zfs/sys/dnode.h
changeset 4944 96d96f8de974
parent 4787 602d3f97842c
child 6992 20c04e18c58c
equal deleted inserted replaced
4943:f73f303e6a06 4944:96d96f8de974
    62  */
    62  */
    63 #define	DNODE_SIZE	(1 << DNODE_SHIFT)
    63 #define	DNODE_SIZE	(1 << DNODE_SHIFT)
    64 #define	DN_MAX_NBLKPTR	((DNODE_SIZE - DNODE_CORE_SIZE) >> SPA_BLKPTRSHIFT)
    64 #define	DN_MAX_NBLKPTR	((DNODE_SIZE - DNODE_CORE_SIZE) >> SPA_BLKPTRSHIFT)
    65 #define	DN_MAX_BONUSLEN	(DNODE_SIZE - DNODE_CORE_SIZE - (1 << SPA_BLKPTRSHIFT))
    65 #define	DN_MAX_BONUSLEN	(DNODE_SIZE - DNODE_CORE_SIZE - (1 << SPA_BLKPTRSHIFT))
    66 #define	DN_MAX_OBJECT	(1ULL << DN_MAX_OBJECT_SHIFT)
    66 #define	DN_MAX_OBJECT	(1ULL << DN_MAX_OBJECT_SHIFT)
       
    67 #define	DN_ZERO_BONUSLEN	(DN_MAX_BONUSLEN + 1)
    67 
    68 
    68 #define	DNODES_PER_BLOCK_SHIFT	(DNODE_BLOCK_SHIFT - DNODE_SHIFT)
    69 #define	DNODES_PER_BLOCK_SHIFT	(DNODE_BLOCK_SHIFT - DNODE_SHIFT)
    69 #define	DNODES_PER_BLOCK	(1ULL << DNODES_PER_BLOCK_SHIFT)
    70 #define	DNODES_PER_BLOCK	(1ULL << DNODES_PER_BLOCK_SHIFT)
    70 #define	DNODES_PER_LEVEL_SHIFT	(DN_MAX_INDBLKSHIFT - SPA_BLKPTRSHIFT)
    71 #define	DNODES_PER_LEVEL_SHIFT	(DN_MAX_INDBLKSHIFT - SPA_BLKPTRSHIFT)
    71 
    72 
   154 	uint16_t dn_datablkszsec;	/* in 512b sectors */
   155 	uint16_t dn_datablkszsec;	/* in 512b sectors */
   155 	uint32_t dn_datablksz;		/* in bytes */
   156 	uint32_t dn_datablksz;		/* in bytes */
   156 	uint64_t dn_maxblkid;
   157 	uint64_t dn_maxblkid;
   157 	uint8_t dn_next_nlevels[TXG_SIZE];
   158 	uint8_t dn_next_nlevels[TXG_SIZE];
   158 	uint8_t dn_next_indblkshift[TXG_SIZE];
   159 	uint8_t dn_next_indblkshift[TXG_SIZE];
       
   160 	uint16_t dn_next_bonuslen[TXG_SIZE];
   159 	uint32_t dn_next_blksz[TXG_SIZE];	/* next block size in bytes */
   161 	uint32_t dn_next_blksz[TXG_SIZE];	/* next block size in bytes */
   160 
   162 
   161 	/* protected by os_lock: */
   163 	/* protected by os_lock: */
   162 	list_node_t dn_dirty_link[TXG_SIZE];	/* next on dataset's dirty */
   164 	list_node_t dn_dirty_link[TXG_SIZE];	/* next on dataset's dirty */
   163 
   165 
   195 
   197 
   196 dnode_t *dnode_special_open(struct objset_impl *dd, dnode_phys_t *dnp,
   198 dnode_t *dnode_special_open(struct objset_impl *dd, dnode_phys_t *dnp,
   197     uint64_t object);
   199     uint64_t object);
   198 void dnode_special_close(dnode_t *dn);
   200 void dnode_special_close(dnode_t *dn);
   199 
   201 
       
   202 void dnode_setbonuslen(dnode_t *dn, int newsize, dmu_tx_t *tx);
   200 int dnode_hold(struct objset_impl *dd, uint64_t object,
   203 int dnode_hold(struct objset_impl *dd, uint64_t object,
   201     void *ref, dnode_t **dnp);
   204     void *ref, dnode_t **dnp);
   202 int dnode_hold_impl(struct objset_impl *dd, uint64_t object, int flag,
   205 int dnode_hold_impl(struct objset_impl *dd, uint64_t object, int flag,
   203     void *ref, dnode_t **dnp);
   206     void *ref, dnode_t **dnp);
   204 void dnode_add_ref(dnode_t *dn, void *ref);
   207 boolean_t dnode_add_ref(dnode_t *dn, void *ref);
   205 void dnode_rele(dnode_t *dn, void *ref);
   208 void dnode_rele(dnode_t *dn, void *ref);
   206 void dnode_setdirty(dnode_t *dn, dmu_tx_t *tx);
   209 void dnode_setdirty(dnode_t *dn, dmu_tx_t *tx);
   207 void dnode_sync(dnode_t *dn, dmu_tx_t *tx);
   210 void dnode_sync(dnode_t *dn, dmu_tx_t *tx);
   208 void dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs,
   211 void dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs,
   209     dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
   212     dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
   224 uint64_t dnode_block_freed(dnode_t *dn, uint64_t blkid);
   227 uint64_t dnode_block_freed(dnode_t *dn, uint64_t blkid);
   225 void dnode_init(void);
   228 void dnode_init(void);
   226 void dnode_fini(void);
   229 void dnode_fini(void);
   227 int dnode_next_offset(dnode_t *dn, boolean_t hole, uint64_t *off, int minlvl,
   230 int dnode_next_offset(dnode_t *dn, boolean_t hole, uint64_t *off, int minlvl,
   228     uint64_t blkfill, uint64_t txg);
   231     uint64_t blkfill, uint64_t txg);
   229 int dnode_evict_dbufs(dnode_t *dn, boolean_t try);
   232 void dnode_evict_dbufs(dnode_t *dn);
   230 
   233 
   231 #ifdef ZFS_DEBUG
   234 #ifdef ZFS_DEBUG
   232 
   235 
   233 /*
   236 /*
   234  * There should be a ## between the string literal and fmt, to make it
   237  * There should be a ## between the string literal and fmt, to make it