Skip to content

Commit f8d5651

Browse files
committed
During pool export flush the ARC asynchronously
This also includes removing L2 vdevs asynchronously Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Signed-off-by: Don Brady <[email protected]>
1 parent efbef9e commit f8d5651

File tree

4 files changed

+216
-58
lines changed

4 files changed

+216
-58
lines changed

include/sys/arc.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,15 @@ extern "C" {
6363
(hdr)->b_psize = ((x) >> SPA_MINBLOCKSHIFT); \
6464
} while (0)
6565

66+
/* The asize in the header is only used by L2 cache */
67+
#define HDR_SET_ASIZE(hdr, x) do { \
68+
ASSERT(IS_P2ALIGNED((x), 1U << SPA_MINBLOCKSHIFT)); \
69+
(hdr)->b_asize = ((x) >> SPA_MINBLOCKSHIFT); \
70+
} while (0)
71+
6672
#define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT)
6773
#define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT)
74+
#define HDR_GET_ASIZE(hdr) ((hdr)->b_asize << SPA_MINBLOCKSHIFT)
6875

6976
typedef struct arc_buf_hdr arc_buf_hdr_t;
7077
typedef struct arc_buf arc_buf_t;
@@ -312,6 +319,7 @@ void arc_remove_prune_callback(arc_prune_t *p);
312319
void arc_freed(spa_t *spa, const blkptr_t *bp);
313320

314321
void arc_flush(spa_t *spa, boolean_t retry);
322+
void arc_flush_async(spa_t *spa);
315323
void arc_tempreserve_clear(uint64_t reserve);
316324
int arc_tempreserve_space(spa_t *spa, uint64_t reserve, uint64_t txg);
317325

include/sys/arc_impl.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,8 +378,8 @@ typedef struct l2arc_lb_ptr_buf {
378378
* L2ARC Internals
379379
*/
380380
typedef struct l2arc_dev {
381-
vdev_t *l2ad_vdev; /* vdev */
382-
spa_t *l2ad_spa; /* spa */
381+
vdev_t *l2ad_vdev; /* can be NULL during remove */
382+
spa_t *l2ad_spa; /* can be NULL during remove */
383383
uint64_t l2ad_hand; /* next write location */
384384
uint64_t l2ad_start; /* first addr on device */
385385
uint64_t l2ad_end; /* last addr on device */
@@ -475,8 +475,8 @@ struct arc_buf_hdr {
475475

476476
arc_buf_contents_t b_type;
477477
uint8_t b_complevel;
478-
uint8_t b_reserved1; /* used for 4 byte alignment */
479-
uint16_t b_reserved2; /* used for 4 byte alignment */
478+
uint8_t b_reserved1; /* used for 4 byte alignment */
479+
uint16_t b_asize; /* alignment or L2-only asize */
480480
arc_buf_hdr_t *b_hash_next;
481481
arc_flags_t b_flags;
482482

0 commit comments

Comments
 (0)