]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - module/zfs/arc.c
Introduce ARC Buffer Data (ABD)
[FreeBSD/FreeBSD.git] / module / zfs / arc.c
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
23  * Copyright (c) 2012, Joyent, Inc. All rights reserved.
24  * Copyright (c) 2011, 2016 by Delphix. All rights reserved.
25  * Copyright (c) 2014 by Saso Kiselkov. All rights reserved.
26  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
27  */
28
29 /*
30  * DVA-based Adjustable Replacement Cache
31  *
32  * While much of the theory of operation used here is
33  * based on the self-tuning, low overhead replacement cache
34  * presented by Megiddo and Modha at FAST 2003, there are some
35  * significant differences:
36  *
37  * 1. The Megiddo and Modha model assumes any page is evictable.
38  * Pages in its cache cannot be "locked" into memory.  This makes
39  * the eviction algorithm simple: evict the last page in the list.
40  * This also make the performance characteristics easy to reason
41  * about.  Our cache is not so simple.  At any given moment, some
42  * subset of the blocks in the cache are un-evictable because we
43  * have handed out a reference to them.  Blocks are only evictable
44  * when there are no external references active.  This makes
45  * eviction far more problematic:  we choose to evict the evictable
46  * blocks that are the "lowest" in the list.
47  *
48  * There are times when it is not possible to evict the requested
49  * space.  In these circumstances we are unable to adjust the cache
50  * size.  To prevent the cache growing unbounded at these times we
51  * implement a "cache throttle" that slows the flow of new data
52  * into the cache until we can make space available.
53  *
54  * 2. The Megiddo and Modha model assumes a fixed cache size.
55  * Pages are evicted when the cache is full and there is a cache
56  * miss.  Our model has a variable sized cache.  It grows with
57  * high use, but also tries to react to memory pressure from the
58  * operating system: decreasing its size when system memory is
59  * tight.
60  *
61  * 3. The Megiddo and Modha model assumes a fixed page size. All
62  * elements of the cache are therefore exactly the same size.  So
63  * when adjusting the cache size following a cache miss, its simply
64  * a matter of choosing a single page to evict.  In our model, we
65  * have variable sized cache blocks (rangeing from 512 bytes to
66  * 128K bytes).  We therefore choose a set of blocks to evict to make
67  * space for a cache miss that approximates as closely as possible
68  * the space used by the new block.
69  *
70  * See also:  "ARC: A Self-Tuning, Low Overhead Replacement Cache"
71  * by N. Megiddo & D. Modha, FAST 2003
72  */
73
74 /*
75  * The locking model:
76  *
77  * A new reference to a cache buffer can be obtained in two
78  * ways: 1) via a hash table lookup using the DVA as a key,
79  * or 2) via one of the ARC lists.  The arc_read() interface
80  * uses method 1, while the internal ARC algorithms for
81  * adjusting the cache use method 2.  We therefore provide two
82  * types of locks: 1) the hash table lock array, and 2) the
83  * ARC list locks.
84  *
85  * Buffers do not have their own mutexes, rather they rely on the
86  * hash table mutexes for the bulk of their protection (i.e. most
87  * fields in the arc_buf_hdr_t are protected by these mutexes).
88  *
89  * buf_hash_find() returns the appropriate mutex (held) when it
90  * locates the requested buffer in the hash table.  It returns
91  * NULL for the mutex if the buffer was not in the table.
92  *
93  * buf_hash_remove() expects the appropriate hash mutex to be
94  * already held before it is invoked.
95  *
96  * Each ARC state also has a mutex which is used to protect the
97  * buffer list associated with the state.  When attempting to
98  * obtain a hash table lock while holding an ARC list lock you
99  * must use: mutex_tryenter() to avoid deadlock.  Also note that
100  * the active state mutex must be held before the ghost state mutex.
101  *
102  * It as also possible to register a callback which is run when the
103  * arc_meta_limit is reached and no buffers can be safely evicted.  In
104  * this case the arc user should drop a reference on some arc buffers so
105  * they can be reclaimed and the arc_meta_limit honored.  For example,
106  * when using the ZPL each dentry holds a references on a znode.  These
107  * dentries must be pruned before the arc buffer holding the znode can
108  * be safely evicted.
109  *
110  * Note that the majority of the performance stats are manipulated
111  * with atomic operations.
112  *
113  * The L2ARC uses the l2ad_mtx on each vdev for the following:
114  *
115  *      - L2ARC buflist creation
116  *      - L2ARC buflist eviction
117  *      - L2ARC write completion, which walks L2ARC buflists
118  *      - ARC header destruction, as it removes from L2ARC buflists
119  *      - ARC header release, as it removes from L2ARC buflists
120  */
121
122 /*
123  * ARC operation:
124  *
125  * Every block that is in the ARC is tracked by an arc_buf_hdr_t structure.
126  * This structure can point either to a block that is still in the cache or to
127  * one that is only accessible in an L2 ARC device, or it can provide
128  * information about a block that was recently evicted. If a block is
129  * only accessible in the L2ARC, then the arc_buf_hdr_t only has enough
130  * information to retrieve it from the L2ARC device. This information is
131  * stored in the l2arc_buf_hdr_t sub-structure of the arc_buf_hdr_t. A block
132  * that is in this state cannot access the data directly.
133  *
134  * Blocks that are actively being referenced or have not been evicted
135  * are cached in the L1ARC. The L1ARC (l1arc_buf_hdr_t) is a structure within
136  * the arc_buf_hdr_t that will point to the data block in memory. A block can
137  * only be read by a consumer if it has an l1arc_buf_hdr_t. The L1ARC
138  * caches data in two ways -- in a list of ARC buffers (arc_buf_t) and
139  * also in the arc_buf_hdr_t's private physical data block pointer (b_pabd).
140  *
141  * The L1ARC's data pointer may or may not be uncompressed. The ARC has the
142  * ability to store the physical data (b_pabd) associated with the DVA of the
143  * arc_buf_hdr_t. Since the b_pabd is a copy of the on-disk physical block,
144  * it will match its on-disk compression characteristics. This behavior can be
145  * disabled by setting 'zfs_compressed_arc_enabled' to B_FALSE. When the
146  * compressed ARC functionality is disabled, the b_pabd will point to an
147  * uncompressed version of the on-disk data.
148  *
149  * Data in the L1ARC is not accessed by consumers of the ARC directly. Each
150  * arc_buf_hdr_t can have multiple ARC buffers (arc_buf_t) which reference it.
151  * Each ARC buffer (arc_buf_t) is being actively accessed by a specific ARC
152  * consumer. The ARC will provide references to this data and will keep it
153  * cached until it is no longer in use. The ARC caches only the L1ARC's physical
154  * data block and will evict any arc_buf_t that is no longer referenced. The
155  * amount of memory consumed by the arc_buf_ts' data buffers can be seen via the
156  * "overhead_size" kstat.
157  *
158  * Depending on the consumer, an arc_buf_t can be requested in uncompressed or
159  * compressed form. The typical case is that consumers will want uncompressed
160  * data, and when that happens a new data buffer is allocated where the data is
161  * decompressed for them to use. Currently the only consumer who wants
162  * compressed arc_buf_t's is "zfs send", when it streams data exactly as it
163  * exists on disk. When this happens, the arc_buf_t's data buffer is shared
164  * with the arc_buf_hdr_t.
165  *
166  * Here is a diagram showing an arc_buf_hdr_t referenced by two arc_buf_t's. The
167  * first one is owned by a compressed send consumer (and therefore references
168  * the same compressed data buffer as the arc_buf_hdr_t) and the second could be
169  * used by any other consumer (and has its own uncompressed copy of the data
170  * buffer).
171  *
172  *   arc_buf_hdr_t
173  *   +-----------+
174  *   | fields    |
175  *   | common to |
176  *   | L1- and   |
177  *   | L2ARC     |
178  *   +-----------+
179  *   | l2arc_buf_hdr_t
180  *   |           |
181  *   +-----------+
182  *   | l1arc_buf_hdr_t
183  *   |           |              arc_buf_t
184  *   | b_buf     +------------>+-----------+      arc_buf_t
185  *   | b_pabd    +-+           |b_next     +---->+-----------+
186  *   +-----------+ |           |-----------|     |b_next     +-->NULL
187  *                 |           |b_comp = T |     +-----------+
188  *                 |           |b_data     +-+   |b_comp = F |
189  *                 |           +-----------+ |   |b_data     +-+
190  *                 +->+------+               |   +-----------+ |
191  *        compressed  |      |               |                 |
192  *           data     |      |<--------------+                 | uncompressed
193  *                    +------+          compressed,            |     data
194  *                                        shared               +-->+------+
195  *                                         data                    |      |
196  *                                                                 |      |
197  *                                                                 +------+
198  *
199  * When a consumer reads a block, the ARC must first look to see if the
200  * arc_buf_hdr_t is cached. If the hdr is cached then the ARC allocates a new
201  * arc_buf_t and either copies uncompressed data into a new data buffer from an
202  * existing uncompressed arc_buf_t, decompresses the hdr's b_pabd buffer into a
203  * new data buffer, or shares the hdr's b_pabd buffer, depending on whether the
204  * hdr is compressed and the desired compression characteristics of the
205  * arc_buf_t consumer. If the arc_buf_t ends up sharing data with the
206  * arc_buf_hdr_t and both of them are uncompressed then the arc_buf_t must be
207  * the last buffer in the hdr's b_buf list, however a shared compressed buf can
208  * be anywhere in the hdr's list.
209  *
210  * The diagram below shows an example of an uncompressed ARC hdr that is
211  * sharing its data with an arc_buf_t (note that the shared uncompressed buf is
212  * the last element in the buf list):
213  *
214  *                arc_buf_hdr_t
215  *                +-----------+
216  *                |           |
217  *                |           |
218  *                |           |
219  *                +-----------+
220  * l2arc_buf_hdr_t|           |
221  *                |           |
222  *                +-----------+
223  * l1arc_buf_hdr_t|           |
224  *                |           |                 arc_buf_t    (shared)
225  *                |    b_buf  +------------>+---------+      arc_buf_t
226  *                |           |             |b_next   +---->+---------+
227  *                |  b_pabd   +-+           |---------|     |b_next   +-->NULL
228  *                +-----------+ |           |         |     +---------+
229  *                              |           |b_data   +-+   |         |
230  *                              |           +---------+ |   |b_data   +-+
231  *                              +->+------+             |   +---------+ |
232  *                                 |      |             |               |
233  *                   uncompressed  |      |             |               |
234  *                        data     +------+             |               |
235  *                                    ^                 +->+------+     |
236  *                                    |       uncompressed |      |     |
237  *                                    |           data     |      |     |
238  *                                    |                    +------+     |
239  *                                    +---------------------------------+
240  *
241  * Writing to the ARC requires that the ARC first discard the hdr's b_pabd
242  * since the physical block is about to be rewritten. The new data contents
243  * will be contained in the arc_buf_t. As the I/O pipeline performs the write,
244  * it may compress the data before writing it to disk. The ARC will be called
245  * with the transformed data and will bcopy the transformed on-disk block into
246  * a newly allocated b_pabd. Writes are always done into buffers which have
247  * either been loaned (and hence are new and don't have other readers) or
248  * buffers which have been released (and hence have their own hdr, if there
249  * were originally other readers of the buf's original hdr). This ensures that
250  * the ARC only needs to update a single buf and its hdr after a write occurs.
251  *
252  * When the L2ARC is in use, it will also take advantage of the b_pabd. The
253  * L2ARC will always write the contents of b_pabd to the L2ARC. This means
254  * that when compressed ARC is enabled that the L2ARC blocks are identical
255  * to the on-disk block in the main data pool. This provides a significant
256  * advantage since the ARC can leverage the bp's checksum when reading from the
257  * L2ARC to determine if the contents are valid. However, if the compressed
258  * ARC is disabled, then the L2ARC's block must be transformed to look
259  * like the physical block in the main data pool before comparing the
260  * checksum and determining its validity.
261  */
262
263 #include <sys/spa.h>
264 #include <sys/zio.h>
265 #include <sys/spa_impl.h>
266 #include <sys/zio_compress.h>
267 #include <sys/zio_checksum.h>
268 #include <sys/zfs_context.h>
269 #include <sys/arc.h>
270 #include <sys/refcount.h>
271 #include <sys/vdev.h>
272 #include <sys/vdev_impl.h>
273 #include <sys/dsl_pool.h>
274 #include <sys/zio_checksum.h>
275 #include <sys/multilist.h>
276 #include <sys/abd.h>
277 #ifdef _KERNEL
278 #include <sys/vmsystm.h>
279 #include <vm/anon.h>
280 #include <sys/fs/swapnode.h>
281 #include <sys/zpl.h>
282 #include <linux/mm_compat.h>
283 #endif
284 #include <sys/callb.h>
285 #include <sys/kstat.h>
286 #include <sys/dmu_tx.h>
287 #include <zfs_fletcher.h>
288 #include <sys/arc_impl.h>
289 #include <sys/trace_arc.h>
290
291 #ifndef _KERNEL
292 /* set with ZFS_DEBUG=watch, to enable watchpoints on frozen buffers */
293 boolean_t arc_watch = B_FALSE;
294 #endif
295
296 static kmutex_t         arc_reclaim_lock;
297 static kcondvar_t       arc_reclaim_thread_cv;
298 static boolean_t        arc_reclaim_thread_exit;
299 static kcondvar_t       arc_reclaim_waiters_cv;
300
301 /*
302  * The number of headers to evict in arc_evict_state_impl() before
303  * dropping the sublist lock and evicting from another sublist. A lower
304  * value means we're more likely to evict the "correct" header (i.e. the
305  * oldest header in the arc state), but comes with higher overhead
306  * (i.e. more invocations of arc_evict_state_impl()).
307  */
308 int zfs_arc_evict_batch_limit = 10;
309
310 /*
311  * The number of sublists used for each of the arc state lists. If this
312  * is not set to a suitable value by the user, it will be configured to
313  * the number of CPUs on the system in arc_init().
314  */
315 int zfs_arc_num_sublists_per_state = 0;
316
317 /* number of seconds before growing cache again */
318 static int              arc_grow_retry = 5;
319
320 /* shift of arc_c for calculating overflow limit in arc_get_data_impl */
321 int             zfs_arc_overflow_shift = 8;
322
323 /* shift of arc_c for calculating both min and max arc_p */
324 static int              arc_p_min_shift = 4;
325
326 /* log2(fraction of arc to reclaim) */
327 static int              arc_shrink_shift = 7;
328
329 /*
330  * log2(fraction of ARC which must be free to allow growing).
331  * I.e. If there is less than arc_c >> arc_no_grow_shift free memory,
332  * when reading a new block into the ARC, we will evict an equal-sized block
333  * from the ARC.
334  *
335  * This must be less than arc_shrink_shift, so that when we shrink the ARC,
336  * we will still not allow it to grow.
337  */
338 int                     arc_no_grow_shift = 5;
339
340
341 /*
342  * minimum lifespan of a prefetch block in clock ticks
343  * (initialized in arc_init())
344  */
345 static int              arc_min_prefetch_lifespan;
346
347 /*
348  * If this percent of memory is free, don't throttle.
349  */
350 int arc_lotsfree_percent = 10;
351
352 static int arc_dead;
353
354 /*
355  * The arc has filled available memory and has now warmed up.
356  */
357 static boolean_t arc_warm;
358
359 /*
360  * log2 fraction of the zio arena to keep free.
361  */
362 int arc_zio_arena_free_shift = 2;
363
364 /*
365  * These tunables are for performance analysis.
366  */
367 unsigned long zfs_arc_max = 0;
368 unsigned long zfs_arc_min = 0;
369 unsigned long zfs_arc_meta_limit = 0;
370 unsigned long zfs_arc_meta_min = 0;
371 unsigned long zfs_arc_dnode_limit = 0;
372 unsigned long zfs_arc_dnode_reduce_percent = 10;
373 int zfs_arc_grow_retry = 0;
374 int zfs_arc_shrink_shift = 0;
375 int zfs_arc_p_min_shift = 0;
376 int zfs_arc_average_blocksize = 8 * 1024; /* 8KB */
377
378 int zfs_compressed_arc_enabled = B_TRUE;
379
380 /*
381  * ARC will evict meta buffers that exceed arc_meta_limit. This
382  * tunable make arc_meta_limit adjustable for different workloads.
383  */
384 unsigned long zfs_arc_meta_limit_percent = 75;
385
386 /*
387  * Percentage that can be consumed by dnodes of ARC meta buffers.
388  */
389 unsigned long zfs_arc_dnode_limit_percent = 10;
390
391 /*
392  * These tunables are Linux specific
393  */
394 unsigned long zfs_arc_sys_free = 0;
395 int zfs_arc_min_prefetch_lifespan = 0;
396 int zfs_arc_p_aggressive_disable = 1;
397 int zfs_arc_p_dampener_disable = 1;
398 int zfs_arc_meta_prune = 10000;
399 int zfs_arc_meta_strategy = ARC_STRATEGY_META_BALANCED;
400 int zfs_arc_meta_adjust_restarts = 4096;
401 int zfs_arc_lotsfree_percent = 10;
402
403 /* The 6 states: */
404 static arc_state_t ARC_anon;
405 static arc_state_t ARC_mru;
406 static arc_state_t ARC_mru_ghost;
407 static arc_state_t ARC_mfu;
408 static arc_state_t ARC_mfu_ghost;
409 static arc_state_t ARC_l2c_only;
410
411 typedef struct arc_stats {
412         kstat_named_t arcstat_hits;
413         kstat_named_t arcstat_misses;
414         kstat_named_t arcstat_demand_data_hits;
415         kstat_named_t arcstat_demand_data_misses;
416         kstat_named_t arcstat_demand_metadata_hits;
417         kstat_named_t arcstat_demand_metadata_misses;
418         kstat_named_t arcstat_prefetch_data_hits;
419         kstat_named_t arcstat_prefetch_data_misses;
420         kstat_named_t arcstat_prefetch_metadata_hits;
421         kstat_named_t arcstat_prefetch_metadata_misses;
422         kstat_named_t arcstat_mru_hits;
423         kstat_named_t arcstat_mru_ghost_hits;
424         kstat_named_t arcstat_mfu_hits;
425         kstat_named_t arcstat_mfu_ghost_hits;
426         kstat_named_t arcstat_deleted;
427         /*
428          * Number of buffers that could not be evicted because the hash lock
429          * was held by another thread.  The lock may not necessarily be held
430          * by something using the same buffer, since hash locks are shared
431          * by multiple buffers.
432          */
433         kstat_named_t arcstat_mutex_miss;
434         /*
435          * Number of buffers skipped because they have I/O in progress, are
436          * indrect prefetch buffers that have not lived long enough, or are
437          * not from the spa we're trying to evict from.
438          */
439         kstat_named_t arcstat_evict_skip;
440         /*
441          * Number of times arc_evict_state() was unable to evict enough
442          * buffers to reach its target amount.
443          */
444         kstat_named_t arcstat_evict_not_enough;
445         kstat_named_t arcstat_evict_l2_cached;
446         kstat_named_t arcstat_evict_l2_eligible;
447         kstat_named_t arcstat_evict_l2_ineligible;
448         kstat_named_t arcstat_evict_l2_skip;
449         kstat_named_t arcstat_hash_elements;
450         kstat_named_t arcstat_hash_elements_max;
451         kstat_named_t arcstat_hash_collisions;
452         kstat_named_t arcstat_hash_chains;
453         kstat_named_t arcstat_hash_chain_max;
454         kstat_named_t arcstat_p;
455         kstat_named_t arcstat_c;
456         kstat_named_t arcstat_c_min;
457         kstat_named_t arcstat_c_max;
458         kstat_named_t arcstat_size;
459         /*
460          * Number of compressed bytes stored in the arc_buf_hdr_t's b_pabd.
461          * Note that the compressed bytes may match the uncompressed bytes
462          * if the block is either not compressed or compressed arc is disabled.
463          */
464         kstat_named_t arcstat_compressed_size;
465         /*
466          * Uncompressed size of the data stored in b_pabd. If compressed
467          * arc is disabled then this value will be identical to the stat
468          * above.
469          */
470         kstat_named_t arcstat_uncompressed_size;
471         /*
472          * Number of bytes stored in all the arc_buf_t's. This is classified
473          * as "overhead" since this data is typically short-lived and will
474          * be evicted from the arc when it becomes unreferenced unless the
475          * zfs_keep_uncompressed_metadata or zfs_keep_uncompressed_level
476          * values have been set (see comment in dbuf.c for more information).
477          */
478         kstat_named_t arcstat_overhead_size;
479         /*
480          * Number of bytes consumed by internal ARC structures necessary
481          * for tracking purposes; these structures are not actually
482          * backed by ARC buffers. This includes arc_buf_hdr_t structures
483          * (allocated via arc_buf_hdr_t_full and arc_buf_hdr_t_l2only
484          * caches), and arc_buf_t structures (allocated via arc_buf_t
485          * cache).
486          */
487         kstat_named_t arcstat_hdr_size;
488         /*
489          * Number of bytes consumed by ARC buffers of type equal to
490          * ARC_BUFC_DATA. This is generally consumed by buffers backing
491          * on disk user data (e.g. plain file contents).
492          */
493         kstat_named_t arcstat_data_size;
494         /*
495          * Number of bytes consumed by ARC buffers of type equal to
496          * ARC_BUFC_METADATA. This is generally consumed by buffers
497          * backing on disk data that is used for internal ZFS
498          * structures (e.g. ZAP, dnode, indirect blocks, etc).
499          */
500         kstat_named_t arcstat_metadata_size;
501         /*
502          * Number of bytes consumed by dmu_buf_impl_t objects.
503          */
504         kstat_named_t arcstat_dbuf_size;
505         /*
506          * Number of bytes consumed by dnode_t objects.
507          */
508         kstat_named_t arcstat_dnode_size;
509         /*
510          * Number of bytes consumed by bonus buffers.
511          */
512         kstat_named_t arcstat_bonus_size;
513         /*
514          * Total number of bytes consumed by ARC buffers residing in the
515          * arc_anon state. This includes *all* buffers in the arc_anon
516          * state; e.g. data, metadata, evictable, and unevictable buffers
517          * are all included in this value.
518          */
519         kstat_named_t arcstat_anon_size;
520         /*
521          * Number of bytes consumed by ARC buffers that meet the
522          * following criteria: backing buffers of type ARC_BUFC_DATA,
523          * residing in the arc_anon state, and are eligible for eviction
524          * (e.g. have no outstanding holds on the buffer).
525          */
526         kstat_named_t arcstat_anon_evictable_data;
527         /*
528          * Number of bytes consumed by ARC buffers that meet the
529          * following criteria: backing buffers of type ARC_BUFC_METADATA,
530          * residing in the arc_anon state, and are eligible for eviction
531          * (e.g. have no outstanding holds on the buffer).
532          */
533         kstat_named_t arcstat_anon_evictable_metadata;
534         /*
535          * Total number of bytes consumed by ARC buffers residing in the
536          * arc_mru state. This includes *all* buffers in the arc_mru
537          * state; e.g. data, metadata, evictable, and unevictable buffers
538          * are all included in this value.
539          */
540         kstat_named_t arcstat_mru_size;
541         /*
542          * Number of bytes consumed by ARC buffers that meet the
543          * following criteria: backing buffers of type ARC_BUFC_DATA,
544          * residing in the arc_mru state, and are eligible for eviction
545          * (e.g. have no outstanding holds on the buffer).
546          */
547         kstat_named_t arcstat_mru_evictable_data;
548         /*
549          * Number of bytes consumed by ARC buffers that meet the
550          * following criteria: backing buffers of type ARC_BUFC_METADATA,
551          * residing in the arc_mru state, and are eligible for eviction
552          * (e.g. have no outstanding holds on the buffer).
553          */
554         kstat_named_t arcstat_mru_evictable_metadata;
555         /*
556          * Total number of bytes that *would have been* consumed by ARC
557          * buffers in the arc_mru_ghost state. The key thing to note
558          * here, is the fact that this size doesn't actually indicate
559          * RAM consumption. The ghost lists only consist of headers and
560          * don't actually have ARC buffers linked off of these headers.
561          * Thus, *if* the headers had associated ARC buffers, these
562          * buffers *would have* consumed this number of bytes.
563          */
564         kstat_named_t arcstat_mru_ghost_size;
565         /*
566          * Number of bytes that *would have been* consumed by ARC
567          * buffers that are eligible for eviction, of type
568          * ARC_BUFC_DATA, and linked off the arc_mru_ghost state.
569          */
570         kstat_named_t arcstat_mru_ghost_evictable_data;
571         /*
572          * Number of bytes that *would have been* consumed by ARC
573          * buffers that are eligible for eviction, of type
574          * ARC_BUFC_METADATA, and linked off the arc_mru_ghost state.
575          */
576         kstat_named_t arcstat_mru_ghost_evictable_metadata;
577         /*
578          * Total number of bytes consumed by ARC buffers residing in the
579          * arc_mfu state. This includes *all* buffers in the arc_mfu
580          * state; e.g. data, metadata, evictable, and unevictable buffers
581          * are all included in this value.
582          */
583         kstat_named_t arcstat_mfu_size;
584         /*
585          * Number of bytes consumed by ARC buffers that are eligible for
586          * eviction, of type ARC_BUFC_DATA, and reside in the arc_mfu
587          * state.
588          */
589         kstat_named_t arcstat_mfu_evictable_data;
590         /*
591          * Number of bytes consumed by ARC buffers that are eligible for
592          * eviction, of type ARC_BUFC_METADATA, and reside in the
593          * arc_mfu state.
594          */
595         kstat_named_t arcstat_mfu_evictable_metadata;
596         /*
597          * Total number of bytes that *would have been* consumed by ARC
598          * buffers in the arc_mfu_ghost state. See the comment above
599          * arcstat_mru_ghost_size for more details.
600          */
601         kstat_named_t arcstat_mfu_ghost_size;
602         /*
603          * Number of bytes that *would have been* consumed by ARC
604          * buffers that are eligible for eviction, of type
605          * ARC_BUFC_DATA, and linked off the arc_mfu_ghost state.
606          */
607         kstat_named_t arcstat_mfu_ghost_evictable_data;
608         /*
609          * Number of bytes that *would have been* consumed by ARC
610          * buffers that are eligible for eviction, of type
611          * ARC_BUFC_METADATA, and linked off the arc_mru_ghost state.
612          */
613         kstat_named_t arcstat_mfu_ghost_evictable_metadata;
614         kstat_named_t arcstat_l2_hits;
615         kstat_named_t arcstat_l2_misses;
616         kstat_named_t arcstat_l2_feeds;
617         kstat_named_t arcstat_l2_rw_clash;
618         kstat_named_t arcstat_l2_read_bytes;
619         kstat_named_t arcstat_l2_write_bytes;
620         kstat_named_t arcstat_l2_writes_sent;
621         kstat_named_t arcstat_l2_writes_done;
622         kstat_named_t arcstat_l2_writes_error;
623         kstat_named_t arcstat_l2_writes_lock_retry;
624         kstat_named_t arcstat_l2_evict_lock_retry;
625         kstat_named_t arcstat_l2_evict_reading;
626         kstat_named_t arcstat_l2_evict_l1cached;
627         kstat_named_t arcstat_l2_free_on_write;
628         kstat_named_t arcstat_l2_abort_lowmem;
629         kstat_named_t arcstat_l2_cksum_bad;
630         kstat_named_t arcstat_l2_io_error;
631         kstat_named_t arcstat_l2_size;
632         kstat_named_t arcstat_l2_asize;
633         kstat_named_t arcstat_l2_hdr_size;
634         kstat_named_t arcstat_memory_throttle_count;
635         kstat_named_t arcstat_memory_direct_count;
636         kstat_named_t arcstat_memory_indirect_count;
637         kstat_named_t arcstat_no_grow;
638         kstat_named_t arcstat_tempreserve;
639         kstat_named_t arcstat_loaned_bytes;
640         kstat_named_t arcstat_prune;
641         kstat_named_t arcstat_meta_used;
642         kstat_named_t arcstat_meta_limit;
643         kstat_named_t arcstat_dnode_limit;
644         kstat_named_t arcstat_meta_max;
645         kstat_named_t arcstat_meta_min;
646         kstat_named_t arcstat_sync_wait_for_async;
647         kstat_named_t arcstat_demand_hit_predictive_prefetch;
648         kstat_named_t arcstat_need_free;
649         kstat_named_t arcstat_sys_free;
650 } arc_stats_t;
651
652 static arc_stats_t arc_stats = {
653         { "hits",                       KSTAT_DATA_UINT64 },
654         { "misses",                     KSTAT_DATA_UINT64 },
655         { "demand_data_hits",           KSTAT_DATA_UINT64 },
656         { "demand_data_misses",         KSTAT_DATA_UINT64 },
657         { "demand_metadata_hits",       KSTAT_DATA_UINT64 },
658         { "demand_metadata_misses",     KSTAT_DATA_UINT64 },
659         { "prefetch_data_hits",         KSTAT_DATA_UINT64 },
660         { "prefetch_data_misses",       KSTAT_DATA_UINT64 },
661         { "prefetch_metadata_hits",     KSTAT_DATA_UINT64 },
662         { "prefetch_metadata_misses",   KSTAT_DATA_UINT64 },
663         { "mru_hits",                   KSTAT_DATA_UINT64 },
664         { "mru_ghost_hits",             KSTAT_DATA_UINT64 },
665         { "mfu_hits",                   KSTAT_DATA_UINT64 },
666         { "mfu_ghost_hits",             KSTAT_DATA_UINT64 },
667         { "deleted",                    KSTAT_DATA_UINT64 },
668         { "mutex_miss",                 KSTAT_DATA_UINT64 },
669         { "evict_skip",                 KSTAT_DATA_UINT64 },
670         { "evict_not_enough",           KSTAT_DATA_UINT64 },
671         { "evict_l2_cached",            KSTAT_DATA_UINT64 },
672         { "evict_l2_eligible",          KSTAT_DATA_UINT64 },
673         { "evict_l2_ineligible",        KSTAT_DATA_UINT64 },
674         { "evict_l2_skip",              KSTAT_DATA_UINT64 },
675         { "hash_elements",              KSTAT_DATA_UINT64 },
676         { "hash_elements_max",          KSTAT_DATA_UINT64 },
677         { "hash_collisions",            KSTAT_DATA_UINT64 },
678         { "hash_chains",                KSTAT_DATA_UINT64 },
679         { "hash_chain_max",             KSTAT_DATA_UINT64 },
680         { "p",                          KSTAT_DATA_UINT64 },
681         { "c",                          KSTAT_DATA_UINT64 },
682         { "c_min",                      KSTAT_DATA_UINT64 },
683         { "c_max",                      KSTAT_DATA_UINT64 },
684         { "size",                       KSTAT_DATA_UINT64 },
685         { "compressed_size",            KSTAT_DATA_UINT64 },
686         { "uncompressed_size",          KSTAT_DATA_UINT64 },
687         { "overhead_size",              KSTAT_DATA_UINT64 },
688         { "hdr_size",                   KSTAT_DATA_UINT64 },
689         { "data_size",                  KSTAT_DATA_UINT64 },
690         { "metadata_size",              KSTAT_DATA_UINT64 },
691         { "dbuf_size",                  KSTAT_DATA_UINT64 },
692         { "dnode_size",                 KSTAT_DATA_UINT64 },
693         { "bonus_size",                 KSTAT_DATA_UINT64 },
694         { "anon_size",                  KSTAT_DATA_UINT64 },
695         { "anon_evictable_data",        KSTAT_DATA_UINT64 },
696         { "anon_evictable_metadata",    KSTAT_DATA_UINT64 },
697         { "mru_size",                   KSTAT_DATA_UINT64 },
698         { "mru_evictable_data",         KSTAT_DATA_UINT64 },
699         { "mru_evictable_metadata",     KSTAT_DATA_UINT64 },
700         { "mru_ghost_size",             KSTAT_DATA_UINT64 },
701         { "mru_ghost_evictable_data",   KSTAT_DATA_UINT64 },
702         { "mru_ghost_evictable_metadata", KSTAT_DATA_UINT64 },
703         { "mfu_size",                   KSTAT_DATA_UINT64 },
704         { "mfu_evictable_data",         KSTAT_DATA_UINT64 },
705         { "mfu_evictable_metadata",     KSTAT_DATA_UINT64 },
706         { "mfu_ghost_size",             KSTAT_DATA_UINT64 },
707         { "mfu_ghost_evictable_data",   KSTAT_DATA_UINT64 },
708         { "mfu_ghost_evictable_metadata", KSTAT_DATA_UINT64 },
709         { "l2_hits",                    KSTAT_DATA_UINT64 },
710         { "l2_misses",                  KSTAT_DATA_UINT64 },
711         { "l2_feeds",                   KSTAT_DATA_UINT64 },
712         { "l2_rw_clash",                KSTAT_DATA_UINT64 },
713         { "l2_read_bytes",              KSTAT_DATA_UINT64 },
714         { "l2_write_bytes",             KSTAT_DATA_UINT64 },
715         { "l2_writes_sent",             KSTAT_DATA_UINT64 },
716         { "l2_writes_done",             KSTAT_DATA_UINT64 },
717         { "l2_writes_error",            KSTAT_DATA_UINT64 },
718         { "l2_writes_lock_retry",       KSTAT_DATA_UINT64 },
719         { "l2_evict_lock_retry",        KSTAT_DATA_UINT64 },
720         { "l2_evict_reading",           KSTAT_DATA_UINT64 },
721         { "l2_evict_l1cached",          KSTAT_DATA_UINT64 },
722         { "l2_free_on_write",           KSTAT_DATA_UINT64 },
723         { "l2_abort_lowmem",            KSTAT_DATA_UINT64 },
724         { "l2_cksum_bad",               KSTAT_DATA_UINT64 },
725         { "l2_io_error",                KSTAT_DATA_UINT64 },
726         { "l2_size",                    KSTAT_DATA_UINT64 },
727         { "l2_asize",                   KSTAT_DATA_UINT64 },
728         { "l2_hdr_size",                KSTAT_DATA_UINT64 },
729         { "memory_throttle_count",      KSTAT_DATA_UINT64 },
730         { "memory_direct_count",        KSTAT_DATA_UINT64 },
731         { "memory_indirect_count",      KSTAT_DATA_UINT64 },
732         { "arc_no_grow",                KSTAT_DATA_UINT64 },
733         { "arc_tempreserve",            KSTAT_DATA_UINT64 },
734         { "arc_loaned_bytes",           KSTAT_DATA_UINT64 },
735         { "arc_prune",                  KSTAT_DATA_UINT64 },
736         { "arc_meta_used",              KSTAT_DATA_UINT64 },
737         { "arc_meta_limit",             KSTAT_DATA_UINT64 },
738         { "arc_dnode_limit",            KSTAT_DATA_UINT64 },
739         { "arc_meta_max",               KSTAT_DATA_UINT64 },
740         { "arc_meta_min",               KSTAT_DATA_UINT64 },
741         { "sync_wait_for_async",        KSTAT_DATA_UINT64 },
742         { "demand_hit_predictive_prefetch", KSTAT_DATA_UINT64 },
743         { "arc_need_free",              KSTAT_DATA_UINT64 },
744         { "arc_sys_free",               KSTAT_DATA_UINT64 }
745 };
746
747 #define ARCSTAT(stat)   (arc_stats.stat.value.ui64)
748
749 #define ARCSTAT_INCR(stat, val) \
750         atomic_add_64(&arc_stats.stat.value.ui64, (val))
751
752 #define ARCSTAT_BUMP(stat)      ARCSTAT_INCR(stat, 1)
753 #define ARCSTAT_BUMPDOWN(stat)  ARCSTAT_INCR(stat, -1)
754
755 #define ARCSTAT_MAX(stat, val) {                                        \
756         uint64_t m;                                                     \
757         while ((val) > (m = arc_stats.stat.value.ui64) &&               \
758             (m != atomic_cas_64(&arc_stats.stat.value.ui64, m, (val)))) \
759                 continue;                                               \
760 }
761
762 #define ARCSTAT_MAXSTAT(stat) \
763         ARCSTAT_MAX(stat##_max, arc_stats.stat.value.ui64)
764
765 /*
766  * We define a macro to allow ARC hits/misses to be easily broken down by
767  * two separate conditions, giving a total of four different subtypes for
768  * each of hits and misses (so eight statistics total).
769  */
770 #define ARCSTAT_CONDSTAT(cond1, stat1, notstat1, cond2, stat2, notstat2, stat) \
771         if (cond1) {                                                    \
772                 if (cond2) {                                            \
773                         ARCSTAT_BUMP(arcstat_##stat1##_##stat2##_##stat); \
774                 } else {                                                \
775                         ARCSTAT_BUMP(arcstat_##stat1##_##notstat2##_##stat); \
776                 }                                                       \
777         } else {                                                        \
778                 if (cond2) {                                            \
779                         ARCSTAT_BUMP(arcstat_##notstat1##_##stat2##_##stat); \
780                 } else {                                                \
781                         ARCSTAT_BUMP(arcstat_##notstat1##_##notstat2##_##stat);\
782                 }                                                       \
783         }
784
785 kstat_t                 *arc_ksp;
786 static arc_state_t      *arc_anon;
787 static arc_state_t      *arc_mru;
788 static arc_state_t      *arc_mru_ghost;
789 static arc_state_t      *arc_mfu;
790 static arc_state_t      *arc_mfu_ghost;
791 static arc_state_t      *arc_l2c_only;
792
793 /*
794  * There are several ARC variables that are critical to export as kstats --
795  * but we don't want to have to grovel around in the kstat whenever we wish to
796  * manipulate them.  For these variables, we therefore define them to be in
797  * terms of the statistic variable.  This assures that we are not introducing
798  * the possibility of inconsistency by having shadow copies of the variables,
799  * while still allowing the code to be readable.
800  */
801 #define arc_size        ARCSTAT(arcstat_size)   /* actual total arc size */
802 #define arc_p           ARCSTAT(arcstat_p)      /* target size of MRU */
803 #define arc_c           ARCSTAT(arcstat_c)      /* target size of cache */
804 #define arc_c_min       ARCSTAT(arcstat_c_min)  /* min target cache size */
805 #define arc_c_max       ARCSTAT(arcstat_c_max)  /* max target cache size */
806 #define arc_no_grow     ARCSTAT(arcstat_no_grow) /* do not grow cache size */
807 #define arc_tempreserve ARCSTAT(arcstat_tempreserve)
808 #define arc_loaned_bytes        ARCSTAT(arcstat_loaned_bytes)
809 #define arc_meta_limit  ARCSTAT(arcstat_meta_limit) /* max size for metadata */
810 #define arc_dnode_limit ARCSTAT(arcstat_dnode_limit) /* max size for dnodes */
811 #define arc_meta_min    ARCSTAT(arcstat_meta_min) /* min size for metadata */
812 #define arc_meta_used   ARCSTAT(arcstat_meta_used) /* size of metadata */
813 #define arc_meta_max    ARCSTAT(arcstat_meta_max) /* max size of metadata */
814 #define arc_dbuf_size   ARCSTAT(arcstat_dbuf_size) /* dbuf metadata */
815 #define arc_dnode_size  ARCSTAT(arcstat_dnode_size) /* dnode metadata */
816 #define arc_bonus_size  ARCSTAT(arcstat_bonus_size) /* bonus buffer metadata */
817 #define arc_need_free   ARCSTAT(arcstat_need_free) /* bytes to be freed */
818 #define arc_sys_free    ARCSTAT(arcstat_sys_free) /* target system free bytes */
819
820 /* compressed size of entire arc */
821 #define arc_compressed_size     ARCSTAT(arcstat_compressed_size)
822 /* uncompressed size of entire arc */
823 #define arc_uncompressed_size   ARCSTAT(arcstat_uncompressed_size)
824 /* number of bytes in the arc from arc_buf_t's */
825 #define arc_overhead_size       ARCSTAT(arcstat_overhead_size)
826
827 static list_t arc_prune_list;
828 static kmutex_t arc_prune_mtx;
829 static taskq_t *arc_prune_taskq;
830
831 #define GHOST_STATE(state)      \
832         ((state) == arc_mru_ghost || (state) == arc_mfu_ghost ||        \
833         (state) == arc_l2c_only)
834
835 #define HDR_IN_HASH_TABLE(hdr)  ((hdr)->b_flags & ARC_FLAG_IN_HASH_TABLE)
836 #define HDR_IO_IN_PROGRESS(hdr) ((hdr)->b_flags & ARC_FLAG_IO_IN_PROGRESS)
837 #define HDR_IO_ERROR(hdr)       ((hdr)->b_flags & ARC_FLAG_IO_ERROR)
838 #define HDR_PREFETCH(hdr)       ((hdr)->b_flags & ARC_FLAG_PREFETCH)
839 #define HDR_COMPRESSION_ENABLED(hdr)    \
840         ((hdr)->b_flags & ARC_FLAG_COMPRESSED_ARC)
841
842 #define HDR_L2CACHE(hdr)        ((hdr)->b_flags & ARC_FLAG_L2CACHE)
843 #define HDR_L2_READING(hdr)     \
844         (((hdr)->b_flags & ARC_FLAG_IO_IN_PROGRESS) &&  \
845         ((hdr)->b_flags & ARC_FLAG_HAS_L2HDR))
846 #define HDR_L2_WRITING(hdr)     ((hdr)->b_flags & ARC_FLAG_L2_WRITING)
847 #define HDR_L2_EVICTED(hdr)     ((hdr)->b_flags & ARC_FLAG_L2_EVICTED)
848 #define HDR_L2_WRITE_HEAD(hdr)  ((hdr)->b_flags & ARC_FLAG_L2_WRITE_HEAD)
849 #define HDR_SHARED_DATA(hdr)    ((hdr)->b_flags & ARC_FLAG_SHARED_DATA)
850
851 #define HDR_ISTYPE_METADATA(hdr)        \
852         ((hdr)->b_flags & ARC_FLAG_BUFC_METADATA)
853 #define HDR_ISTYPE_DATA(hdr)    (!HDR_ISTYPE_METADATA(hdr))
854
855 #define HDR_HAS_L1HDR(hdr)      ((hdr)->b_flags & ARC_FLAG_HAS_L1HDR)
856 #define HDR_HAS_L2HDR(hdr)      ((hdr)->b_flags & ARC_FLAG_HAS_L2HDR)
857
858 /* For storing compression mode in b_flags */
859 #define HDR_COMPRESS_OFFSET     (highbit64(ARC_FLAG_COMPRESS_0) - 1)
860
861 #define HDR_GET_COMPRESS(hdr)   ((enum zio_compress)BF32_GET((hdr)->b_flags, \
862         HDR_COMPRESS_OFFSET, SPA_COMPRESSBITS))
863 #define HDR_SET_COMPRESS(hdr, cmp) BF32_SET((hdr)->b_flags, \
864         HDR_COMPRESS_OFFSET, SPA_COMPRESSBITS, (cmp));
865
866 #define ARC_BUF_LAST(buf)       ((buf)->b_next == NULL)
867 #define ARC_BUF_SHARED(buf)     ((buf)->b_flags & ARC_BUF_FLAG_SHARED)
868 #define ARC_BUF_COMPRESSED(buf) ((buf)->b_flags & ARC_BUF_FLAG_COMPRESSED)
869
870 /*
871  * Other sizes
872  */
873
874 #define HDR_FULL_SIZE ((int64_t)sizeof (arc_buf_hdr_t))
875 #define HDR_L2ONLY_SIZE ((int64_t)offsetof(arc_buf_hdr_t, b_l1hdr))
876
877 /*
878  * Hash table routines
879  */
880
881 #define HT_LOCK_ALIGN   64
882 #define HT_LOCK_PAD     (P2NPHASE(sizeof (kmutex_t), (HT_LOCK_ALIGN)))
883
884 struct ht_lock {
885         kmutex_t        ht_lock;
886 #ifdef _KERNEL
887         unsigned char   pad[HT_LOCK_PAD];
888 #endif
889 };
890
891 #define BUF_LOCKS 8192
892 typedef struct buf_hash_table {
893         uint64_t ht_mask;
894         arc_buf_hdr_t **ht_table;
895         struct ht_lock ht_locks[BUF_LOCKS];
896 } buf_hash_table_t;
897
898 static buf_hash_table_t buf_hash_table;
899
900 #define BUF_HASH_INDEX(spa, dva, birth) \
901         (buf_hash(spa, dva, birth) & buf_hash_table.ht_mask)
902 #define BUF_HASH_LOCK_NTRY(idx) (buf_hash_table.ht_locks[idx & (BUF_LOCKS-1)])
903 #define BUF_HASH_LOCK(idx)      (&(BUF_HASH_LOCK_NTRY(idx).ht_lock))
904 #define HDR_LOCK(hdr) \
905         (BUF_HASH_LOCK(BUF_HASH_INDEX(hdr->b_spa, &hdr->b_dva, hdr->b_birth)))
906
907 uint64_t zfs_crc64_table[256];
908
909 /*
910  * Level 2 ARC
911  */
912
913 #define L2ARC_WRITE_SIZE        (8 * 1024 * 1024)       /* initial write max */
914 #define L2ARC_HEADROOM          2                       /* num of writes */
915
916 /*
917  * If we discover during ARC scan any buffers to be compressed, we boost
918  * our headroom for the next scanning cycle by this percentage multiple.
919  */
920 #define L2ARC_HEADROOM_BOOST    200
921 #define L2ARC_FEED_SECS         1               /* caching interval secs */
922 #define L2ARC_FEED_MIN_MS       200             /* min caching interval ms */
923
924 /*
925  * We can feed L2ARC from two states of ARC buffers, mru and mfu,
926  * and each of the state has two types: data and metadata.
927  */
928 #define L2ARC_FEED_TYPES        4
929
930 #define l2arc_writes_sent       ARCSTAT(arcstat_l2_writes_sent)
931 #define l2arc_writes_done       ARCSTAT(arcstat_l2_writes_done)
932
933 /* L2ARC Performance Tunables */
934 unsigned long l2arc_write_max = L2ARC_WRITE_SIZE;       /* def max write size */
935 unsigned long l2arc_write_boost = L2ARC_WRITE_SIZE;     /* extra warmup write */
936 unsigned long l2arc_headroom = L2ARC_HEADROOM;          /* # of dev writes */
937 unsigned long l2arc_headroom_boost = L2ARC_HEADROOM_BOOST;
938 unsigned long l2arc_feed_secs = L2ARC_FEED_SECS;        /* interval seconds */
939 unsigned long l2arc_feed_min_ms = L2ARC_FEED_MIN_MS;    /* min interval msecs */
940 int l2arc_noprefetch = B_TRUE;                  /* don't cache prefetch bufs */
941 int l2arc_feed_again = B_TRUE;                  /* turbo warmup */
942 int l2arc_norw = B_FALSE;                       /* no reads during writes */
943
944 /*
945  * L2ARC Internals
946  */
947 static list_t L2ARC_dev_list;                   /* device list */
948 static list_t *l2arc_dev_list;                  /* device list pointer */
949 static kmutex_t l2arc_dev_mtx;                  /* device list mutex */
950 static l2arc_dev_t *l2arc_dev_last;             /* last device used */
951 static list_t L2ARC_free_on_write;              /* free after write buf list */
952 static list_t *l2arc_free_on_write;             /* free after write list ptr */
953 static kmutex_t l2arc_free_on_write_mtx;        /* mutex for list */
954 static uint64_t l2arc_ndev;                     /* number of devices */
955
956 typedef struct l2arc_read_callback {
957         arc_buf_hdr_t           *l2rcb_hdr;             /* read header */
958         blkptr_t                l2rcb_bp;               /* original blkptr */
959         zbookmark_phys_t        l2rcb_zb;               /* original bookmark */
960         int                     l2rcb_flags;            /* original flags */
961 } l2arc_read_callback_t;
962
963 typedef struct l2arc_data_free {
964         /* protected by l2arc_free_on_write_mtx */
965         abd_t           *l2df_abd;
966         size_t          l2df_size;
967         arc_buf_contents_t l2df_type;
968         list_node_t     l2df_list_node;
969 } l2arc_data_free_t;
970
971 static kmutex_t l2arc_feed_thr_lock;
972 static kcondvar_t l2arc_feed_thr_cv;
973 static uint8_t l2arc_thread_exit;
974
975 static abd_t *arc_get_data_abd(arc_buf_hdr_t *, uint64_t, void *);
976 static void *arc_get_data_buf(arc_buf_hdr_t *, uint64_t, void *);
977 static void arc_get_data_impl(arc_buf_hdr_t *, uint64_t, void *);
978 static void arc_free_data_abd(arc_buf_hdr_t *, abd_t *, uint64_t, void *);
979 static void arc_free_data_buf(arc_buf_hdr_t *, void *, uint64_t, void *);
980 static void arc_free_data_impl(arc_buf_hdr_t *hdr, uint64_t size, void *tag);
981 static void arc_hdr_free_pabd(arc_buf_hdr_t *);
982 static void arc_hdr_alloc_pabd(arc_buf_hdr_t *);
983 static void arc_access(arc_buf_hdr_t *, kmutex_t *);
984 static boolean_t arc_is_overflowing(void);
985 static void arc_buf_watch(arc_buf_t *);
986 static void arc_tuning_update(void);
987 static void arc_prune_async(int64_t);
988 static uint64_t arc_all_memory(void);
989
990 static arc_buf_contents_t arc_buf_type(arc_buf_hdr_t *);
991 static uint32_t arc_bufc_to_flags(arc_buf_contents_t);
992 static inline void arc_hdr_set_flags(arc_buf_hdr_t *hdr, arc_flags_t flags);
993 static inline void arc_hdr_clear_flags(arc_buf_hdr_t *hdr, arc_flags_t flags);
994
995 static boolean_t l2arc_write_eligible(uint64_t, arc_buf_hdr_t *);
996 static void l2arc_read_done(zio_t *);
997
998 static uint64_t
999 buf_hash(uint64_t spa, const dva_t *dva, uint64_t birth)
1000 {
1001         uint8_t *vdva = (uint8_t *)dva;
1002         uint64_t crc = -1ULL;
1003         int i;
1004
1005         ASSERT(zfs_crc64_table[128] == ZFS_CRC64_POLY);
1006
1007         for (i = 0; i < sizeof (dva_t); i++)
1008                 crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ vdva[i]) & 0xFF];
1009
1010         crc ^= (spa>>8) ^ birth;
1011
1012         return (crc);
1013 }
1014
1015 #define HDR_EMPTY(hdr)                                          \
1016         ((hdr)->b_dva.dva_word[0] == 0 &&                       \
1017         (hdr)->b_dva.dva_word[1] == 0)
1018
1019 #define HDR_EQUAL(spa, dva, birth, hdr)                         \
1020         ((hdr)->b_dva.dva_word[0] == (dva)->dva_word[0]) &&     \
1021         ((hdr)->b_dva.dva_word[1] == (dva)->dva_word[1]) &&     \
1022         ((hdr)->b_birth == birth) && ((hdr)->b_spa == spa)
1023
1024 static void
1025 buf_discard_identity(arc_buf_hdr_t *hdr)
1026 {
1027         hdr->b_dva.dva_word[0] = 0;
1028         hdr->b_dva.dva_word[1] = 0;
1029         hdr->b_birth = 0;
1030 }
1031
1032 static arc_buf_hdr_t *
1033 buf_hash_find(uint64_t spa, const blkptr_t *bp, kmutex_t **lockp)
1034 {
1035         const dva_t *dva = BP_IDENTITY(bp);
1036         uint64_t birth = BP_PHYSICAL_BIRTH(bp);
1037         uint64_t idx = BUF_HASH_INDEX(spa, dva, birth);
1038         kmutex_t *hash_lock = BUF_HASH_LOCK(idx);
1039         arc_buf_hdr_t *hdr;
1040
1041         mutex_enter(hash_lock);
1042         for (hdr = buf_hash_table.ht_table[idx]; hdr != NULL;
1043             hdr = hdr->b_hash_next) {
1044                 if (HDR_EQUAL(spa, dva, birth, hdr)) {
1045                         *lockp = hash_lock;
1046                         return (hdr);
1047                 }
1048         }
1049         mutex_exit(hash_lock);
1050         *lockp = NULL;
1051         return (NULL);
1052 }
1053
1054 /*
1055  * Insert an entry into the hash table.  If there is already an element
1056  * equal to elem in the hash table, then the already existing element
1057  * will be returned and the new element will not be inserted.
1058  * Otherwise returns NULL.
1059  * If lockp == NULL, the caller is assumed to already hold the hash lock.
1060  */
1061 static arc_buf_hdr_t *
1062 buf_hash_insert(arc_buf_hdr_t *hdr, kmutex_t **lockp)
1063 {
1064         uint64_t idx = BUF_HASH_INDEX(hdr->b_spa, &hdr->b_dva, hdr->b_birth);
1065         kmutex_t *hash_lock = BUF_HASH_LOCK(idx);
1066         arc_buf_hdr_t *fhdr;
1067         uint32_t i;
1068
1069         ASSERT(!DVA_IS_EMPTY(&hdr->b_dva));
1070         ASSERT(hdr->b_birth != 0);
1071         ASSERT(!HDR_IN_HASH_TABLE(hdr));
1072
1073         if (lockp != NULL) {
1074                 *lockp = hash_lock;
1075                 mutex_enter(hash_lock);
1076         } else {
1077                 ASSERT(MUTEX_HELD(hash_lock));
1078         }
1079
1080         for (fhdr = buf_hash_table.ht_table[idx], i = 0; fhdr != NULL;
1081             fhdr = fhdr->b_hash_next, i++) {
1082                 if (HDR_EQUAL(hdr->b_spa, &hdr->b_dva, hdr->b_birth, fhdr))
1083                         return (fhdr);
1084         }
1085
1086         hdr->b_hash_next = buf_hash_table.ht_table[idx];
1087         buf_hash_table.ht_table[idx] = hdr;
1088         arc_hdr_set_flags(hdr, ARC_FLAG_IN_HASH_TABLE);
1089
1090         /* collect some hash table performance data */
1091         if (i > 0) {
1092                 ARCSTAT_BUMP(arcstat_hash_collisions);
1093                 if (i == 1)
1094                         ARCSTAT_BUMP(arcstat_hash_chains);
1095
1096                 ARCSTAT_MAX(arcstat_hash_chain_max, i);
1097         }
1098
1099         ARCSTAT_BUMP(arcstat_hash_elements);
1100         ARCSTAT_MAXSTAT(arcstat_hash_elements);
1101
1102         return (NULL);
1103 }
1104
1105 static void
1106 buf_hash_remove(arc_buf_hdr_t *hdr)
1107 {
1108         arc_buf_hdr_t *fhdr, **hdrp;
1109         uint64_t idx = BUF_HASH_INDEX(hdr->b_spa, &hdr->b_dva, hdr->b_birth);
1110
1111         ASSERT(MUTEX_HELD(BUF_HASH_LOCK(idx)));
1112         ASSERT(HDR_IN_HASH_TABLE(hdr));
1113
1114         hdrp = &buf_hash_table.ht_table[idx];
1115         while ((fhdr = *hdrp) != hdr) {
1116                 ASSERT3P(fhdr, !=, NULL);
1117                 hdrp = &fhdr->b_hash_next;
1118         }
1119         *hdrp = hdr->b_hash_next;
1120         hdr->b_hash_next = NULL;
1121         arc_hdr_clear_flags(hdr, ARC_FLAG_IN_HASH_TABLE);
1122
1123         /* collect some hash table performance data */
1124         ARCSTAT_BUMPDOWN(arcstat_hash_elements);
1125
1126         if (buf_hash_table.ht_table[idx] &&
1127             buf_hash_table.ht_table[idx]->b_hash_next == NULL)
1128                 ARCSTAT_BUMPDOWN(arcstat_hash_chains);
1129 }
1130
1131 /*
1132  * Global data structures and functions for the buf kmem cache.
1133  */
1134 static kmem_cache_t *hdr_full_cache;
1135 static kmem_cache_t *hdr_l2only_cache;
1136 static kmem_cache_t *buf_cache;
1137
1138 static void
1139 buf_fini(void)
1140 {
1141         int i;
1142
1143 #if defined(_KERNEL) && defined(HAVE_SPL)
1144         /*
1145          * Large allocations which do not require contiguous pages
1146          * should be using vmem_free() in the linux kernel\
1147          */
1148         vmem_free(buf_hash_table.ht_table,
1149             (buf_hash_table.ht_mask + 1) * sizeof (void *));
1150 #else
1151         kmem_free(buf_hash_table.ht_table,
1152             (buf_hash_table.ht_mask + 1) * sizeof (void *));
1153 #endif
1154         for (i = 0; i < BUF_LOCKS; i++)
1155                 mutex_destroy(&buf_hash_table.ht_locks[i].ht_lock);
1156         kmem_cache_destroy(hdr_full_cache);
1157         kmem_cache_destroy(hdr_l2only_cache);
1158         kmem_cache_destroy(buf_cache);
1159 }
1160
1161 /*
1162  * Constructor callback - called when the cache is empty
1163  * and a new buf is requested.
1164  */
1165 /* ARGSUSED */
1166 static int
1167 hdr_full_cons(void *vbuf, void *unused, int kmflag)
1168 {
1169         arc_buf_hdr_t *hdr = vbuf;
1170
1171         bzero(hdr, HDR_FULL_SIZE);
1172         cv_init(&hdr->b_l1hdr.b_cv, NULL, CV_DEFAULT, NULL);
1173         refcount_create(&hdr->b_l1hdr.b_refcnt);
1174         mutex_init(&hdr->b_l1hdr.b_freeze_lock, NULL, MUTEX_DEFAULT, NULL);
1175         list_link_init(&hdr->b_l1hdr.b_arc_node);
1176         list_link_init(&hdr->b_l2hdr.b_l2node);
1177         multilist_link_init(&hdr->b_l1hdr.b_arc_node);
1178         arc_space_consume(HDR_FULL_SIZE, ARC_SPACE_HDRS);
1179
1180         return (0);
1181 }
1182
1183 /* ARGSUSED */
1184 static int
1185 hdr_l2only_cons(void *vbuf, void *unused, int kmflag)
1186 {
1187         arc_buf_hdr_t *hdr = vbuf;
1188
1189         bzero(hdr, HDR_L2ONLY_SIZE);
1190         arc_space_consume(HDR_L2ONLY_SIZE, ARC_SPACE_L2HDRS);
1191
1192         return (0);
1193 }
1194
1195 /* ARGSUSED */
1196 static int
1197 buf_cons(void *vbuf, void *unused, int kmflag)
1198 {
1199         arc_buf_t *buf = vbuf;
1200
1201         bzero(buf, sizeof (arc_buf_t));
1202         mutex_init(&buf->b_evict_lock, NULL, MUTEX_DEFAULT, NULL);
1203         arc_space_consume(sizeof (arc_buf_t), ARC_SPACE_HDRS);
1204
1205         return (0);
1206 }
1207
1208 /*
1209  * Destructor callback - called when a cached buf is
1210  * no longer required.
1211  */
1212 /* ARGSUSED */
1213 static void
1214 hdr_full_dest(void *vbuf, void *unused)
1215 {
1216         arc_buf_hdr_t *hdr = vbuf;
1217
1218         ASSERT(HDR_EMPTY(hdr));
1219         cv_destroy(&hdr->b_l1hdr.b_cv);
1220         refcount_destroy(&hdr->b_l1hdr.b_refcnt);
1221         mutex_destroy(&hdr->b_l1hdr.b_freeze_lock);
1222         ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node));
1223         arc_space_return(HDR_FULL_SIZE, ARC_SPACE_HDRS);
1224 }
1225
1226 /* ARGSUSED */
1227 static void
1228 hdr_l2only_dest(void *vbuf, void *unused)
1229 {
1230         ASSERTV(arc_buf_hdr_t *hdr = vbuf);
1231
1232         ASSERT(HDR_EMPTY(hdr));
1233         arc_space_return(HDR_L2ONLY_SIZE, ARC_SPACE_L2HDRS);
1234 }
1235
1236 /* ARGSUSED */
1237 static void
1238 buf_dest(void *vbuf, void *unused)
1239 {
1240         arc_buf_t *buf = vbuf;
1241
1242         mutex_destroy(&buf->b_evict_lock);
1243         arc_space_return(sizeof (arc_buf_t), ARC_SPACE_HDRS);
1244 }
1245
1246 /*
1247  * Reclaim callback -- invoked when memory is low.
1248  */
1249 /* ARGSUSED */
1250 static void
1251 hdr_recl(void *unused)
1252 {
1253         dprintf("hdr_recl called\n");
1254         /*
1255          * umem calls the reclaim func when we destroy the buf cache,
1256          * which is after we do arc_fini().
1257          */
1258         if (!arc_dead)
1259                 cv_signal(&arc_reclaim_thread_cv);
1260 }
1261
1262 static void
1263 buf_init(void)
1264 {
1265         uint64_t *ct = NULL;
1266         uint64_t hsize = 1ULL << 12;
1267         int i, j;
1268
1269         /*
1270          * The hash table is big enough to fill all of physical memory
1271          * with an average block size of zfs_arc_average_blocksize (default 8K).
1272          * By default, the table will take up
1273          * totalmem * sizeof(void*) / 8K (1MB per GB with 8-byte pointers).
1274          */
1275         while (hsize * zfs_arc_average_blocksize < arc_all_memory())
1276                 hsize <<= 1;
1277 retry:
1278         buf_hash_table.ht_mask = hsize - 1;
1279 #if defined(_KERNEL) && defined(HAVE_SPL)
1280         /*
1281          * Large allocations which do not require contiguous pages
1282          * should be using vmem_alloc() in the linux kernel
1283          */
1284         buf_hash_table.ht_table =
1285             vmem_zalloc(hsize * sizeof (void*), KM_SLEEP);
1286 #else
1287         buf_hash_table.ht_table =
1288             kmem_zalloc(hsize * sizeof (void*), KM_NOSLEEP);
1289 #endif
1290         if (buf_hash_table.ht_table == NULL) {
1291                 ASSERT(hsize > (1ULL << 8));
1292                 hsize >>= 1;
1293                 goto retry;
1294         }
1295
1296         hdr_full_cache = kmem_cache_create("arc_buf_hdr_t_full", HDR_FULL_SIZE,
1297             0, hdr_full_cons, hdr_full_dest, hdr_recl, NULL, NULL, 0);
1298         hdr_l2only_cache = kmem_cache_create("arc_buf_hdr_t_l2only",
1299             HDR_L2ONLY_SIZE, 0, hdr_l2only_cons, hdr_l2only_dest, hdr_recl,
1300             NULL, NULL, 0);
1301         buf_cache = kmem_cache_create("arc_buf_t", sizeof (arc_buf_t),
1302             0, buf_cons, buf_dest, NULL, NULL, NULL, 0);
1303
1304         for (i = 0; i < 256; i++)
1305                 for (ct = zfs_crc64_table + i, *ct = i, j = 8; j > 0; j--)
1306                         *ct = (*ct >> 1) ^ (-(*ct & 1) & ZFS_CRC64_POLY);
1307
1308         for (i = 0; i < BUF_LOCKS; i++) {
1309                 mutex_init(&buf_hash_table.ht_locks[i].ht_lock,
1310                     NULL, MUTEX_DEFAULT, NULL);
1311         }
1312 }
1313
1314 #define ARC_MINTIME     (hz>>4) /* 62 ms */
1315
1316 /*
1317  * This is the size that the buf occupies in memory. If the buf is compressed,
1318  * it will correspond to the compressed size. You should use this method of
1319  * getting the buf size unless you explicitly need the logical size.
1320  */
1321 uint64_t
1322 arc_buf_size(arc_buf_t *buf)
1323 {
1324         return (ARC_BUF_COMPRESSED(buf) ?
1325             HDR_GET_PSIZE(buf->b_hdr) : HDR_GET_LSIZE(buf->b_hdr));
1326 }
1327
1328 uint64_t
1329 arc_buf_lsize(arc_buf_t *buf)
1330 {
1331         return (HDR_GET_LSIZE(buf->b_hdr));
1332 }
1333
1334 enum zio_compress
1335 arc_get_compression(arc_buf_t *buf)
1336 {
1337         return (ARC_BUF_COMPRESSED(buf) ?
1338             HDR_GET_COMPRESS(buf->b_hdr) : ZIO_COMPRESS_OFF);
1339 }
1340
1341 static inline boolean_t
1342 arc_buf_is_shared(arc_buf_t *buf)
1343 {
1344         boolean_t shared = (buf->b_data != NULL &&
1345             buf->b_hdr->b_l1hdr.b_pabd != NULL &&
1346             abd_is_linear(buf->b_hdr->b_l1hdr.b_pabd) &&
1347             buf->b_data == abd_to_buf(buf->b_hdr->b_l1hdr.b_pabd));
1348         IMPLY(shared, HDR_SHARED_DATA(buf->b_hdr));
1349         IMPLY(shared, ARC_BUF_SHARED(buf));
1350         IMPLY(shared, ARC_BUF_COMPRESSED(buf) || ARC_BUF_LAST(buf));
1351
1352         /*
1353          * It would be nice to assert arc_can_share() too, but the "hdr isn't
1354          * already being shared" requirement prevents us from doing that.
1355          */
1356
1357         return (shared);
1358 }
1359
1360 static inline void
1361 arc_cksum_free(arc_buf_hdr_t *hdr)
1362 {
1363         ASSERT(HDR_HAS_L1HDR(hdr));
1364         mutex_enter(&hdr->b_l1hdr.b_freeze_lock);
1365         if (hdr->b_l1hdr.b_freeze_cksum != NULL) {
1366                 kmem_free(hdr->b_l1hdr.b_freeze_cksum, sizeof (zio_cksum_t));
1367                 hdr->b_l1hdr.b_freeze_cksum = NULL;
1368         }
1369         mutex_exit(&hdr->b_l1hdr.b_freeze_lock);
1370 }
1371
1372 /*
1373  * If we've turned on the ZFS_DEBUG_MODIFY flag, verify that the buf's data
1374  * matches the checksum that is stored in the hdr. If there is no checksum,
1375  * or if the buf is compressed, this is a no-op.
1376  */
1377 static void
1378 arc_cksum_verify(arc_buf_t *buf)
1379 {
1380         arc_buf_hdr_t *hdr = buf->b_hdr;
1381         zio_cksum_t zc;
1382
1383         if (!(zfs_flags & ZFS_DEBUG_MODIFY))
1384                 return;
1385
1386         if (ARC_BUF_COMPRESSED(buf)) {
1387                 return;
1388         }
1389
1390         ASSERT(HDR_HAS_L1HDR(hdr));
1391
1392         mutex_enter(&hdr->b_l1hdr.b_freeze_lock);
1393         if (hdr->b_l1hdr.b_freeze_cksum == NULL || HDR_IO_ERROR(hdr)) {
1394                 mutex_exit(&hdr->b_l1hdr.b_freeze_lock);
1395                 return;
1396         }
1397
1398         fletcher_2_native(buf->b_data, arc_buf_size(buf), NULL, &zc);
1399         if (!ZIO_CHECKSUM_EQUAL(*hdr->b_l1hdr.b_freeze_cksum, zc))
1400                 panic("buffer modified while frozen!");
1401         mutex_exit(&hdr->b_l1hdr.b_freeze_lock);
1402 }
1403
1404 static boolean_t
1405 arc_cksum_is_equal(arc_buf_hdr_t *hdr, zio_t *zio)
1406 {
1407         enum zio_compress compress = BP_GET_COMPRESS(zio->io_bp);
1408         boolean_t valid_cksum;
1409
1410         ASSERT(!BP_IS_EMBEDDED(zio->io_bp));
1411         VERIFY3U(BP_GET_PSIZE(zio->io_bp), ==, HDR_GET_PSIZE(hdr));
1412
1413         /*
1414          * We rely on the blkptr's checksum to determine if the block
1415          * is valid or not. When compressed arc is enabled, the l2arc
1416          * writes the block to the l2arc just as it appears in the pool.
1417          * This allows us to use the blkptr's checksum to validate the
1418          * data that we just read off of the l2arc without having to store
1419          * a separate checksum in the arc_buf_hdr_t. However, if compressed
1420          * arc is disabled, then the data written to the l2arc is always
1421          * uncompressed and won't match the block as it exists in the main
1422          * pool. When this is the case, we must first compress it if it is
1423          * compressed on the main pool before we can validate the checksum.
1424          */
1425         if (!HDR_COMPRESSION_ENABLED(hdr) && compress != ZIO_COMPRESS_OFF) {
1426                 uint64_t lsize;
1427                 uint64_t csize;
1428                 void *cbuf;
1429                 ASSERT3U(HDR_GET_COMPRESS(hdr), ==, ZIO_COMPRESS_OFF);
1430
1431                 cbuf = zio_buf_alloc(HDR_GET_PSIZE(hdr));
1432                 lsize = HDR_GET_LSIZE(hdr);
1433                 csize = zio_compress_data(compress, zio->io_abd, cbuf, lsize);
1434
1435                 ASSERT3U(csize, <=, HDR_GET_PSIZE(hdr));
1436                 if (csize < HDR_GET_PSIZE(hdr)) {
1437                         /*
1438                          * Compressed blocks are always a multiple of the
1439                          * smallest ashift in the pool. Ideally, we would
1440                          * like to round up the csize to the next
1441                          * spa_min_ashift but that value may have changed
1442                          * since the block was last written. Instead,
1443                          * we rely on the fact that the hdr's psize
1444                          * was set to the psize of the block when it was
1445                          * last written. We set the csize to that value
1446                          * and zero out any part that should not contain
1447                          * data.
1448                          */
1449                         bzero((char *)cbuf + csize, HDR_GET_PSIZE(hdr) - csize);
1450                         csize = HDR_GET_PSIZE(hdr);
1451                 }
1452                 zio_push_transform(zio, cbuf, csize, HDR_GET_PSIZE(hdr), NULL);
1453         }
1454
1455         /*
1456          * Block pointers always store the checksum for the logical data.
1457          * If the block pointer has the gang bit set, then the checksum
1458          * it represents is for the reconstituted data and not for an
1459          * individual gang member. The zio pipeline, however, must be able to
1460          * determine the checksum of each of the gang constituents so it
1461          * treats the checksum comparison differently than what we need
1462          * for l2arc blocks. This prevents us from using the
1463          * zio_checksum_error() interface directly. Instead we must call the
1464          * zio_checksum_error_impl() so that we can ensure the checksum is
1465          * generated using the correct checksum algorithm and accounts for the
1466          * logical I/O size and not just a gang fragment.
1467          */
1468         valid_cksum = (zio_checksum_error_impl(zio->io_spa, zio->io_bp,
1469             BP_GET_CHECKSUM(zio->io_bp), zio->io_abd, zio->io_size,
1470             zio->io_offset, NULL) == 0);
1471         zio_pop_transforms(zio);
1472         return (valid_cksum);
1473 }
1474
1475 /*
1476  * Given a buf full of data, if ZFS_DEBUG_MODIFY is enabled this computes a
1477  * checksum and attaches it to the buf's hdr so that we can ensure that the buf
1478  * isn't modified later on. If buf is compressed or there is already a checksum
1479  * on the hdr, this is a no-op (we only checksum uncompressed bufs).
1480  */
1481 static void
1482 arc_cksum_compute(arc_buf_t *buf)
1483 {
1484         arc_buf_hdr_t *hdr = buf->b_hdr;
1485
1486         if (!(zfs_flags & ZFS_DEBUG_MODIFY))
1487                 return;
1488
1489         ASSERT(HDR_HAS_L1HDR(hdr));
1490
1491         mutex_enter(&buf->b_hdr->b_l1hdr.b_freeze_lock);
1492         if (hdr->b_l1hdr.b_freeze_cksum != NULL) {
1493                 mutex_exit(&hdr->b_l1hdr.b_freeze_lock);
1494                 return;
1495         } else if (ARC_BUF_COMPRESSED(buf)) {
1496                 mutex_exit(&hdr->b_l1hdr.b_freeze_lock);
1497                 return;
1498         }
1499
1500         ASSERT(!ARC_BUF_COMPRESSED(buf));
1501         hdr->b_l1hdr.b_freeze_cksum = kmem_alloc(sizeof (zio_cksum_t),
1502             KM_SLEEP);
1503         fletcher_2_native(buf->b_data, arc_buf_size(buf), NULL,
1504             hdr->b_l1hdr.b_freeze_cksum);
1505         mutex_exit(&hdr->b_l1hdr.b_freeze_lock);
1506         arc_buf_watch(buf);
1507 }
1508
1509 #ifndef _KERNEL
1510 void
1511 arc_buf_sigsegv(int sig, siginfo_t *si, void *unused)
1512 {
1513         panic("Got SIGSEGV at address: 0x%lx\n", (long) si->si_addr);
1514 }
1515 #endif
1516
1517 /* ARGSUSED */
1518 static void
1519 arc_buf_unwatch(arc_buf_t *buf)
1520 {
1521 #ifndef _KERNEL
1522         if (arc_watch) {
1523                 ASSERT0(mprotect(buf->b_data, HDR_GET_LSIZE(buf->b_hdr),
1524                     PROT_READ | PROT_WRITE));
1525         }
1526 #endif
1527 }
1528
1529 /* ARGSUSED */
1530 static void
1531 arc_buf_watch(arc_buf_t *buf)
1532 {
1533 #ifndef _KERNEL
1534         if (arc_watch)
1535                 ASSERT0(mprotect(buf->b_data, arc_buf_size(buf),
1536                     PROT_READ));
1537 #endif
1538 }
1539
1540 static arc_buf_contents_t
1541 arc_buf_type(arc_buf_hdr_t *hdr)
1542 {
1543         arc_buf_contents_t type;
1544         if (HDR_ISTYPE_METADATA(hdr)) {
1545                 type = ARC_BUFC_METADATA;
1546         } else {
1547                 type = ARC_BUFC_DATA;
1548         }
1549         VERIFY3U(hdr->b_type, ==, type);
1550         return (type);
1551 }
1552
1553 boolean_t
1554 arc_is_metadata(arc_buf_t *buf)
1555 {
1556         return (HDR_ISTYPE_METADATA(buf->b_hdr) != 0);
1557 }
1558
1559 static uint32_t
1560 arc_bufc_to_flags(arc_buf_contents_t type)
1561 {
1562         switch (type) {
1563         case ARC_BUFC_DATA:
1564                 /* metadata field is 0 if buffer contains normal data */
1565                 return (0);
1566         case ARC_BUFC_METADATA:
1567                 return (ARC_FLAG_BUFC_METADATA);
1568         default:
1569                 break;
1570         }
1571         panic("undefined ARC buffer type!");
1572         return ((uint32_t)-1);
1573 }
1574
1575 void
1576 arc_buf_thaw(arc_buf_t *buf)
1577 {
1578         arc_buf_hdr_t *hdr = buf->b_hdr;
1579
1580         ASSERT3P(hdr->b_l1hdr.b_state, ==, arc_anon);
1581         ASSERT(!HDR_IO_IN_PROGRESS(hdr));
1582
1583         arc_cksum_verify(buf);
1584
1585         /*
1586          * Compressed buffers do not manipulate the b_freeze_cksum or
1587          * allocate b_thawed.
1588          */
1589         if (ARC_BUF_COMPRESSED(buf)) {
1590                 return;
1591         }
1592
1593         ASSERT(HDR_HAS_L1HDR(hdr));
1594         arc_cksum_free(hdr);
1595         arc_buf_unwatch(buf);
1596 }
1597
1598 void
1599 arc_buf_freeze(arc_buf_t *buf)
1600 {
1601         arc_buf_hdr_t *hdr = buf->b_hdr;
1602         kmutex_t *hash_lock;
1603
1604         if (!(zfs_flags & ZFS_DEBUG_MODIFY))
1605                 return;
1606
1607         if (ARC_BUF_COMPRESSED(buf)) {
1608                 return;
1609         }
1610
1611         hash_lock = HDR_LOCK(hdr);
1612         mutex_enter(hash_lock);
1613
1614         ASSERT(HDR_HAS_L1HDR(hdr));
1615         ASSERT(hdr->b_l1hdr.b_freeze_cksum != NULL ||
1616             hdr->b_l1hdr.b_state == arc_anon);
1617         arc_cksum_compute(buf);
1618         mutex_exit(hash_lock);
1619 }
1620
1621 /*
1622  * The arc_buf_hdr_t's b_flags should never be modified directly. Instead,
1623  * the following functions should be used to ensure that the flags are
1624  * updated in a thread-safe way. When manipulating the flags either
1625  * the hash_lock must be held or the hdr must be undiscoverable. This
1626  * ensures that we're not racing with any other threads when updating
1627  * the flags.
1628  */
1629 static inline void
1630 arc_hdr_set_flags(arc_buf_hdr_t *hdr, arc_flags_t flags)
1631 {
1632         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
1633         hdr->b_flags |= flags;
1634 }
1635
1636 static inline void
1637 arc_hdr_clear_flags(arc_buf_hdr_t *hdr, arc_flags_t flags)
1638 {
1639         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
1640         hdr->b_flags &= ~flags;
1641 }
1642
1643 /*
1644  * Setting the compression bits in the arc_buf_hdr_t's b_flags is
1645  * done in a special way since we have to clear and set bits
1646  * at the same time. Consumers that wish to set the compression bits
1647  * must use this function to ensure that the flags are updated in
1648  * thread-safe manner.
1649  */
1650 static void
1651 arc_hdr_set_compress(arc_buf_hdr_t *hdr, enum zio_compress cmp)
1652 {
1653         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
1654
1655         /*
1656          * Holes and embedded blocks will always have a psize = 0 so
1657          * we ignore the compression of the blkptr and set the
1658          * want to uncompress them. Mark them as uncompressed.
1659          */
1660         if (!zfs_compressed_arc_enabled || HDR_GET_PSIZE(hdr) == 0) {
1661                 arc_hdr_clear_flags(hdr, ARC_FLAG_COMPRESSED_ARC);
1662                 HDR_SET_COMPRESS(hdr, ZIO_COMPRESS_OFF);
1663                 ASSERT(!HDR_COMPRESSION_ENABLED(hdr));
1664                 ASSERT3U(HDR_GET_COMPRESS(hdr), ==, ZIO_COMPRESS_OFF);
1665         } else {
1666                 arc_hdr_set_flags(hdr, ARC_FLAG_COMPRESSED_ARC);
1667                 HDR_SET_COMPRESS(hdr, cmp);
1668                 ASSERT3U(HDR_GET_COMPRESS(hdr), ==, cmp);
1669                 ASSERT(HDR_COMPRESSION_ENABLED(hdr));
1670         }
1671 }
1672
1673 /*
1674  * Looks for another buf on the same hdr which has the data decompressed, copies
1675  * from it, and returns true. If no such buf exists, returns false.
1676  */
1677 static boolean_t
1678 arc_buf_try_copy_decompressed_data(arc_buf_t *buf)
1679 {
1680         arc_buf_hdr_t *hdr = buf->b_hdr;
1681         arc_buf_t *from;
1682         boolean_t copied = B_FALSE;
1683
1684         ASSERT(HDR_HAS_L1HDR(hdr));
1685         ASSERT3P(buf->b_data, !=, NULL);
1686         ASSERT(!ARC_BUF_COMPRESSED(buf));
1687
1688         for (from = hdr->b_l1hdr.b_buf; from != NULL;
1689             from = from->b_next) {
1690                 /* can't use our own data buffer */
1691                 if (from == buf) {
1692                         continue;
1693                 }
1694
1695                 if (!ARC_BUF_COMPRESSED(from)) {
1696                         bcopy(from->b_data, buf->b_data, arc_buf_size(buf));
1697                         copied = B_TRUE;
1698                         break;
1699                 }
1700         }
1701
1702         /*
1703          * There were no decompressed bufs, so there should not be a
1704          * checksum on the hdr either.
1705          */
1706         EQUIV(!copied, hdr->b_l1hdr.b_freeze_cksum == NULL);
1707
1708         return (copied);
1709 }
1710
1711 /*
1712  * Given a buf that has a data buffer attached to it, this function will
1713  * efficiently fill the buf with data of the specified compression setting from
1714  * the hdr and update the hdr's b_freeze_cksum if necessary. If the buf and hdr
1715  * are already sharing a data buf, no copy is performed.
1716  *
1717  * If the buf is marked as compressed but uncompressed data was requested, this
1718  * will allocate a new data buffer for the buf, remove that flag, and fill the
1719  * buf with uncompressed data. You can't request a compressed buf on a hdr with
1720  * uncompressed data, and (since we haven't added support for it yet) if you
1721  * want compressed data your buf must already be marked as compressed and have
1722  * the correct-sized data buffer.
1723  */
1724 static int
1725 arc_buf_fill(arc_buf_t *buf, boolean_t compressed)
1726 {
1727         arc_buf_hdr_t *hdr = buf->b_hdr;
1728         boolean_t hdr_compressed = (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF);
1729         dmu_object_byteswap_t bswap = hdr->b_l1hdr.b_byteswap;
1730
1731         ASSERT3P(buf->b_data, !=, NULL);
1732         IMPLY(compressed, hdr_compressed);
1733         IMPLY(compressed, ARC_BUF_COMPRESSED(buf));
1734
1735         if (hdr_compressed == compressed) {
1736                 if (!arc_buf_is_shared(buf)) {
1737                         abd_copy_to_buf(buf->b_data, hdr->b_l1hdr.b_pabd,
1738                             arc_buf_size(buf));
1739                 }
1740         } else {
1741                 ASSERT(hdr_compressed);
1742                 ASSERT(!compressed);
1743                 ASSERT3U(HDR_GET_LSIZE(hdr), !=, HDR_GET_PSIZE(hdr));
1744
1745                 /*
1746                  * If the buf is sharing its data with the hdr, unlink it and
1747                  * allocate a new data buffer for the buf.
1748                  */
1749                 if (arc_buf_is_shared(buf)) {
1750                         ASSERT(ARC_BUF_COMPRESSED(buf));
1751
1752                         /* We need to give the buf it's own b_data */
1753                         buf->b_flags &= ~ARC_BUF_FLAG_SHARED;
1754                         buf->b_data =
1755                             arc_get_data_buf(hdr, HDR_GET_LSIZE(hdr), buf);
1756                         arc_hdr_clear_flags(hdr, ARC_FLAG_SHARED_DATA);
1757
1758                         /* Previously overhead was 0; just add new overhead */
1759                         ARCSTAT_INCR(arcstat_overhead_size, HDR_GET_LSIZE(hdr));
1760                 } else if (ARC_BUF_COMPRESSED(buf)) {
1761                         /* We need to reallocate the buf's b_data */
1762                         arc_free_data_buf(hdr, buf->b_data, HDR_GET_PSIZE(hdr),
1763                             buf);
1764                         buf->b_data =
1765                             arc_get_data_buf(hdr, HDR_GET_LSIZE(hdr), buf);
1766
1767                         /* We increased the size of b_data; update overhead */
1768                         ARCSTAT_INCR(arcstat_overhead_size,
1769                             HDR_GET_LSIZE(hdr) - HDR_GET_PSIZE(hdr));
1770                 }
1771
1772                 /*
1773                  * Regardless of the buf's previous compression settings, it
1774                  * should not be compressed at the end of this function.
1775                  */
1776                 buf->b_flags &= ~ARC_BUF_FLAG_COMPRESSED;
1777
1778                 /*
1779                  * Try copying the data from another buf which already has a
1780                  * decompressed version. If that's not possible, it's time to
1781                  * bite the bullet and decompress the data from the hdr.
1782                  */
1783                 if (arc_buf_try_copy_decompressed_data(buf)) {
1784                         /* Skip byteswapping and checksumming (already done) */
1785                         ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, !=, NULL);
1786                         return (0);
1787                 } else {
1788                         int error = zio_decompress_data(HDR_GET_COMPRESS(hdr),
1789                             hdr->b_l1hdr.b_pabd, buf->b_data,
1790                             HDR_GET_PSIZE(hdr), HDR_GET_LSIZE(hdr));
1791
1792                         /*
1793                          * Absent hardware errors or software bugs, this should
1794                          * be impossible, but log it anyway so we can debug it.
1795                          */
1796                         if (error != 0) {
1797                                 zfs_dbgmsg(
1798                                     "hdr %p, compress %d, psize %d, lsize %d",
1799                                     hdr, HDR_GET_COMPRESS(hdr),
1800                                     HDR_GET_PSIZE(hdr), HDR_GET_LSIZE(hdr));
1801                                 return (SET_ERROR(EIO));
1802                         }
1803                 }
1804         }
1805
1806         /* Byteswap the buf's data if necessary */
1807         if (bswap != DMU_BSWAP_NUMFUNCS) {
1808                 ASSERT(!HDR_SHARED_DATA(hdr));
1809                 ASSERT3U(bswap, <, DMU_BSWAP_NUMFUNCS);
1810                 dmu_ot_byteswap[bswap].ob_func(buf->b_data, HDR_GET_LSIZE(hdr));
1811         }
1812
1813         /* Compute the hdr's checksum if necessary */
1814         arc_cksum_compute(buf);
1815
1816         return (0);
1817 }
1818
1819 int
1820 arc_decompress(arc_buf_t *buf)
1821 {
1822         return (arc_buf_fill(buf, B_FALSE));
1823 }
1824
1825 /*
1826  * Return the size of the block, b_pabd, that is stored in the arc_buf_hdr_t.
1827  */
1828 static uint64_t
1829 arc_hdr_size(arc_buf_hdr_t *hdr)
1830 {
1831         uint64_t size;
1832
1833         if (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF &&
1834             HDR_GET_PSIZE(hdr) > 0) {
1835                 size = HDR_GET_PSIZE(hdr);
1836         } else {
1837                 ASSERT3U(HDR_GET_LSIZE(hdr), !=, 0);
1838                 size = HDR_GET_LSIZE(hdr);
1839         }
1840         return (size);
1841 }
1842
1843 /*
1844  * Increment the amount of evictable space in the arc_state_t's refcount.
1845  * We account for the space used by the hdr and the arc buf individually
1846  * so that we can add and remove them from the refcount individually.
1847  */
1848 static void
1849 arc_evictable_space_increment(arc_buf_hdr_t *hdr, arc_state_t *state)
1850 {
1851         arc_buf_contents_t type = arc_buf_type(hdr);
1852         arc_buf_t *buf;
1853
1854         ASSERT(HDR_HAS_L1HDR(hdr));
1855
1856         if (GHOST_STATE(state)) {
1857                 ASSERT0(hdr->b_l1hdr.b_bufcnt);
1858                 ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
1859                 ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
1860                 (void) refcount_add_many(&state->arcs_esize[type],
1861                     HDR_GET_LSIZE(hdr), hdr);
1862                 return;
1863         }
1864
1865         ASSERT(!GHOST_STATE(state));
1866         if (hdr->b_l1hdr.b_pabd != NULL) {
1867                 (void) refcount_add_many(&state->arcs_esize[type],
1868                     arc_hdr_size(hdr), hdr);
1869         }
1870         for (buf = hdr->b_l1hdr.b_buf; buf != NULL; buf = buf->b_next) {
1871                 if (arc_buf_is_shared(buf))
1872                         continue;
1873                 (void) refcount_add_many(&state->arcs_esize[type],
1874                     arc_buf_size(buf), buf);
1875         }
1876 }
1877
1878 /*
1879  * Decrement the amount of evictable space in the arc_state_t's refcount.
1880  * We account for the space used by the hdr and the arc buf individually
1881  * so that we can add and remove them from the refcount individually.
1882  */
1883 static void
1884 arc_evictable_space_decrement(arc_buf_hdr_t *hdr, arc_state_t *state)
1885 {
1886         arc_buf_contents_t type = arc_buf_type(hdr);
1887         arc_buf_t *buf;
1888
1889         ASSERT(HDR_HAS_L1HDR(hdr));
1890
1891         if (GHOST_STATE(state)) {
1892                 ASSERT0(hdr->b_l1hdr.b_bufcnt);
1893                 ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
1894                 ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
1895                 (void) refcount_remove_many(&state->arcs_esize[type],
1896                     HDR_GET_LSIZE(hdr), hdr);
1897                 return;
1898         }
1899
1900         ASSERT(!GHOST_STATE(state));
1901         if (hdr->b_l1hdr.b_pabd != NULL) {
1902                 (void) refcount_remove_many(&state->arcs_esize[type],
1903                     arc_hdr_size(hdr), hdr);
1904         }
1905         for (buf = hdr->b_l1hdr.b_buf; buf != NULL; buf = buf->b_next) {
1906                 if (arc_buf_is_shared(buf))
1907                         continue;
1908                 (void) refcount_remove_many(&state->arcs_esize[type],
1909                     arc_buf_size(buf), buf);
1910         }
1911 }
1912
1913 /*
1914  * Add a reference to this hdr indicating that someone is actively
1915  * referencing that memory. When the refcount transitions from 0 to 1,
1916  * we remove it from the respective arc_state_t list to indicate that
1917  * it is not evictable.
1918  */
1919 static void
1920 add_reference(arc_buf_hdr_t *hdr, void *tag)
1921 {
1922         arc_state_t *state;
1923
1924         ASSERT(HDR_HAS_L1HDR(hdr));
1925         if (!MUTEX_HELD(HDR_LOCK(hdr))) {
1926                 ASSERT(hdr->b_l1hdr.b_state == arc_anon);
1927                 ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
1928                 ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
1929         }
1930
1931         state = hdr->b_l1hdr.b_state;
1932
1933         if ((refcount_add(&hdr->b_l1hdr.b_refcnt, tag) == 1) &&
1934             (state != arc_anon)) {
1935                 /* We don't use the L2-only state list. */
1936                 if (state != arc_l2c_only) {
1937                         multilist_remove(&state->arcs_list[arc_buf_type(hdr)],
1938                             hdr);
1939                         arc_evictable_space_decrement(hdr, state);
1940                 }
1941                 /* remove the prefetch flag if we get a reference */
1942                 arc_hdr_clear_flags(hdr, ARC_FLAG_PREFETCH);
1943         }
1944 }
1945
1946 /*
1947  * Remove a reference from this hdr. When the reference transitions from
1948  * 1 to 0 and we're not anonymous, then we add this hdr to the arc_state_t's
1949  * list making it eligible for eviction.
1950  */
1951 static int
1952 remove_reference(arc_buf_hdr_t *hdr, kmutex_t *hash_lock, void *tag)
1953 {
1954         int cnt;
1955         arc_state_t *state = hdr->b_l1hdr.b_state;
1956
1957         ASSERT(HDR_HAS_L1HDR(hdr));
1958         ASSERT(state == arc_anon || MUTEX_HELD(hash_lock));
1959         ASSERT(!GHOST_STATE(state));
1960
1961         /*
1962          * arc_l2c_only counts as a ghost state so we don't need to explicitly
1963          * check to prevent usage of the arc_l2c_only list.
1964          */
1965         if (((cnt = refcount_remove(&hdr->b_l1hdr.b_refcnt, tag)) == 0) &&
1966             (state != arc_anon)) {
1967                 multilist_insert(&state->arcs_list[arc_buf_type(hdr)], hdr);
1968                 ASSERT3U(hdr->b_l1hdr.b_bufcnt, >, 0);
1969                 arc_evictable_space_increment(hdr, state);
1970         }
1971         return (cnt);
1972 }
1973
1974 /*
1975  * Returns detailed information about a specific arc buffer.  When the
1976  * state_index argument is set the function will calculate the arc header
1977  * list position for its arc state.  Since this requires a linear traversal
1978  * callers are strongly encourage not to do this.  However, it can be helpful
1979  * for targeted analysis so the functionality is provided.
1980  */
1981 void
1982 arc_buf_info(arc_buf_t *ab, arc_buf_info_t *abi, int state_index)
1983 {
1984         arc_buf_hdr_t *hdr = ab->b_hdr;
1985         l1arc_buf_hdr_t *l1hdr = NULL;
1986         l2arc_buf_hdr_t *l2hdr = NULL;
1987         arc_state_t *state = NULL;
1988
1989         memset(abi, 0, sizeof (arc_buf_info_t));
1990
1991         if (hdr == NULL)
1992                 return;
1993
1994         abi->abi_flags = hdr->b_flags;
1995
1996         if (HDR_HAS_L1HDR(hdr)) {
1997                 l1hdr = &hdr->b_l1hdr;
1998                 state = l1hdr->b_state;
1999         }
2000         if (HDR_HAS_L2HDR(hdr))
2001                 l2hdr = &hdr->b_l2hdr;
2002
2003         if (l1hdr) {
2004                 abi->abi_bufcnt = l1hdr->b_bufcnt;
2005                 abi->abi_access = l1hdr->b_arc_access;
2006                 abi->abi_mru_hits = l1hdr->b_mru_hits;
2007                 abi->abi_mru_ghost_hits = l1hdr->b_mru_ghost_hits;
2008                 abi->abi_mfu_hits = l1hdr->b_mfu_hits;
2009                 abi->abi_mfu_ghost_hits = l1hdr->b_mfu_ghost_hits;
2010                 abi->abi_holds = refcount_count(&l1hdr->b_refcnt);
2011         }
2012
2013         if (l2hdr) {
2014                 abi->abi_l2arc_dattr = l2hdr->b_daddr;
2015                 abi->abi_l2arc_hits = l2hdr->b_hits;
2016         }
2017
2018         abi->abi_state_type = state ? state->arcs_state : ARC_STATE_ANON;
2019         abi->abi_state_contents = arc_buf_type(hdr);
2020         abi->abi_size = arc_hdr_size(hdr);
2021 }
2022
2023 /*
2024  * Move the supplied buffer to the indicated state. The hash lock
2025  * for the buffer must be held by the caller.
2026  */
2027 static void
2028 arc_change_state(arc_state_t *new_state, arc_buf_hdr_t *hdr,
2029     kmutex_t *hash_lock)
2030 {
2031         arc_state_t *old_state;
2032         int64_t refcnt;
2033         uint32_t bufcnt;
2034         boolean_t update_old, update_new;
2035         arc_buf_contents_t buftype = arc_buf_type(hdr);
2036
2037         /*
2038          * We almost always have an L1 hdr here, since we call arc_hdr_realloc()
2039          * in arc_read() when bringing a buffer out of the L2ARC.  However, the
2040          * L1 hdr doesn't always exist when we change state to arc_anon before
2041          * destroying a header, in which case reallocating to add the L1 hdr is
2042          * pointless.
2043          */
2044         if (HDR_HAS_L1HDR(hdr)) {
2045                 old_state = hdr->b_l1hdr.b_state;
2046                 refcnt = refcount_count(&hdr->b_l1hdr.b_refcnt);
2047                 bufcnt = hdr->b_l1hdr.b_bufcnt;
2048                 update_old = (bufcnt > 0 || hdr->b_l1hdr.b_pabd != NULL);
2049         } else {
2050                 old_state = arc_l2c_only;
2051                 refcnt = 0;
2052                 bufcnt = 0;
2053                 update_old = B_FALSE;
2054         }
2055         update_new = update_old;
2056
2057         ASSERT(MUTEX_HELD(hash_lock));
2058         ASSERT3P(new_state, !=, old_state);
2059         ASSERT(!GHOST_STATE(new_state) || bufcnt == 0);
2060         ASSERT(old_state != arc_anon || bufcnt <= 1);
2061
2062         /*
2063          * If this buffer is evictable, transfer it from the
2064          * old state list to the new state list.
2065          */
2066         if (refcnt == 0) {
2067                 if (old_state != arc_anon && old_state != arc_l2c_only) {
2068                         ASSERT(HDR_HAS_L1HDR(hdr));
2069                         multilist_remove(&old_state->arcs_list[buftype], hdr);
2070
2071                         if (GHOST_STATE(old_state)) {
2072                                 ASSERT0(bufcnt);
2073                                 ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
2074                                 update_old = B_TRUE;
2075                         }
2076                         arc_evictable_space_decrement(hdr, old_state);
2077                 }
2078                 if (new_state != arc_anon && new_state != arc_l2c_only) {
2079                         /*
2080                          * An L1 header always exists here, since if we're
2081                          * moving to some L1-cached state (i.e. not l2c_only or
2082                          * anonymous), we realloc the header to add an L1hdr
2083                          * beforehand.
2084                          */
2085                         ASSERT(HDR_HAS_L1HDR(hdr));
2086                         multilist_insert(&new_state->arcs_list[buftype], hdr);
2087
2088                         if (GHOST_STATE(new_state)) {
2089                                 ASSERT0(bufcnt);
2090                                 ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
2091                                 update_new = B_TRUE;
2092                         }
2093                         arc_evictable_space_increment(hdr, new_state);
2094                 }
2095         }
2096
2097         ASSERT(!HDR_EMPTY(hdr));
2098         if (new_state == arc_anon && HDR_IN_HASH_TABLE(hdr))
2099                 buf_hash_remove(hdr);
2100
2101         /* adjust state sizes (ignore arc_l2c_only) */
2102
2103         if (update_new && new_state != arc_l2c_only) {
2104                 ASSERT(HDR_HAS_L1HDR(hdr));
2105                 if (GHOST_STATE(new_state)) {
2106                         ASSERT0(bufcnt);
2107
2108                         /*
2109                          * When moving a header to a ghost state, we first
2110                          * remove all arc buffers. Thus, we'll have a
2111                          * bufcnt of zero, and no arc buffer to use for
2112                          * the reference. As a result, we use the arc
2113                          * header pointer for the reference.
2114                          */
2115                         (void) refcount_add_many(&new_state->arcs_size,
2116                             HDR_GET_LSIZE(hdr), hdr);
2117                         ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
2118                 } else {
2119                         arc_buf_t *buf;
2120                         uint32_t buffers = 0;
2121
2122                         /*
2123                          * Each individual buffer holds a unique reference,
2124                          * thus we must remove each of these references one
2125                          * at a time.
2126                          */
2127                         for (buf = hdr->b_l1hdr.b_buf; buf != NULL;
2128                             buf = buf->b_next) {
2129                                 ASSERT3U(bufcnt, !=, 0);
2130                                 buffers++;
2131
2132                                 /*
2133                                  * When the arc_buf_t is sharing the data
2134                                  * block with the hdr, the owner of the
2135                                  * reference belongs to the hdr. Only
2136                                  * add to the refcount if the arc_buf_t is
2137                                  * not shared.
2138                                  */
2139                                 if (arc_buf_is_shared(buf))
2140                                         continue;
2141
2142                                 (void) refcount_add_many(&new_state->arcs_size,
2143                                     arc_buf_size(buf), buf);
2144                         }
2145                         ASSERT3U(bufcnt, ==, buffers);
2146
2147                         if (hdr->b_l1hdr.b_pabd != NULL) {
2148                                 (void) refcount_add_many(&new_state->arcs_size,
2149                                     arc_hdr_size(hdr), hdr);
2150                         } else {
2151                                 ASSERT(GHOST_STATE(old_state));
2152                         }
2153                 }
2154         }
2155
2156         if (update_old && old_state != arc_l2c_only) {
2157                 ASSERT(HDR_HAS_L1HDR(hdr));
2158                 if (GHOST_STATE(old_state)) {
2159                         ASSERT0(bufcnt);
2160                         ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
2161
2162                         /*
2163                          * When moving a header off of a ghost state,
2164                          * the header will not contain any arc buffers.
2165                          * We use the arc header pointer for the reference
2166                          * which is exactly what we did when we put the
2167                          * header on the ghost state.
2168                          */
2169
2170                         (void) refcount_remove_many(&old_state->arcs_size,
2171                             HDR_GET_LSIZE(hdr), hdr);
2172                 } else {
2173                         arc_buf_t *buf;
2174                         uint32_t buffers = 0;
2175
2176                         /*
2177                          * Each individual buffer holds a unique reference,
2178                          * thus we must remove each of these references one
2179                          * at a time.
2180                          */
2181                         for (buf = hdr->b_l1hdr.b_buf; buf != NULL;
2182                             buf = buf->b_next) {
2183                                 ASSERT3U(bufcnt, !=, 0);
2184                                 buffers++;
2185
2186                                 /*
2187                                  * When the arc_buf_t is sharing the data
2188                                  * block with the hdr, the owner of the
2189                                  * reference belongs to the hdr. Only
2190                                  * add to the refcount if the arc_buf_t is
2191                                  * not shared.
2192                                  */
2193                                 if (arc_buf_is_shared(buf))
2194                                         continue;
2195
2196                                 (void) refcount_remove_many(
2197                                     &old_state->arcs_size, arc_buf_size(buf),
2198                                     buf);
2199                         }
2200                         ASSERT3U(bufcnt, ==, buffers);
2201                         ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
2202                         (void) refcount_remove_many(
2203                             &old_state->arcs_size, arc_hdr_size(hdr), hdr);
2204                 }
2205         }
2206
2207         if (HDR_HAS_L1HDR(hdr))
2208                 hdr->b_l1hdr.b_state = new_state;
2209
2210         /*
2211          * L2 headers should never be on the L2 state list since they don't
2212          * have L1 headers allocated.
2213          */
2214         ASSERT(multilist_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_DATA]) &&
2215             multilist_is_empty(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA]));
2216 }
2217
2218 void
2219 arc_space_consume(uint64_t space, arc_space_type_t type)
2220 {
2221         ASSERT(type >= 0 && type < ARC_SPACE_NUMTYPES);
2222
2223         switch (type) {
2224         default:
2225                 break;
2226         case ARC_SPACE_DATA:
2227                 ARCSTAT_INCR(arcstat_data_size, space);
2228                 break;
2229         case ARC_SPACE_META:
2230                 ARCSTAT_INCR(arcstat_metadata_size, space);
2231                 break;
2232         case ARC_SPACE_BONUS:
2233                 ARCSTAT_INCR(arcstat_bonus_size, space);
2234                 break;
2235         case ARC_SPACE_DNODE:
2236                 ARCSTAT_INCR(arcstat_dnode_size, space);
2237                 break;
2238         case ARC_SPACE_DBUF:
2239                 ARCSTAT_INCR(arcstat_dbuf_size, space);
2240                 break;
2241         case ARC_SPACE_HDRS:
2242                 ARCSTAT_INCR(arcstat_hdr_size, space);
2243                 break;
2244         case ARC_SPACE_L2HDRS:
2245                 ARCSTAT_INCR(arcstat_l2_hdr_size, space);
2246                 break;
2247         }
2248
2249         if (type != ARC_SPACE_DATA)
2250                 ARCSTAT_INCR(arcstat_meta_used, space);
2251
2252         atomic_add_64(&arc_size, space);
2253 }
2254
2255 void
2256 arc_space_return(uint64_t space, arc_space_type_t type)
2257 {
2258         ASSERT(type >= 0 && type < ARC_SPACE_NUMTYPES);
2259
2260         switch (type) {
2261         default:
2262                 break;
2263         case ARC_SPACE_DATA:
2264                 ARCSTAT_INCR(arcstat_data_size, -space);
2265                 break;
2266         case ARC_SPACE_META:
2267                 ARCSTAT_INCR(arcstat_metadata_size, -space);
2268                 break;
2269         case ARC_SPACE_BONUS:
2270                 ARCSTAT_INCR(arcstat_bonus_size, -space);
2271                 break;
2272         case ARC_SPACE_DNODE:
2273                 ARCSTAT_INCR(arcstat_dnode_size, -space);
2274                 break;
2275         case ARC_SPACE_DBUF:
2276                 ARCSTAT_INCR(arcstat_dbuf_size, -space);
2277                 break;
2278         case ARC_SPACE_HDRS:
2279                 ARCSTAT_INCR(arcstat_hdr_size, -space);
2280                 break;
2281         case ARC_SPACE_L2HDRS:
2282                 ARCSTAT_INCR(arcstat_l2_hdr_size, -space);
2283                 break;
2284         }
2285
2286         if (type != ARC_SPACE_DATA) {
2287                 ASSERT(arc_meta_used >= space);
2288                 if (arc_meta_max < arc_meta_used)
2289                         arc_meta_max = arc_meta_used;
2290                 ARCSTAT_INCR(arcstat_meta_used, -space);
2291         }
2292
2293         ASSERT(arc_size >= space);
2294         atomic_add_64(&arc_size, -space);
2295 }
2296
2297 /*
2298  * Given a hdr and a buf, returns whether that buf can share its b_data buffer
2299  * with the hdr's b_pabd.
2300  */
2301 static boolean_t
2302 arc_can_share(arc_buf_hdr_t *hdr, arc_buf_t *buf)
2303 {
2304         boolean_t hdr_compressed, buf_compressed;
2305         /*
2306          * The criteria for sharing a hdr's data are:
2307          * 1. the hdr's compression matches the buf's compression
2308          * 2. the hdr doesn't need to be byteswapped
2309          * 3. the hdr isn't already being shared
2310          * 4. the buf is either compressed or it is the last buf in the hdr list
2311          *
2312          * Criterion #4 maintains the invariant that shared uncompressed
2313          * bufs must be the final buf in the hdr's b_buf list. Reading this, you
2314          * might ask, "if a compressed buf is allocated first, won't that be the
2315          * last thing in the list?", but in that case it's impossible to create
2316          * a shared uncompressed buf anyway (because the hdr must be compressed
2317          * to have the compressed buf). You might also think that #3 is
2318          * sufficient to make this guarantee, however it's possible
2319          * (specifically in the rare L2ARC write race mentioned in
2320          * arc_buf_alloc_impl()) there will be an existing uncompressed buf that
2321          * is sharable, but wasn't at the time of its allocation. Rather than
2322          * allow a new shared uncompressed buf to be created and then shuffle
2323          * the list around to make it the last element, this simply disallows
2324          * sharing if the new buf isn't the first to be added.
2325          */
2326         ASSERT3P(buf->b_hdr, ==, hdr);
2327         hdr_compressed = HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF;
2328         buf_compressed = ARC_BUF_COMPRESSED(buf) != 0;
2329         return (buf_compressed == hdr_compressed &&
2330             hdr->b_l1hdr.b_byteswap == DMU_BSWAP_NUMFUNCS &&
2331             !HDR_SHARED_DATA(hdr) &&
2332             (ARC_BUF_LAST(buf) || ARC_BUF_COMPRESSED(buf)));
2333 }
2334
2335 /*
2336  * Allocate a buf for this hdr. If you care about the data that's in the hdr,
2337  * or if you want a compressed buffer, pass those flags in. Returns 0 if the
2338  * copy was made successfully, or an error code otherwise.
2339  */
2340 static int
2341 arc_buf_alloc_impl(arc_buf_hdr_t *hdr, void *tag, boolean_t compressed,
2342     boolean_t fill, arc_buf_t **ret)
2343 {
2344         arc_buf_t *buf;
2345         boolean_t can_share;
2346
2347         ASSERT(HDR_HAS_L1HDR(hdr));
2348         ASSERT3U(HDR_GET_LSIZE(hdr), >, 0);
2349         VERIFY(hdr->b_type == ARC_BUFC_DATA ||
2350             hdr->b_type == ARC_BUFC_METADATA);
2351         ASSERT3P(ret, !=, NULL);
2352         ASSERT3P(*ret, ==, NULL);
2353
2354         hdr->b_l1hdr.b_mru_hits = 0;
2355         hdr->b_l1hdr.b_mru_ghost_hits = 0;
2356         hdr->b_l1hdr.b_mfu_hits = 0;
2357         hdr->b_l1hdr.b_mfu_ghost_hits = 0;
2358         hdr->b_l1hdr.b_l2_hits = 0;
2359
2360         buf = *ret = kmem_cache_alloc(buf_cache, KM_PUSHPAGE);
2361         buf->b_hdr = hdr;
2362         buf->b_data = NULL;
2363         buf->b_next = hdr->b_l1hdr.b_buf;
2364         buf->b_flags = 0;
2365
2366         add_reference(hdr, tag);
2367
2368         /*
2369          * We're about to change the hdr's b_flags. We must either
2370          * hold the hash_lock or be undiscoverable.
2371          */
2372         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
2373
2374         /*
2375          * Only honor requests for compressed bufs if the hdr is actually
2376          * compressed.
2377          */
2378         if (compressed && HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF)
2379                 buf->b_flags |= ARC_BUF_FLAG_COMPRESSED;
2380
2381         /*
2382          * Although the ARC should handle it correctly, levels above the ARC
2383          * should prevent us from having multiple compressed bufs off the same
2384          * hdr. To ensure we notice it if this behavior changes, we assert this
2385          * here the best we can.
2386          */
2387         IMPLY(ARC_BUF_COMPRESSED(buf), !HDR_SHARED_DATA(hdr));
2388
2389         /*
2390          * If the hdr's data can be shared then we share the data buffer and
2391          * set the appropriate bit in the hdr's b_flags to indicate the hdr is
2392          * allocate a new buffer to store the buf's data.
2393          *
2394          * There are two additional restrictions here because we're sharing
2395          * hdr -> buf instead of the usual buf -> hdr. First, the hdr can't be
2396          * actively involved in an L2ARC write, because if this buf is used by
2397          * an arc_write() then the hdr's data buffer will be released when the
2398          * write completes, even though the L2ARC write might still be using it.
2399          * Second, the hdr's ABD must be linear so that the buf's user doesn't
2400          * need to be ABD-aware.
2401          */
2402         can_share = arc_can_share(hdr, buf) && !HDR_L2_WRITING(hdr) &&
2403             abd_is_linear(hdr->b_l1hdr.b_pabd);
2404
2405         /* Set up b_data and sharing */
2406         if (can_share) {
2407                 buf->b_data = abd_to_buf(hdr->b_l1hdr.b_pabd);
2408                 buf->b_flags |= ARC_BUF_FLAG_SHARED;
2409                 arc_hdr_set_flags(hdr, ARC_FLAG_SHARED_DATA);
2410         } else {
2411                 buf->b_data =
2412                     arc_get_data_buf(hdr, arc_buf_size(buf), buf);
2413                 ARCSTAT_INCR(arcstat_overhead_size, arc_buf_size(buf));
2414         }
2415         VERIFY3P(buf->b_data, !=, NULL);
2416
2417         hdr->b_l1hdr.b_buf = buf;
2418         hdr->b_l1hdr.b_bufcnt += 1;
2419
2420         /*
2421          * If the user wants the data from the hdr, we need to either copy or
2422          * decompress the data.
2423          */
2424         if (fill) {
2425                 return (arc_buf_fill(buf, ARC_BUF_COMPRESSED(buf) != 0));
2426         }
2427
2428         return (0);
2429 }
2430
2431 static char *arc_onloan_tag = "onloan";
2432
2433 /*
2434  * Loan out an anonymous arc buffer. Loaned buffers are not counted as in
2435  * flight data by arc_tempreserve_space() until they are "returned". Loaned
2436  * buffers must be returned to the arc before they can be used by the DMU or
2437  * freed.
2438  */
2439 arc_buf_t *
2440 arc_loan_buf(spa_t *spa, boolean_t is_metadata, int size)
2441 {
2442         arc_buf_t *buf = arc_alloc_buf(spa, arc_onloan_tag,
2443             is_metadata ? ARC_BUFC_METADATA : ARC_BUFC_DATA, size);
2444
2445         atomic_add_64(&arc_loaned_bytes, size);
2446         return (buf);
2447 }
2448
2449 arc_buf_t *
2450 arc_loan_compressed_buf(spa_t *spa, uint64_t psize, uint64_t lsize,
2451     enum zio_compress compression_type)
2452 {
2453         arc_buf_t *buf = arc_alloc_compressed_buf(spa, arc_onloan_tag,
2454             psize, lsize, compression_type);
2455
2456         atomic_add_64(&arc_loaned_bytes, psize);
2457         return (buf);
2458 }
2459
2460
2461 /*
2462  * Return a loaned arc buffer to the arc.
2463  */
2464 void
2465 arc_return_buf(arc_buf_t *buf, void *tag)
2466 {
2467         arc_buf_hdr_t *hdr = buf->b_hdr;
2468
2469         ASSERT3P(buf->b_data, !=, NULL);
2470         ASSERT(HDR_HAS_L1HDR(hdr));
2471         (void) refcount_add(&hdr->b_l1hdr.b_refcnt, tag);
2472         (void) refcount_remove(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag);
2473
2474         atomic_add_64(&arc_loaned_bytes, -arc_buf_size(buf));
2475 }
2476
2477 /* Detach an arc_buf from a dbuf (tag) */
2478 void
2479 arc_loan_inuse_buf(arc_buf_t *buf, void *tag)
2480 {
2481         arc_buf_hdr_t *hdr = buf->b_hdr;
2482
2483         ASSERT3P(buf->b_data, !=, NULL);
2484         ASSERT(HDR_HAS_L1HDR(hdr));
2485         (void) refcount_add(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag);
2486         (void) refcount_remove(&hdr->b_l1hdr.b_refcnt, tag);
2487
2488         atomic_add_64(&arc_loaned_bytes, -arc_buf_size(buf));
2489 }
2490
2491 static void
2492 l2arc_free_abd_on_write(abd_t *abd, size_t size, arc_buf_contents_t type)
2493 {
2494         l2arc_data_free_t *df = kmem_alloc(sizeof (*df), KM_SLEEP);
2495
2496         df->l2df_abd = abd;
2497         df->l2df_size = size;
2498         df->l2df_type = type;
2499         mutex_enter(&l2arc_free_on_write_mtx);
2500         list_insert_head(l2arc_free_on_write, df);
2501         mutex_exit(&l2arc_free_on_write_mtx);
2502 }
2503
2504 static void
2505 arc_hdr_free_on_write(arc_buf_hdr_t *hdr)
2506 {
2507         arc_state_t *state = hdr->b_l1hdr.b_state;
2508         arc_buf_contents_t type = arc_buf_type(hdr);
2509         uint64_t size = arc_hdr_size(hdr);
2510
2511         /* protected by hash lock, if in the hash table */
2512         if (multilist_link_active(&hdr->b_l1hdr.b_arc_node)) {
2513                 ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
2514                 ASSERT(state != arc_anon && state != arc_l2c_only);
2515
2516                 (void) refcount_remove_many(&state->arcs_esize[type],
2517                     size, hdr);
2518         }
2519         (void) refcount_remove_many(&state->arcs_size, size, hdr);
2520
2521         l2arc_free_abd_on_write(hdr->b_l1hdr.b_pabd, size, type);
2522 }
2523
2524 /*
2525  * Share the arc_buf_t's data with the hdr. Whenever we are sharing the
2526  * data buffer, we transfer the refcount ownership to the hdr and update
2527  * the appropriate kstats.
2528  */
2529 static void
2530 arc_share_buf(arc_buf_hdr_t *hdr, arc_buf_t *buf)
2531 {
2532         ASSERT(arc_can_share(hdr, buf));
2533         ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
2534         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
2535
2536         /*
2537          * Start sharing the data buffer. We transfer the
2538          * refcount ownership to the hdr since it always owns
2539          * the refcount whenever an arc_buf_t is shared.
2540          */
2541         refcount_transfer_ownership(&hdr->b_l1hdr.b_state->arcs_size, buf, hdr);
2542         hdr->b_l1hdr.b_pabd = abd_get_from_buf(buf->b_data, arc_buf_size(buf));
2543         abd_take_ownership_of_buf(hdr->b_l1hdr.b_pabd,
2544             HDR_ISTYPE_METADATA(hdr));
2545         arc_hdr_set_flags(hdr, ARC_FLAG_SHARED_DATA);
2546         buf->b_flags |= ARC_BUF_FLAG_SHARED;
2547
2548         /*
2549          * Since we've transferred ownership to the hdr we need
2550          * to increment its compressed and uncompressed kstats and
2551          * decrement the overhead size.
2552          */
2553         ARCSTAT_INCR(arcstat_compressed_size, arc_hdr_size(hdr));
2554         ARCSTAT_INCR(arcstat_uncompressed_size, HDR_GET_LSIZE(hdr));
2555         ARCSTAT_INCR(arcstat_overhead_size, -arc_buf_size(buf));
2556 }
2557
2558 static void
2559 arc_unshare_buf(arc_buf_hdr_t *hdr, arc_buf_t *buf)
2560 {
2561         ASSERT(arc_buf_is_shared(buf));
2562         ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
2563         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
2564
2565         /*
2566          * We are no longer sharing this buffer so we need
2567          * to transfer its ownership to the rightful owner.
2568          */
2569         refcount_transfer_ownership(&hdr->b_l1hdr.b_state->arcs_size, hdr, buf);
2570         arc_hdr_clear_flags(hdr, ARC_FLAG_SHARED_DATA);
2571         abd_release_ownership_of_buf(hdr->b_l1hdr.b_pabd);
2572         abd_put(hdr->b_l1hdr.b_pabd);
2573         hdr->b_l1hdr.b_pabd = NULL;
2574         buf->b_flags &= ~ARC_BUF_FLAG_SHARED;
2575
2576         /*
2577          * Since the buffer is no longer shared between
2578          * the arc buf and the hdr, count it as overhead.
2579          */
2580         ARCSTAT_INCR(arcstat_compressed_size, -arc_hdr_size(hdr));
2581         ARCSTAT_INCR(arcstat_uncompressed_size, -HDR_GET_LSIZE(hdr));
2582         ARCSTAT_INCR(arcstat_overhead_size, arc_buf_size(buf));
2583 }
2584
2585 /*
2586  * Remove an arc_buf_t from the hdr's buf list and return the last
2587  * arc_buf_t on the list. If no buffers remain on the list then return
2588  * NULL.
2589  */
2590 static arc_buf_t *
2591 arc_buf_remove(arc_buf_hdr_t *hdr, arc_buf_t *buf)
2592 {
2593         arc_buf_t **bufp = &hdr->b_l1hdr.b_buf;
2594         arc_buf_t *lastbuf = NULL;
2595
2596         ASSERT(HDR_HAS_L1HDR(hdr));
2597         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
2598
2599         /*
2600          * Remove the buf from the hdr list and locate the last
2601          * remaining buffer on the list.
2602          */
2603         while (*bufp != NULL) {
2604                 if (*bufp == buf)
2605                         *bufp = buf->b_next;
2606
2607                 /*
2608                  * If we've removed a buffer in the middle of
2609                  * the list then update the lastbuf and update
2610                  * bufp.
2611                  */
2612                 if (*bufp != NULL) {
2613                         lastbuf = *bufp;
2614                         bufp = &(*bufp)->b_next;
2615                 }
2616         }
2617         buf->b_next = NULL;
2618         ASSERT3P(lastbuf, !=, buf);
2619         IMPLY(hdr->b_l1hdr.b_bufcnt > 0, lastbuf != NULL);
2620         IMPLY(hdr->b_l1hdr.b_bufcnt > 0, hdr->b_l1hdr.b_buf != NULL);
2621         IMPLY(lastbuf != NULL, ARC_BUF_LAST(lastbuf));
2622
2623         return (lastbuf);
2624 }
2625
2626 /*
2627  * Free up buf->b_data and pull the arc_buf_t off of the the arc_buf_hdr_t's
2628  * list and free it.
2629  */
2630 static void
2631 arc_buf_destroy_impl(arc_buf_t *buf)
2632 {
2633         arc_buf_t *lastbuf;
2634         arc_buf_hdr_t *hdr = buf->b_hdr;
2635
2636         /*
2637          * Free up the data associated with the buf but only if we're not
2638          * sharing this with the hdr. If we are sharing it with the hdr, the
2639          * hdr is responsible for doing the free.
2640          */
2641         if (buf->b_data != NULL) {
2642                 /*
2643                  * We're about to change the hdr's b_flags. We must either
2644                  * hold the hash_lock or be undiscoverable.
2645                  */
2646                 ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr));
2647
2648                 arc_cksum_verify(buf);
2649                 arc_buf_unwatch(buf);
2650
2651                 if (arc_buf_is_shared(buf)) {
2652                         arc_hdr_clear_flags(hdr, ARC_FLAG_SHARED_DATA);
2653                 } else {
2654                         uint64_t size = arc_buf_size(buf);
2655                         arc_free_data_buf(hdr, buf->b_data, size, buf);
2656                         ARCSTAT_INCR(arcstat_overhead_size, -size);
2657                 }
2658                 buf->b_data = NULL;
2659
2660                 ASSERT(hdr->b_l1hdr.b_bufcnt > 0);
2661                 hdr->b_l1hdr.b_bufcnt -= 1;
2662         }
2663
2664         lastbuf = arc_buf_remove(hdr, buf);
2665
2666         if (ARC_BUF_SHARED(buf) && !ARC_BUF_COMPRESSED(buf)) {
2667                 /*
2668                  * If the current arc_buf_t is sharing its data buffer with the
2669                  * hdr, then reassign the hdr's b_pabd to share it with the new
2670                  * buffer at the end of the list. The shared buffer is always
2671                  * the last one on the hdr's buffer list.
2672                  *
2673                  * There is an equivalent case for compressed bufs, but since
2674                  * they aren't guaranteed to be the last buf in the list and
2675                  * that is an exceedingly rare case, we just allow that space be
2676                  * wasted temporarily.
2677                  */
2678                 if (lastbuf != NULL) {
2679                         /* Only one buf can be shared at once */
2680                         VERIFY(!arc_buf_is_shared(lastbuf));
2681                         /* hdr is uncompressed so can't have compressed buf */
2682                         VERIFY(!ARC_BUF_COMPRESSED(lastbuf));
2683
2684                         ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
2685                         arc_hdr_free_pabd(hdr);
2686
2687                         /*
2688                          * We must setup a new shared block between the
2689                          * last buffer and the hdr. The data would have
2690                          * been allocated by the arc buf so we need to transfer
2691                          * ownership to the hdr since it's now being shared.
2692                          */
2693                         arc_share_buf(hdr, lastbuf);
2694                 }
2695         } else if (HDR_SHARED_DATA(hdr)) {
2696                 /*
2697                  * Uncompressed shared buffers are always at the end
2698                  * of the list. Compressed buffers don't have the
2699                  * same requirements. This makes it hard to
2700                  * simply assert that the lastbuf is shared so
2701                  * we rely on the hdr's compression flags to determine
2702                  * if we have a compressed, shared buffer.
2703                  */
2704                 ASSERT3P(lastbuf, !=, NULL);
2705                 ASSERT(arc_buf_is_shared(lastbuf) ||
2706                     HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF);
2707         }
2708
2709         if (hdr->b_l1hdr.b_bufcnt == 0)
2710                 arc_cksum_free(hdr);
2711
2712         /* clean up the buf */
2713         buf->b_hdr = NULL;
2714         kmem_cache_free(buf_cache, buf);
2715 }
2716
2717 static void
2718 arc_hdr_alloc_pabd(arc_buf_hdr_t *hdr)
2719 {
2720         ASSERT3U(HDR_GET_LSIZE(hdr), >, 0);
2721         ASSERT(HDR_HAS_L1HDR(hdr));
2722         ASSERT(!HDR_SHARED_DATA(hdr));
2723
2724         ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
2725         hdr->b_l1hdr.b_pabd = arc_get_data_abd(hdr, arc_hdr_size(hdr), hdr);
2726         hdr->b_l1hdr.b_byteswap = DMU_BSWAP_NUMFUNCS;
2727         ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
2728
2729         ARCSTAT_INCR(arcstat_compressed_size, arc_hdr_size(hdr));
2730         ARCSTAT_INCR(arcstat_uncompressed_size, HDR_GET_LSIZE(hdr));
2731 }
2732
2733 static void
2734 arc_hdr_free_pabd(arc_buf_hdr_t *hdr)
2735 {
2736         ASSERT(HDR_HAS_L1HDR(hdr));
2737         ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
2738
2739         /*
2740          * If the hdr is currently being written to the l2arc then
2741          * we defer freeing the data by adding it to the l2arc_free_on_write
2742          * list. The l2arc will free the data once it's finished
2743          * writing it to the l2arc device.
2744          */
2745         if (HDR_L2_WRITING(hdr)) {
2746                 arc_hdr_free_on_write(hdr);
2747                 ARCSTAT_BUMP(arcstat_l2_free_on_write);
2748         } else {
2749                 arc_free_data_abd(hdr, hdr->b_l1hdr.b_pabd,
2750                     arc_hdr_size(hdr), hdr);
2751         }
2752         hdr->b_l1hdr.b_pabd = NULL;
2753         hdr->b_l1hdr.b_byteswap = DMU_BSWAP_NUMFUNCS;
2754
2755         ARCSTAT_INCR(arcstat_compressed_size, -arc_hdr_size(hdr));
2756         ARCSTAT_INCR(arcstat_uncompressed_size, -HDR_GET_LSIZE(hdr));
2757 }
2758
2759 static arc_buf_hdr_t *
2760 arc_hdr_alloc(uint64_t spa, int32_t psize, int32_t lsize,
2761     enum zio_compress compression_type, arc_buf_contents_t type)
2762 {
2763         arc_buf_hdr_t *hdr;
2764
2765         VERIFY(type == ARC_BUFC_DATA || type == ARC_BUFC_METADATA);
2766
2767         hdr = kmem_cache_alloc(hdr_full_cache, KM_PUSHPAGE);
2768         ASSERT(HDR_EMPTY(hdr));
2769         ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL);
2770         HDR_SET_PSIZE(hdr, psize);
2771         HDR_SET_LSIZE(hdr, lsize);
2772         hdr->b_spa = spa;
2773         hdr->b_type = type;
2774         hdr->b_flags = 0;
2775         arc_hdr_set_flags(hdr, arc_bufc_to_flags(type) | ARC_FLAG_HAS_L1HDR);
2776         arc_hdr_set_compress(hdr, compression_type);
2777
2778         hdr->b_l1hdr.b_state = arc_anon;
2779         hdr->b_l1hdr.b_arc_access = 0;
2780         hdr->b_l1hdr.b_bufcnt = 0;
2781         hdr->b_l1hdr.b_buf = NULL;
2782
2783         /*
2784          * Allocate the hdr's buffer. This will contain either
2785          * the compressed or uncompressed data depending on the block
2786          * it references and compressed arc enablement.
2787          */
2788         arc_hdr_alloc_pabd(hdr);
2789         ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
2790
2791         return (hdr);
2792 }
2793
2794 /*
2795  * Transition between the two allocation states for the arc_buf_hdr struct.
2796  * The arc_buf_hdr struct can be allocated with (hdr_full_cache) or without
2797  * (hdr_l2only_cache) the fields necessary for the L1 cache - the smaller
2798  * version is used when a cache buffer is only in the L2ARC in order to reduce
2799  * memory usage.
2800  */
2801 static arc_buf_hdr_t *
2802 arc_hdr_realloc(arc_buf_hdr_t *hdr, kmem_cache_t *old, kmem_cache_t *new)
2803 {
2804         arc_buf_hdr_t *nhdr;
2805         l2arc_dev_t *dev = hdr->b_l2hdr.b_dev;
2806
2807         ASSERT(HDR_HAS_L2HDR(hdr));
2808         ASSERT((old == hdr_full_cache && new == hdr_l2only_cache) ||
2809             (old == hdr_l2only_cache && new == hdr_full_cache));
2810
2811         nhdr = kmem_cache_alloc(new, KM_PUSHPAGE);
2812
2813         ASSERT(MUTEX_HELD(HDR_LOCK(hdr)));
2814         buf_hash_remove(hdr);
2815
2816         bcopy(hdr, nhdr, HDR_L2ONLY_SIZE);
2817
2818         if (new == hdr_full_cache) {
2819                 arc_hdr_set_flags(nhdr, ARC_FLAG_HAS_L1HDR);
2820                 /*
2821                  * arc_access and arc_change_state need to be aware that a
2822                  * header has just come out of L2ARC, so we set its state to
2823                  * l2c_only even though it's about to change.
2824                  */
2825                 nhdr->b_l1hdr.b_state = arc_l2c_only;
2826
2827                 /* Verify previous threads set to NULL before freeing */
2828                 ASSERT3P(nhdr->b_l1hdr.b_pabd, ==, NULL);
2829         } else {
2830                 ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
2831                 ASSERT0(hdr->b_l1hdr.b_bufcnt);
2832                 ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL);
2833
2834                 /*
2835                  * If we've reached here, We must have been called from
2836                  * arc_evict_hdr(), as such we should have already been
2837                  * removed from any ghost list we were previously on
2838                  * (which protects us from racing with arc_evict_state),
2839                  * thus no locking is needed during this check.
2840                  */
2841                 ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node));
2842
2843                 /*
2844                  * A buffer must not be moved into the arc_l2c_only
2845                  * state if it's not finished being written out to the
2846                  * l2arc device. Otherwise, the b_l1hdr.b_pabd field
2847                  * might try to be accessed, even though it was removed.
2848                  */
2849                 VERIFY(!HDR_L2_WRITING(hdr));
2850                 VERIFY3P(hdr->b_l1hdr.b_pabd, ==, NULL);
2851
2852                 arc_hdr_clear_flags(nhdr, ARC_FLAG_HAS_L1HDR);
2853         }
2854         /*
2855          * The header has been reallocated so we need to re-insert it into any
2856          * lists it was on.
2857          */
2858         (void) buf_hash_insert(nhdr, NULL);
2859
2860         ASSERT(list_link_active(&hdr->b_l2hdr.b_l2node));
2861
2862         mutex_enter(&dev->l2ad_mtx);
2863
2864         /*
2865          * We must place the realloc'ed header back into the list at
2866          * the same spot. Otherwise, if it's placed earlier in the list,
2867          * l2arc_write_buffers() could find it during the function's
2868          * write phase, and try to write it out to the l2arc.
2869          */
2870         list_insert_after(&dev->l2ad_buflist, hdr, nhdr);
2871         list_remove(&dev->l2ad_buflist, hdr);
2872
2873         mutex_exit(&dev->l2ad_mtx);
2874
2875         /*
2876          * Since we're using the pointer address as the tag when
2877          * incrementing and decrementing the l2ad_alloc refcount, we
2878          * must remove the old pointer (that we're about to destroy) and
2879          * add the new pointer to the refcount. Otherwise we'd remove
2880          * the wrong pointer address when calling arc_hdr_destroy() later.
2881          */
2882
2883         (void) refcount_remove_many(&dev->l2ad_alloc, arc_hdr_size(hdr), hdr);
2884         (void) refcount_add_many(&dev->l2ad_alloc, arc_hdr_size(nhdr), nhdr);
2885
2886         buf_discard_identity(hdr);
2887         kmem_cache_free(old, hdr);
2888
2889         return (nhdr);
2890 }
2891
2892 /*
2893  * Allocate a new arc_buf_hdr_t and arc_buf_t and return the buf to the caller.
2894  * The buf is returned thawed since we expect the consumer to modify it.
2895  */
2896 arc_buf_t *
2897 arc_alloc_buf(spa_t *spa, void *tag, arc_buf_contents_t type, int32_t size)
2898 {
2899         arc_buf_t *buf;
2900         arc_buf_hdr_t *hdr = arc_hdr_alloc(spa_load_guid(spa), size, size,
2901             ZIO_COMPRESS_OFF, type);
2902         ASSERT(!MUTEX_HELD(HDR_LOCK(hdr)));
2903
2904         buf = NULL;
2905         VERIFY0(arc_buf_alloc_impl(hdr, tag, B_FALSE, B_FALSE, &buf));
2906         arc_buf_thaw(buf);
2907
2908         return (buf);
2909 }
2910
2911 /*
2912  * Allocate a compressed buf in the same manner as arc_alloc_buf. Don't use this
2913  * for bufs containing metadata.
2914  */
2915 arc_buf_t *
2916 arc_alloc_compressed_buf(spa_t *spa, void *tag, uint64_t psize, uint64_t lsize,
2917     enum zio_compress compression_type)
2918 {
2919         arc_buf_hdr_t *hdr;
2920         arc_buf_t *buf;
2921         ASSERT3U(lsize, >, 0);
2922         ASSERT3U(lsize, >=, psize);
2923         ASSERT(compression_type > ZIO_COMPRESS_OFF);
2924         ASSERT(compression_type < ZIO_COMPRESS_FUNCTIONS);
2925
2926         hdr = arc_hdr_alloc(spa_load_guid(spa), psize, lsize,
2927             compression_type, ARC_BUFC_DATA);
2928         ASSERT(!MUTEX_HELD(HDR_LOCK(hdr)));
2929
2930         buf = NULL;
2931         VERIFY0(arc_buf_alloc_impl(hdr, tag, B_TRUE, B_FALSE, &buf));
2932         arc_buf_thaw(buf);
2933         ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL);
2934
2935         if (!arc_buf_is_shared(buf)) {
2936                 /*
2937                  * To ensure that the hdr has the correct data in it if we call
2938                  * arc_decompress() on this buf before it's been written to
2939                  * disk, it's easiest if we just set up sharing between the
2940                  * buf and the hdr.
2941                  */
2942                 ASSERT(!abd_is_linear(hdr->b_l1hdr.b_pabd));
2943                 arc_hdr_free_pabd(hdr);
2944                 arc_share_buf(hdr, buf);
2945         }
2946
2947         return (buf);
2948 }
2949
2950 static void
2951 arc_hdr_l2hdr_destroy(arc_buf_hdr_t *hdr)
2952 {
2953         l2arc_buf_hdr_t *l2hdr = &hdr->b_l2hdr;
2954         l2arc_dev_t *dev = l2hdr->b_dev;
2955         uint64_t asize = arc_hdr_size(hdr);
2956
2957         ASSERT(MUTEX_HELD(&dev->l2ad_mtx));
2958         ASSERT(HDR_HAS_L2HDR(hdr));
2959
2960         list_remove(&dev->l2ad_buflist, hdr);
2961
2962         ARCSTAT_INCR(arcstat_l2_asize, -asize);
2963         ARCSTAT_INCR(arcstat_l2_size, -HDR_GET_LSIZE(hdr));
2964
2965         vdev_space_update(dev->l2ad_vdev, -asize, 0, 0);
2966
2967         (void) refcount_remove_many(&dev->l2ad_alloc, asize, hdr);
2968         arc_hdr_clear_flags(hdr, ARC_FLAG_HAS_L2HDR);
2969 }
2970
2971 static void
2972 arc_hdr_destroy(arc_buf_hdr_t *hdr)
2973 {
2974         if (HDR_HAS_L1HDR(hdr)) {
2975                 ASSERT(hdr->b_l1hdr.b_buf == NULL ||
2976                     hdr->b_l1hdr.b_bufcnt > 0);
2977                 ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
2978                 ASSERT3P(hdr->b_l1hdr.b_state, ==, arc_anon);
2979         }
2980         ASSERT(!HDR_IO_IN_PROGRESS(hdr));
2981         ASSERT(!HDR_IN_HASH_TABLE(hdr));
2982
2983         if (!HDR_EMPTY(hdr))
2984                 buf_discard_identity(hdr);
2985
2986         if (HDR_HAS_L2HDR(hdr)) {
2987                 l2arc_dev_t *dev = hdr->b_l2hdr.b_dev;
2988                 boolean_t buflist_held = MUTEX_HELD(&dev->l2ad_mtx);
2989
2990                 if (!buflist_held)
2991                         mutex_enter(&dev->l2ad_mtx);
2992
2993                 /*
2994                  * Even though we checked this conditional above, we
2995                  * need to check this again now that we have the
2996                  * l2ad_mtx. This is because we could be racing with
2997                  * another thread calling l2arc_evict() which might have
2998                  * destroyed this header's L2 portion as we were waiting
2999                  * to acquire the l2ad_mtx. If that happens, we don't
3000                  * want to re-destroy the header's L2 portion.
3001                  */
3002                 if (HDR_HAS_L2HDR(hdr))
3003                         arc_hdr_l2hdr_destroy(hdr);
3004
3005                 if (!buflist_held)
3006                         mutex_exit(&dev->l2ad_mtx);
3007         }
3008
3009         if (HDR_HAS_L1HDR(hdr)) {
3010                 arc_cksum_free(hdr);
3011
3012                 while (hdr->b_l1hdr.b_buf != NULL)
3013                         arc_buf_destroy_impl(hdr->b_l1hdr.b_buf);
3014
3015                 if (hdr->b_l1hdr.b_pabd != NULL)
3016                         arc_hdr_free_pabd(hdr);
3017         }
3018
3019         ASSERT3P(hdr->b_hash_next, ==, NULL);
3020         if (HDR_HAS_L1HDR(hdr)) {
3021                 ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node));
3022                 ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL);
3023                 kmem_cache_free(hdr_full_cache, hdr);
3024         } else {
3025                 kmem_cache_free(hdr_l2only_cache, hdr);
3026         }
3027 }
3028
3029 void
3030 arc_buf_destroy(arc_buf_t *buf, void* tag)
3031 {
3032         arc_buf_hdr_t *hdr = buf->b_hdr;
3033         kmutex_t *hash_lock = HDR_LOCK(hdr);
3034
3035         if (hdr->b_l1hdr.b_state == arc_anon) {
3036                 ASSERT3U(hdr->b_l1hdr.b_bufcnt, ==, 1);
3037                 ASSERT(!HDR_IO_IN_PROGRESS(hdr));
3038                 VERIFY0(remove_reference(hdr, NULL, tag));
3039                 arc_hdr_destroy(hdr);
3040                 return;
3041         }
3042
3043         mutex_enter(hash_lock);
3044         ASSERT3P(hdr, ==, buf->b_hdr);
3045         ASSERT(hdr->b_l1hdr.b_bufcnt > 0);
3046         ASSERT3P(hash_lock, ==, HDR_LOCK(hdr));
3047         ASSERT3P(hdr->b_l1hdr.b_state, !=, arc_anon);
3048         ASSERT3P(buf->b_data, !=, NULL);
3049
3050         (void) remove_reference(hdr, hash_lock, tag);
3051         arc_buf_destroy_impl(buf);
3052         mutex_exit(hash_lock);
3053 }
3054
3055 /*
3056  * Evict the arc_buf_hdr that is provided as a parameter. The resultant
3057  * state of the header is dependent on its state prior to entering this
3058  * function. The following transitions are possible:
3059  *
3060  *    - arc_mru -> arc_mru_ghost
3061  *    - arc_mfu -> arc_mfu_ghost
3062  *    - arc_mru_ghost -> arc_l2c_only
3063  *    - arc_mru_ghost -> deleted
3064  *    - arc_mfu_ghost -> arc_l2c_only
3065  *    - arc_mfu_ghost -> deleted
3066  */
3067 static int64_t
3068 arc_evict_hdr(arc_buf_hdr_t *hdr, kmutex_t *hash_lock)
3069 {
3070         arc_state_t *evicted_state, *state;
3071         int64_t bytes_evicted = 0;
3072
3073         ASSERT(MUTEX_HELD(hash_lock));
3074         ASSERT(HDR_HAS_L1HDR(hdr));
3075
3076         state = hdr->b_l1hdr.b_state;
3077         if (GHOST_STATE(state)) {
3078                 ASSERT(!HDR_IO_IN_PROGRESS(hdr));
3079                 ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
3080
3081                 /*
3082                  * l2arc_write_buffers() relies on a header's L1 portion
3083                  * (i.e. its b_pabd field) during it's write phase.
3084                  * Thus, we cannot push a header onto the arc_l2c_only
3085                  * state (removing its L1 piece) until the header is
3086                  * done being written to the l2arc.
3087                  */
3088                 if (HDR_HAS_L2HDR(hdr) && HDR_L2_WRITING(hdr)) {
3089                         ARCSTAT_BUMP(arcstat_evict_l2_skip);
3090                         return (bytes_evicted);
3091                 }
3092
3093                 ARCSTAT_BUMP(arcstat_deleted);
3094                 bytes_evicted += HDR_GET_LSIZE(hdr);
3095
3096                 DTRACE_PROBE1(arc__delete, arc_buf_hdr_t *, hdr);
3097
3098                 if (HDR_HAS_L2HDR(hdr)) {
3099                         ASSERT(hdr->b_l1hdr.b_pabd == NULL);
3100                         /*
3101                          * This buffer is cached on the 2nd Level ARC;
3102                          * don't destroy the header.
3103                          */
3104                         arc_change_state(arc_l2c_only, hdr, hash_lock);
3105                         /*
3106                          * dropping from L1+L2 cached to L2-only,
3107                          * realloc to remove the L1 header.
3108                          */
3109                         hdr = arc_hdr_realloc(hdr, hdr_full_cache,
3110                             hdr_l2only_cache);
3111                 } else {
3112                         arc_change_state(arc_anon, hdr, hash_lock);
3113                         arc_hdr_destroy(hdr);
3114                 }
3115                 return (bytes_evicted);
3116         }
3117
3118         ASSERT(state == arc_mru || state == arc_mfu);
3119         evicted_state = (state == arc_mru) ? arc_mru_ghost : arc_mfu_ghost;
3120
3121         /* prefetch buffers have a minimum lifespan */
3122         if (HDR_IO_IN_PROGRESS(hdr) ||
3123             ((hdr->b_flags & (ARC_FLAG_PREFETCH | ARC_FLAG_INDIRECT)) &&
3124             ddi_get_lbolt() - hdr->b_l1hdr.b_arc_access <
3125             arc_min_prefetch_lifespan)) {
3126                 ARCSTAT_BUMP(arcstat_evict_skip);
3127                 return (bytes_evicted);
3128         }
3129
3130         ASSERT0(refcount_count(&hdr->b_l1hdr.b_refcnt));
3131         while (hdr->b_l1hdr.b_buf) {
3132                 arc_buf_t *buf = hdr->b_l1hdr.b_buf;
3133                 if (!mutex_tryenter(&buf->b_evict_lock)) {
3134                         ARCSTAT_BUMP(arcstat_mutex_miss);
3135                         break;
3136                 }
3137                 if (buf->b_data != NULL)
3138                         bytes_evicted += HDR_GET_LSIZE(hdr);
3139                 mutex_exit(&buf->b_evict_lock);
3140                 arc_buf_destroy_impl(buf);
3141         }
3142
3143         if (HDR_HAS_L2HDR(hdr)) {
3144                 ARCSTAT_INCR(arcstat_evict_l2_cached, HDR_GET_LSIZE(hdr));
3145         } else {
3146                 if (l2arc_write_eligible(hdr->b_spa, hdr)) {
3147                         ARCSTAT_INCR(arcstat_evict_l2_eligible,
3148                             HDR_GET_LSIZE(hdr));
3149                 } else {
3150                         ARCSTAT_INCR(arcstat_evict_l2_ineligible,
3151                             HDR_GET_LSIZE(hdr));
3152                 }
3153         }
3154
3155         if (hdr->b_l1hdr.b_bufcnt == 0) {
3156                 arc_cksum_free(hdr);
3157
3158                 bytes_evicted += arc_hdr_size(hdr);
3159
3160                 /*
3161                  * If this hdr is being evicted and has a compressed
3162                  * buffer then we discard it here before we change states.
3163                  * This ensures that the accounting is updated correctly
3164                  * in arc_free_data_impl().
3165                  */
3166                 arc_hdr_free_pabd(hdr);
3167
3168                 arc_change_state(evicted_state, hdr, hash_lock);
3169                 ASSERT(HDR_IN_HASH_TABLE(hdr));
3170                 arc_hdr_set_flags(hdr, ARC_FLAG_IN_HASH_TABLE);
3171                 DTRACE_PROBE1(arc__evict, arc_buf_hdr_t *, hdr);
3172         }
3173
3174         return (bytes_evicted);
3175 }
3176
3177 static uint64_t
3178 arc_evict_state_impl(multilist_t *ml, int idx, arc_buf_hdr_t *marker,
3179     uint64_t spa, int64_t bytes)
3180 {
3181         multilist_sublist_t *mls;
3182         uint64_t bytes_evicted = 0;
3183         arc_buf_hdr_t *hdr;
3184         kmutex_t *hash_lock;
3185         int evict_count = 0;
3186
3187         ASSERT3P(marker, !=, NULL);
3188         IMPLY(bytes < 0, bytes == ARC_EVICT_ALL);
3189
3190         mls = multilist_sublist_lock(ml, idx);
3191
3192         for (hdr = multilist_sublist_prev(mls, marker); hdr != NULL;
3193             hdr = multilist_sublist_prev(mls, marker)) {
3194                 if ((bytes != ARC_EVICT_ALL && bytes_evicted >= bytes) ||
3195                     (evict_count >= zfs_arc_evict_batch_limit))
3196                         break;
3197
3198                 /*
3199                  * To keep our iteration location, move the marker
3200                  * forward. Since we're not holding hdr's hash lock, we
3201                  * must be very careful and not remove 'hdr' from the
3202                  * sublist. Otherwise, other consumers might mistake the
3203                  * 'hdr' as not being on a sublist when they call the
3204                  * multilist_link_active() function (they all rely on
3205                  * the hash lock protecting concurrent insertions and
3206                  * removals). multilist_sublist_move_forward() was
3207                  * specifically implemented to ensure this is the case
3208                  * (only 'marker' will be removed and re-inserted).
3209                  */
3210                 multilist_sublist_move_forward(mls, marker);
3211
3212                 /*
3213                  * The only case where the b_spa field should ever be
3214                  * zero, is the marker headers inserted by
3215                  * arc_evict_state(). It's possible for multiple threads
3216                  * to be calling arc_evict_state() concurrently (e.g.
3217                  * dsl_pool_close() and zio_inject_fault()), so we must
3218                  * skip any markers we see from these other threads.
3219                  */
3220                 if (hdr->b_spa == 0)
3221                         continue;
3222
3223                 /* we're only interested in evicting buffers of a certain spa */
3224                 if (spa != 0 && hdr->b_spa != spa) {
3225                         ARCSTAT_BUMP(arcstat_evict_skip);
3226                         continue;
3227                 }
3228
3229                 hash_lock = HDR_LOCK(hdr);
3230
3231                 /*
3232                  * We aren't calling this function from any code path
3233                  * that would already be holding a hash lock, so we're
3234                  * asserting on this assumption to be defensive in case
3235                  * this ever changes. Without this check, it would be
3236                  * possible to incorrectly increment arcstat_mutex_miss
3237                  * below (e.g. if the code changed such that we called
3238                  * this function with a hash lock held).
3239                  */
3240                 ASSERT(!MUTEX_HELD(hash_lock));
3241
3242                 if (mutex_tryenter(hash_lock)) {
3243                         uint64_t evicted = arc_evict_hdr(hdr, hash_lock);
3244                         mutex_exit(hash_lock);
3245
3246                         bytes_evicted += evicted;
3247
3248                         /*
3249                          * If evicted is zero, arc_evict_hdr() must have
3250                          * decided to skip this header, don't increment
3251                          * evict_count in this case.
3252                          */
3253                         if (evicted != 0)
3254                                 evict_count++;
3255
3256                         /*
3257                          * If arc_size isn't overflowing, signal any
3258                          * threads that might happen to be waiting.
3259                          *
3260                          * For each header evicted, we wake up a single
3261                          * thread. If we used cv_broadcast, we could
3262                          * wake up "too many" threads causing arc_size
3263                          * to significantly overflow arc_c; since
3264                          * arc_get_data_impl() doesn't check for overflow
3265                          * when it's woken up (it doesn't because it's
3266                          * possible for the ARC to be overflowing while
3267                          * full of un-evictable buffers, and the
3268                          * function should proceed in this case).
3269                          *
3270                          * If threads are left sleeping, due to not
3271                          * using cv_broadcast, they will be woken up
3272                          * just before arc_reclaim_thread() sleeps.
3273                          */
3274                         mutex_enter(&arc_reclaim_lock);
3275                         if (!arc_is_overflowing())
3276                                 cv_signal(&arc_reclaim_waiters_cv);
3277                         mutex_exit(&arc_reclaim_lock);
3278                 } else {
3279                         ARCSTAT_BUMP(arcstat_mutex_miss);
3280                 }
3281         }
3282
3283         multilist_sublist_unlock(mls);
3284
3285         return (bytes_evicted);
3286 }
3287
3288 /*
3289  * Evict buffers from the given arc state, until we've removed the
3290  * specified number of bytes. Move the removed buffers to the
3291  * appropriate evict state.
3292  *
3293  * This function makes a "best effort". It skips over any buffers
3294  * it can't get a hash_lock on, and so, may not catch all candidates.
3295  * It may also return without evicting as much space as requested.
3296  *
3297  * If bytes is specified using the special value ARC_EVICT_ALL, this
3298  * will evict all available (i.e. unlocked and evictable) buffers from
3299  * the given arc state; which is used by arc_flush().
3300  */
3301 static uint64_t
3302 arc_evict_state(arc_state_t *state, uint64_t spa, int64_t bytes,
3303     arc_buf_contents_t type)
3304 {
3305         uint64_t total_evicted = 0;
3306         multilist_t *ml = &state->arcs_list[type];
3307         int num_sublists;
3308         arc_buf_hdr_t **markers;
3309         int i;
3310
3311         IMPLY(bytes < 0, bytes == ARC_EVICT_ALL);
3312
3313         num_sublists = multilist_get_num_sublists(ml);
3314
3315         /*
3316          * If we've tried to evict from each sublist, made some
3317          * progress, but still have not hit the target number of bytes
3318          * to evict, we want to keep trying. The markers allow us to
3319          * pick up where we left off for each individual sublist, rather
3320          * than starting from the tail each time.
3321          */
3322         markers = kmem_zalloc(sizeof (*markers) * num_sublists, KM_SLEEP);
3323         for (i = 0; i < num_sublists; i++) {
3324                 multilist_sublist_t *mls;
3325
3326                 markers[i] = kmem_cache_alloc(hdr_full_cache, KM_SLEEP);
3327
3328                 /*
3329                  * A b_spa of 0 is used to indicate that this header is
3330                  * a marker. This fact is used in arc_adjust_type() and
3331                  * arc_evict_state_impl().
3332                  */
3333                 markers[i]->b_spa = 0;
3334
3335                 mls = multilist_sublist_lock(ml, i);
3336                 multilist_sublist_insert_tail(mls, markers[i]);
3337                 multilist_sublist_unlock(mls);
3338         }
3339
3340         /*
3341          * While we haven't hit our target number of bytes to evict, or
3342          * we're evicting all available buffers.
3343          */
3344         while (total_evicted < bytes || bytes == ARC_EVICT_ALL) {
3345                 int sublist_idx = multilist_get_random_index(ml);
3346                 uint64_t scan_evicted = 0;
3347
3348                 /*
3349                  * Try to reduce pinned dnodes with a floor of arc_dnode_limit.
3350                  * Request that 10% of the LRUs be scanned by the superblock
3351                  * shrinker.
3352                  */
3353                 if (type == ARC_BUFC_DATA && arc_dnode_size > arc_dnode_limit)
3354                         arc_prune_async((arc_dnode_size - arc_dnode_limit) /
3355                             sizeof (dnode_t) / zfs_arc_dnode_reduce_percent);
3356
3357                 /*
3358                  * Start eviction using a randomly selected sublist,
3359                  * this is to try and evenly balance eviction across all
3360                  * sublists. Always starting at the same sublist
3361                  * (e.g. index 0) would cause evictions to favor certain
3362                  * sublists over others.
3363                  */
3364                 for (i = 0; i < num_sublists; i++) {
3365                         uint64_t bytes_remaining;
3366                         uint64_t bytes_evicted;
3367
3368                         if (bytes == ARC_EVICT_ALL)
3369                                 bytes_remaining = ARC_EVICT_ALL;
3370                         else if (total_evicted < bytes)
3371                                 bytes_remaining = bytes - total_evicted;
3372                         else
3373                                 break;
3374
3375                         bytes_evicted = arc_evict_state_impl(ml, sublist_idx,
3376                             markers[sublist_idx], spa, bytes_remaining);
3377
3378                         scan_evicted += bytes_evicted;
3379                         total_evicted += bytes_evicted;
3380
3381                         /* we've reached the end, wrap to the beginning */
3382                         if (++sublist_idx >= num_sublists)
3383                                 sublist_idx = 0;
3384                 }
3385
3386                 /*
3387                  * If we didn't evict anything during this scan, we have
3388                  * no reason to believe we'll evict more during another
3389                  * scan, so break the loop.
3390                  */
3391                 if (scan_evicted == 0) {
3392                         /* This isn't possible, let's make that obvious */
3393                         ASSERT3S(bytes, !=, 0);
3394
3395                         /*
3396                          * When bytes is ARC_EVICT_ALL, the only way to
3397                          * break the loop is when scan_evicted is zero.
3398                          * In that case, we actually have evicted enough,
3399                          * so we don't want to increment the kstat.
3400                          */
3401                         if (bytes != ARC_EVICT_ALL) {
3402                                 ASSERT3S(total_evicted, <, bytes);
3403                                 ARCSTAT_BUMP(arcstat_evict_not_enough);
3404                         }
3405
3406                         break;
3407                 }
3408         }
3409
3410         for (i = 0; i < num_sublists; i++) {
3411                 multilist_sublist_t *mls = multilist_sublist_lock(ml, i);
3412                 multilist_sublist_remove(mls, markers[i]);
3413                 multilist_sublist_unlock(mls);
3414
3415                 kmem_cache_free(hdr_full_cache, markers[i]);
3416         }
3417         kmem_free(markers, sizeof (*markers) * num_sublists);
3418
3419         return (total_evicted);
3420 }
3421
3422 /*
3423  * Flush all "evictable" data of the given type from the arc state
3424  * specified. This will not evict any "active" buffers (i.e. referenced).
3425  *
3426  * When 'retry' is set to B_FALSE, the function will make a single pass
3427  * over the state and evict any buffers that it can. Since it doesn't
3428  * continually retry the eviction, it might end up leaving some buffers
3429  * in the ARC due to lock misses.
3430  *
3431  * When 'retry' is set to B_TRUE, the function will continually retry the
3432  * eviction until *all* evictable buffers have been removed from the
3433  * state. As a result, if concurrent insertions into the state are
3434  * allowed (e.g. if the ARC isn't shutting down), this function might
3435  * wind up in an infinite loop, continually trying to evict buffers.
3436  */
3437 static uint64_t
3438 arc_flush_state(arc_state_t *state, uint64_t spa, arc_buf_contents_t type,
3439     boolean_t retry)
3440 {
3441         uint64_t evicted = 0;
3442
3443         while (refcount_count(&state->arcs_esize[type]) != 0) {
3444                 evicted += arc_evict_state(state, spa, ARC_EVICT_ALL, type);
3445
3446                 if (!retry)
3447                         break;
3448         }
3449
3450         return (evicted);
3451 }
3452
3453 /*
3454  * Helper function for arc_prune_async() it is responsible for safely
3455  * handling the execution of a registered arc_prune_func_t.
3456  */
3457 static void
3458 arc_prune_task(void *ptr)
3459 {
3460         arc_prune_t *ap = (arc_prune_t *)ptr;
3461         arc_prune_func_t *func = ap->p_pfunc;
3462
3463         if (func != NULL)
3464                 func(ap->p_adjust, ap->p_private);
3465
3466         refcount_remove(&ap->p_refcnt, func);
3467 }
3468
3469 /*
3470  * Notify registered consumers they must drop holds on a portion of the ARC
3471  * buffered they reference.  This provides a mechanism to ensure the ARC can
3472  * honor the arc_meta_limit and reclaim otherwise pinned ARC buffers.  This
3473  * is analogous to dnlc_reduce_cache() but more generic.
3474  *
3475  * This operation is performed asynchronously so it may be safely called
3476  * in the context of the arc_reclaim_thread().  A reference is taken here
3477  * for each registered arc_prune_t and the arc_prune_task() is responsible
3478  * for releasing it once the registered arc_prune_func_t has completed.
3479  */
3480 static void
3481 arc_prune_async(int64_t adjust)
3482 {
3483         arc_prune_t *ap;
3484
3485         mutex_enter(&arc_prune_mtx);
3486         for (ap = list_head(&arc_prune_list); ap != NULL;
3487             ap = list_next(&arc_prune_list, ap)) {
3488
3489                 if (refcount_count(&ap->p_refcnt) >= 2)
3490                         continue;
3491
3492                 refcount_add(&ap->p_refcnt, ap->p_pfunc);
3493                 ap->p_adjust = adjust;
3494                 if (taskq_dispatch(arc_prune_taskq, arc_prune_task,
3495                     ap, TQ_SLEEP) == TASKQID_INVALID) {
3496                         refcount_remove(&ap->p_refcnt, ap->p_pfunc);
3497                         continue;
3498                 }
3499                 ARCSTAT_BUMP(arcstat_prune);
3500         }
3501         mutex_exit(&arc_prune_mtx);
3502 }
3503
3504 /*
3505  * Evict the specified number of bytes from the state specified,
3506  * restricting eviction to the spa and type given. This function
3507  * prevents us from trying to evict more from a state's list than
3508  * is "evictable", and to skip evicting altogether when passed a
3509  * negative value for "bytes". In contrast, arc_evict_state() will
3510  * evict everything it can, when passed a negative value for "bytes".
3511  */
3512 static uint64_t
3513 arc_adjust_impl(arc_state_t *state, uint64_t spa, int64_t bytes,
3514     arc_buf_contents_t type)
3515 {
3516         int64_t delta;
3517
3518         if (bytes > 0 && refcount_count(&state->arcs_esize[type]) > 0) {
3519                 delta = MIN(refcount_count(&state->arcs_esize[type]), bytes);
3520                 return (arc_evict_state(state, spa, delta, type));
3521         }
3522
3523         return (0);
3524 }
3525
3526 /*
3527  * The goal of this function is to evict enough meta data buffers from the
3528  * ARC in order to enforce the arc_meta_limit.  Achieving this is slightly
3529  * more complicated than it appears because it is common for data buffers
3530  * to have holds on meta data buffers.  In addition, dnode meta data buffers
3531  * will be held by the dnodes in the block preventing them from being freed.
3532  * This means we can't simply traverse the ARC and expect to always find
3533  * enough unheld meta data buffer to release.
3534  *
3535  * Therefore, this function has been updated to make alternating passes
3536  * over the ARC releasing data buffers and then newly unheld meta data
3537  * buffers.  This ensures forward progress is maintained and arc_meta_used
3538  * will decrease.  Normally this is sufficient, but if required the ARC
3539  * will call the registered prune callbacks causing dentry and inodes to
3540  * be dropped from the VFS cache.  This will make dnode meta data buffers
3541  * available for reclaim.
3542  */
3543 static uint64_t
3544 arc_adjust_meta_balanced(void)
3545 {
3546         int64_t delta, prune = 0, adjustmnt;
3547         uint64_t total_evicted = 0;
3548         arc_buf_contents_t type = ARC_BUFC_DATA;
3549         int restarts = MAX(zfs_arc_meta_adjust_restarts, 0);
3550
3551 restart:
3552         /*
3553          * This slightly differs than the way we evict from the mru in
3554          * arc_adjust because we don't have a "target" value (i.e. no
3555          * "meta" arc_p). As a result, I think we can completely
3556          * cannibalize the metadata in the MRU before we evict the
3557          * metadata from the MFU. I think we probably need to implement a
3558          * "metadata arc_p" value to do this properly.
3559          */
3560         adjustmnt = arc_meta_used - arc_meta_limit;
3561
3562         if (adjustmnt > 0 && refcount_count(&arc_mru->arcs_esize[type]) > 0) {
3563                 delta = MIN(refcount_count(&arc_mru->arcs_esize[type]),
3564                     adjustmnt);
3565                 total_evicted += arc_adjust_impl(arc_mru, 0, delta, type);
3566                 adjustmnt -= delta;
3567         }
3568
3569         /*
3570          * We can't afford to recalculate adjustmnt here. If we do,
3571          * new metadata buffers can sneak into the MRU or ANON lists,
3572          * thus penalize the MFU metadata. Although the fudge factor is
3573          * small, it has been empirically shown to be significant for
3574          * certain workloads (e.g. creating many empty directories). As
3575          * such, we use the original calculation for adjustmnt, and
3576          * simply decrement the amount of data evicted from the MRU.
3577          */
3578
3579         if (adjustmnt > 0 && refcount_count(&arc_mfu->arcs_esize[type]) > 0) {
3580                 delta = MIN(refcount_count(&arc_mfu->arcs_esize[type]),
3581                     adjustmnt);
3582                 total_evicted += arc_adjust_impl(arc_mfu, 0, delta, type);
3583         }
3584
3585         adjustmnt = arc_meta_used - arc_meta_limit;
3586
3587         if (adjustmnt > 0 &&
3588             refcount_count(&arc_mru_ghost->arcs_esize[type]) > 0) {
3589                 delta = MIN(adjustmnt,
3590                     refcount_count(&arc_mru_ghost->arcs_esize[type]));
3591                 total_evicted += arc_adjust_impl(arc_mru_ghost, 0, delta, type);
3592                 adjustmnt -= delta;
3593         }
3594
3595         if (adjustmnt > 0 &&
3596             refcount_count(&arc_mfu_ghost->arcs_esize[type]) > 0) {
3597                 delta = MIN(adjustmnt,
3598                     refcount_count(&arc_mfu_ghost->arcs_esize[type]));
3599                 total_evicted += arc_adjust_impl(arc_mfu_ghost, 0, delta, type);
3600         }
3601
3602         /*
3603          * If after attempting to make the requested adjustment to the ARC
3604          * the meta limit is still being exceeded then request that the
3605          * higher layers drop some cached objects which have holds on ARC
3606          * meta buffers.  Requests to the upper layers will be made with
3607          * increasingly large scan sizes until the ARC is below the limit.
3608          */
3609         if (arc_meta_used > arc_meta_limit) {
3610                 if (type == ARC_BUFC_DATA) {
3611                         type = ARC_BUFC_METADATA;
3612                 } else {
3613                         type = ARC_BUFC_DATA;
3614
3615                         if (zfs_arc_meta_prune) {
3616                                 prune += zfs_arc_meta_prune;
3617                                 arc_prune_async(prune);
3618                         }
3619                 }
3620
3621                 if (restarts > 0) {
3622                         restarts--;
3623                         goto restart;
3624                 }
3625         }
3626         return (total_evicted);
3627 }
3628
3629 /*
3630  * Evict metadata buffers from the cache, such that arc_meta_used is
3631  * capped by the arc_meta_limit tunable.
3632  */
3633 static uint64_t
3634 arc_adjust_meta_only(void)
3635 {
3636         uint64_t total_evicted = 0;
3637         int64_t target;
3638
3639         /*
3640          * If we're over the meta limit, we want to evict enough
3641          * metadata to get back under the meta limit. We don't want to
3642          * evict so much that we drop the MRU below arc_p, though. If
3643          * we're over the meta limit more than we're over arc_p, we
3644          * evict some from the MRU here, and some from the MFU below.
3645          */
3646         target = MIN((int64_t)(arc_meta_used - arc_meta_limit),
3647             (int64_t)(refcount_count(&arc_anon->arcs_size) +
3648             refcount_count(&arc_mru->arcs_size) - arc_p));
3649
3650         total_evicted += arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_METADATA);
3651
3652         /*
3653          * Similar to the above, we want to evict enough bytes to get us
3654          * below the meta limit, but not so much as to drop us below the
3655          * space allotted to the MFU (which is defined as arc_c - arc_p).
3656          */
3657         target = MIN((int64_t)(arc_meta_used - arc_meta_limit),
3658             (int64_t)(refcount_count(&arc_mfu->arcs_size) - (arc_c - arc_p)));
3659
3660         total_evicted += arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA);
3661
3662         return (total_evicted);
3663 }
3664
3665 static uint64_t
3666 arc_adjust_meta(void)
3667 {
3668         if (zfs_arc_meta_strategy == ARC_STRATEGY_META_ONLY)
3669                 return (arc_adjust_meta_only());
3670         else
3671                 return (arc_adjust_meta_balanced());
3672 }
3673
3674 /*
3675  * Return the type of the oldest buffer in the given arc state
3676  *
3677  * This function will select a random sublist of type ARC_BUFC_DATA and
3678  * a random sublist of type ARC_BUFC_METADATA. The tail of each sublist
3679  * is compared, and the type which contains the "older" buffer will be
3680  * returned.
3681  */
3682 static arc_buf_contents_t
3683 arc_adjust_type(arc_state_t *state)
3684 {
3685         multilist_t *data_ml = &state->arcs_list[ARC_BUFC_DATA];
3686         multilist_t *meta_ml = &state->arcs_list[ARC_BUFC_METADATA];
3687         int data_idx = multilist_get_random_index(data_ml);
3688         int meta_idx = multilist_get_random_index(meta_ml);
3689         multilist_sublist_t *data_mls;
3690         multilist_sublist_t *meta_mls;
3691         arc_buf_contents_t type;
3692         arc_buf_hdr_t *data_hdr;
3693         arc_buf_hdr_t *meta_hdr;
3694
3695         /*
3696          * We keep the sublist lock until we're finished, to prevent
3697          * the headers from being destroyed via arc_evict_state().
3698          */
3699         data_mls = multilist_sublist_lock(data_ml, data_idx);
3700         meta_mls = multilist_sublist_lock(meta_ml, meta_idx);
3701
3702         /*
3703          * These two loops are to ensure we skip any markers that
3704          * might be at the tail of the lists due to arc_evict_state().
3705          */
3706
3707         for (data_hdr = multilist_sublist_tail(data_mls); data_hdr != NULL;
3708             data_hdr = multilist_sublist_prev(data_mls, data_hdr)) {
3709                 if (data_hdr->b_spa != 0)
3710                         break;
3711         }
3712
3713         for (meta_hdr = multilist_sublist_tail(meta_mls); meta_hdr != NULL;
3714             meta_hdr = multilist_sublist_prev(meta_mls, meta_hdr)) {
3715                 if (meta_hdr->b_spa != 0)
3716                         break;
3717         }
3718
3719         if (data_hdr == NULL && meta_hdr == NULL) {
3720                 type = ARC_BUFC_DATA;
3721         } else if (data_hdr == NULL) {
3722                 ASSERT3P(meta_hdr, !=, NULL);
3723                 type = ARC_BUFC_METADATA;
3724         } else if (meta_hdr == NULL) {
3725                 ASSERT3P(data_hdr, !=, NULL);
3726                 type = ARC_BUFC_DATA;
3727         } else {
3728                 ASSERT3P(data_hdr, !=, NULL);
3729                 ASSERT3P(meta_hdr, !=, NULL);
3730
3731                 /* The headers can't be on the sublist without an L1 header */
3732                 ASSERT(HDR_HAS_L1HDR(data_hdr));
3733                 ASSERT(HDR_HAS_L1HDR(meta_hdr));
3734
3735                 if (data_hdr->b_l1hdr.b_arc_access <
3736                     meta_hdr->b_l1hdr.b_arc_access) {
3737                         type = ARC_BUFC_DATA;
3738                 } else {
3739                         type = ARC_BUFC_METADATA;
3740                 }
3741         }
3742
3743         multilist_sublist_unlock(meta_mls);
3744         multilist_sublist_unlock(data_mls);
3745
3746         return (type);
3747 }
3748
3749 /*
3750  * Evict buffers from the cache, such that arc_size is capped by arc_c.
3751  */
3752 static uint64_t
3753 arc_adjust(void)
3754 {
3755         uint64_t total_evicted = 0;
3756         uint64_t bytes;
3757         int64_t target;
3758
3759         /*
3760          * If we're over arc_meta_limit, we want to correct that before
3761          * potentially evicting data buffers below.
3762          */
3763         total_evicted += arc_adjust_meta();
3764
3765         /*
3766          * Adjust MRU size
3767          *
3768          * If we're over the target cache size, we want to evict enough
3769          * from the list to get back to our target size. We don't want
3770          * to evict too much from the MRU, such that it drops below
3771          * arc_p. So, if we're over our target cache size more than
3772          * the MRU is over arc_p, we'll evict enough to get back to
3773          * arc_p here, and then evict more from the MFU below.
3774          */
3775         target = MIN((int64_t)(arc_size - arc_c),
3776             (int64_t)(refcount_count(&arc_anon->arcs_size) +
3777             refcount_count(&arc_mru->arcs_size) + arc_meta_used - arc_p));
3778
3779         /*
3780          * If we're below arc_meta_min, always prefer to evict data.
3781          * Otherwise, try to satisfy the requested number of bytes to
3782          * evict from the type which contains older buffers; in an
3783          * effort to keep newer buffers in the cache regardless of their
3784          * type. If we cannot satisfy the number of bytes from this
3785          * type, spill over into the next type.
3786          */
3787         if (arc_adjust_type(arc_mru) == ARC_BUFC_METADATA &&
3788             arc_meta_used > arc_meta_min) {
3789                 bytes = arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_METADATA);
3790                 total_evicted += bytes;
3791
3792                 /*
3793                  * If we couldn't evict our target number of bytes from
3794                  * metadata, we try to get the rest from data.
3795                  */
3796                 target -= bytes;
3797
3798                 total_evicted +=
3799                     arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_DATA);
3800         } else {
3801                 bytes = arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_DATA);
3802                 total_evicted += bytes;
3803
3804                 /*
3805                  * If we couldn't evict our target number of bytes from
3806                  * data, we try to get the rest from metadata.
3807                  */
3808                 target -= bytes;
3809
3810                 total_evicted +=
3811                     arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_METADATA);
3812         }
3813
3814         /*
3815          * Adjust MFU size
3816          *
3817          * Now that we've tried to evict enough from the MRU to get its
3818          * size back to arc_p, if we're still above the target cache
3819          * size, we evict the rest from the MFU.
3820          */
3821         target = arc_size - arc_c;
3822
3823         if (arc_adjust_type(arc_mfu) == ARC_BUFC_METADATA &&
3824             arc_meta_used > arc_meta_min) {
3825                 bytes = arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA);
3826                 total_evicted += bytes;
3827
3828                 /*
3829                  * If we couldn't evict our target number of bytes from
3830                  * metadata, we try to get the rest from data.
3831                  */
3832                 target -= bytes;
3833
3834                 total_evicted +=
3835                     arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_DATA);
3836         } else {
3837                 bytes = arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_DATA);
3838                 total_evicted += bytes;
3839
3840                 /*
3841                  * If we couldn't evict our target number of bytes from
3842                  * data, we try to get the rest from data.
3843                  */
3844                 target -= bytes;
3845
3846                 total_evicted +=
3847                     arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA);
3848         }
3849
3850         /*
3851          * Adjust ghost lists
3852          *
3853          * In addition to the above, the ARC also defines target values
3854          * for the ghost lists. The sum of the mru list and mru ghost
3855          * list should never exceed the target size of the cache, and
3856          * the sum of the mru list, mfu list, mru ghost list, and mfu
3857          * ghost list should never exceed twice the target size of the
3858          * cache. The following logic enforces these limits on the ghost
3859          * caches, and evicts from them as needed.
3860          */
3861         target = refcount_count(&arc_mru->arcs_size) +
3862             refcount_count(&arc_mru_ghost->arcs_size) - arc_c;
3863
3864         bytes = arc_adjust_impl(arc_mru_ghost, 0, target, ARC_BUFC_DATA);
3865         total_evicted += bytes;
3866
3867         target -= bytes;
3868
3869         total_evicted +=
3870             arc_adjust_impl(arc_mru_ghost, 0, target, ARC_BUFC_METADATA);
3871
3872         /*
3873          * We assume the sum of the mru list and mfu list is less than
3874          * or equal to arc_c (we enforced this above), which means we
3875          * can use the simpler of the two equations below:
3876          *
3877          *      mru + mfu + mru ghost + mfu ghost <= 2 * arc_c
3878          *                  mru ghost + mfu ghost <= arc_c
3879          */
3880         target = refcount_count(&arc_mru_ghost->arcs_size) +
3881             refcount_count(&arc_mfu_ghost->arcs_size) - arc_c;
3882
3883         bytes = arc_adjust_impl(arc_mfu_ghost, 0, target, ARC_BUFC_DATA);
3884         total_evicted += bytes;
3885
3886         target -= bytes;
3887
3888         total_evicted +=
3889             arc_adjust_impl(arc_mfu_ghost, 0, target, ARC_BUFC_METADATA);
3890
3891         return (total_evicted);
3892 }
3893
3894 void
3895 arc_flush(spa_t *spa, boolean_t retry)
3896 {
3897         uint64_t guid = 0;
3898
3899         /*
3900          * If retry is B_TRUE, a spa must not be specified since we have
3901          * no good way to determine if all of a spa's buffers have been
3902          * evicted from an arc state.
3903          */
3904         ASSERT(!retry || spa == 0);
3905
3906         if (spa != NULL)
3907                 guid = spa_load_guid(spa);
3908
3909         (void) arc_flush_state(arc_mru, guid, ARC_BUFC_DATA, retry);
3910         (void) arc_flush_state(arc_mru, guid, ARC_BUFC_METADATA, retry);
3911
3912         (void) arc_flush_state(arc_mfu, guid, ARC_BUFC_DATA, retry);
3913         (void) arc_flush_state(arc_mfu, guid, ARC_BUFC_METADATA, retry);
3914
3915         (void) arc_flush_state(arc_mru_ghost, guid, ARC_BUFC_DATA, retry);
3916         (void) arc_flush_state(arc_mru_ghost, guid, ARC_BUFC_METADATA, retry);
3917
3918         (void) arc_flush_state(arc_mfu_ghost, guid, ARC_BUFC_DATA, retry);
3919         (void) arc_flush_state(arc_mfu_ghost, guid, ARC_BUFC_METADATA, retry);
3920 }
3921
3922 void
3923 arc_shrink(int64_t to_free)
3924 {
3925         uint64_t c = arc_c;
3926
3927         if (c > to_free && c - to_free > arc_c_min) {
3928                 arc_c = c - to_free;
3929                 atomic_add_64(&arc_p, -(arc_p >> arc_shrink_shift));
3930                 if (arc_c > arc_size)
3931                         arc_c = MAX(arc_size, arc_c_min);
3932                 if (arc_p > arc_c)
3933                         arc_p = (arc_c >> 1);
3934                 ASSERT(arc_c >= arc_c_min);
3935                 ASSERT((int64_t)arc_p >= 0);
3936         } else {
3937                 arc_c = arc_c_min;
3938         }
3939
3940         if (arc_size > arc_c)
3941                 (void) arc_adjust();
3942 }
3943
3944 /*
3945  * Return maximum amount of memory that we could possibly use.  Reduced
3946  * to half of all memory in user space which is primarily used for testing.
3947  */
3948 static uint64_t
3949 arc_all_memory(void)
3950 {
3951 #ifdef _KERNEL
3952         return (MIN(ptob(physmem),
3953             vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC)));
3954 #else
3955         return (ptob(physmem) / 2);
3956 #endif
3957 }
3958
3959 typedef enum free_memory_reason_t {
3960         FMR_UNKNOWN,
3961         FMR_NEEDFREE,
3962         FMR_LOTSFREE,
3963         FMR_SWAPFS_MINFREE,
3964         FMR_PAGES_PP_MAXIMUM,
3965         FMR_HEAP_ARENA,
3966         FMR_ZIO_ARENA,
3967 } free_memory_reason_t;
3968
3969 int64_t last_free_memory;
3970 free_memory_reason_t last_free_reason;
3971
3972 #ifdef _KERNEL
3973 /*
3974  * Additional reserve of pages for pp_reserve.
3975  */
3976 int64_t arc_pages_pp_reserve = 64;
3977
3978 /*
3979  * Additional reserve of pages for swapfs.
3980  */
3981 int64_t arc_swapfs_reserve = 64;
3982 #endif /* _KERNEL */
3983
3984 /*
3985  * Return the amount of memory that can be consumed before reclaim will be
3986  * needed.  Positive if there is sufficient free memory, negative indicates
3987  * the amount of memory that needs to be freed up.
3988  */
3989 static int64_t
3990 arc_available_memory(void)
3991 {
3992         int64_t lowest = INT64_MAX;
3993         free_memory_reason_t r = FMR_UNKNOWN;
3994 #ifdef _KERNEL
3995         uint64_t available_memory = ptob(freemem);
3996         int64_t n;
3997 #ifdef __linux__
3998         pgcnt_t needfree = btop(arc_need_free);
3999         pgcnt_t lotsfree = btop(arc_sys_free);
4000         pgcnt_t desfree = 0;
4001 #endif
4002
4003 #if defined(__i386)
4004         available_memory =
4005             MIN(available_memory, vmem_size(heap_arena, VMEM_FREE));
4006 #endif
4007
4008         if (needfree > 0) {
4009                 n = PAGESIZE * (-needfree);
4010                 if (n < lowest) {
4011                         lowest = n;
4012                         r = FMR_NEEDFREE;
4013                 }
4014         }
4015
4016         /*
4017          * check that we're out of range of the pageout scanner.  It starts to
4018          * schedule paging if freemem is less than lotsfree and needfree.
4019          * lotsfree is the high-water mark for pageout, and needfree is the
4020          * number of needed free pages.  We add extra pages here to make sure
4021          * the scanner doesn't start up while we're freeing memory.
4022          */
4023         n = PAGESIZE * (btop(available_memory) - lotsfree - needfree - desfree);
4024         if (n < lowest) {
4025                 lowest = n;
4026                 r = FMR_LOTSFREE;
4027         }
4028
4029 #ifndef __linux__
4030         /*
4031          * check to make sure that swapfs has enough space so that anon
4032          * reservations can still succeed. anon_resvmem() checks that the
4033          * availrmem is greater than swapfs_minfree, and the number of reserved
4034          * swap pages.  We also add a bit of extra here just to prevent
4035          * circumstances from getting really dire.
4036          */
4037         n = PAGESIZE * (availrmem - swapfs_minfree - swapfs_reserve -
4038             desfree - arc_swapfs_reserve);
4039         if (n < lowest) {
4040                 lowest = n;
4041                 r = FMR_SWAPFS_MINFREE;
4042         }
4043
4044
4045         /*
4046          * Check that we have enough availrmem that memory locking (e.g., via
4047          * mlock(3C) or memcntl(2)) can still succeed.  (pages_pp_maximum
4048          * stores the number of pages that cannot be locked; when availrmem
4049          * drops below pages_pp_maximum, page locking mechanisms such as
4050          * page_pp_lock() will fail.)
4051          */
4052         n = PAGESIZE * (availrmem - pages_pp_maximum -
4053             arc_pages_pp_reserve);
4054         if (n < lowest) {
4055                 lowest = n;
4056                 r = FMR_PAGES_PP_MAXIMUM;
4057         }
4058 #endif
4059
4060 #if defined(__i386)
4061         /*
4062          * If we're on an i386 platform, it's possible that we'll exhaust the
4063          * kernel heap space before we ever run out of available physical
4064          * memory.  Most checks of the size of the heap_area compare against
4065          * tune.t_minarmem, which is the minimum available real memory that we
4066          * can have in the system.  However, this is generally fixed at 25 pages
4067          * which is so low that it's useless.  In this comparison, we seek to
4068          * calculate the total heap-size, and reclaim if more than 3/4ths of the
4069          * heap is allocated.  (Or, in the calculation, if less than 1/4th is
4070          * free)
4071          */
4072         n = vmem_size(heap_arena, VMEM_FREE) -
4073             (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2);
4074         if (n < lowest) {
4075                 lowest = n;
4076                 r = FMR_HEAP_ARENA;
4077         }
4078 #endif
4079
4080         /*
4081          * If zio data pages are being allocated out of a separate heap segment,
4082          * then enforce that the size of available vmem for this arena remains
4083          * above about 1/4th (1/(2^arc_zio_arena_free_shift)) free.
4084          *
4085          * Note that reducing the arc_zio_arena_free_shift keeps more virtual
4086          * memory (in the zio_arena) free, which can avoid memory
4087          * fragmentation issues.
4088          */
4089         if (zio_arena != NULL) {
4090                 n = (int64_t)vmem_size(zio_arena, VMEM_FREE) -
4091                     (vmem_size(zio_arena, VMEM_ALLOC) >>
4092                     arc_zio_arena_free_shift);
4093                 if (n < lowest) {
4094                         lowest = n;
4095                         r = FMR_ZIO_ARENA;
4096                 }
4097         }
4098 #else /* _KERNEL */
4099         /* Every 100 calls, free a small amount */
4100         if (spa_get_random(100) == 0)
4101                 lowest = -1024;
4102 #endif /* _KERNEL */
4103
4104         last_free_memory = lowest;
4105         last_free_reason = r;
4106
4107         return (lowest);
4108 }
4109
4110 /*
4111  * Determine if the system is under memory pressure and is asking
4112  * to reclaim memory. A return value of B_TRUE indicates that the system
4113  * is under memory pressure and that the arc should adjust accordingly.
4114  */
4115 static boolean_t
4116 arc_reclaim_needed(void)
4117 {
4118         return (arc_available_memory() < 0);
4119 }
4120
4121 static void
4122 arc_kmem_reap_now(void)
4123 {
4124         size_t                  i;
4125         kmem_cache_t            *prev_cache = NULL;
4126         kmem_cache_t            *prev_data_cache = NULL;
4127         extern kmem_cache_t     *zio_buf_cache[];
4128         extern kmem_cache_t     *zio_data_buf_cache[];
4129         extern kmem_cache_t     *range_seg_cache;
4130
4131         if ((arc_meta_used >= arc_meta_limit) && zfs_arc_meta_prune) {
4132                 /*
4133                  * We are exceeding our meta-data cache limit.
4134                  * Prune some entries to release holds on meta-data.
4135                  */
4136                 arc_prune_async(zfs_arc_meta_prune);
4137         }
4138
4139         for (i = 0; i < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; i++) {
4140 #ifdef _ILP32
4141                 /* reach upper limit of cache size on 32-bit */
4142                 if (zio_buf_cache[i] == NULL)
4143                         break;
4144 #endif
4145                 if (zio_buf_cache[i] != prev_cache) {
4146                         prev_cache = zio_buf_cache[i];
4147                         kmem_cache_reap_now(zio_buf_cache[i]);
4148                 }
4149                 if (zio_data_buf_cache[i] != prev_data_cache) {
4150                         prev_data_cache = zio_data_buf_cache[i];
4151                         kmem_cache_reap_now(zio_data_buf_cache[i]);
4152                 }
4153         }
4154         kmem_cache_reap_now(buf_cache);
4155         kmem_cache_reap_now(hdr_full_cache);
4156         kmem_cache_reap_now(hdr_l2only_cache);
4157         kmem_cache_reap_now(range_seg_cache);
4158
4159         if (zio_arena != NULL) {
4160                 /*
4161                  * Ask the vmem arena to reclaim unused memory from its
4162                  * quantum caches.
4163                  */
4164                 vmem_qcache_reap(zio_arena);
4165         }
4166 }
4167
4168 /*
4169  * Threads can block in arc_get_data_impl() waiting for this thread to evict
4170  * enough data and signal them to proceed. When this happens, the threads in
4171  * arc_get_data_impl() are sleeping while holding the hash lock for their
4172  * particular arc header. Thus, we must be careful to never sleep on a
4173  * hash lock in this thread. This is to prevent the following deadlock:
4174  *
4175  *  - Thread A sleeps on CV in arc_get_data_impl() holding hash lock "L",
4176  *    waiting for the reclaim thread to signal it.
4177  *
4178  *  - arc_reclaim_thread() tries to acquire hash lock "L" using mutex_enter,
4179  *    fails, and goes to sleep forever.
4180  *
4181  * This possible deadlock is avoided by always acquiring a hash lock
4182  * using mutex_tryenter() from arc_reclaim_thread().
4183  */
4184 static void
4185 arc_reclaim_thread(void)
4186 {
4187         fstrans_cookie_t        cookie = spl_fstrans_mark();
4188         hrtime_t                growtime = 0;
4189         callb_cpr_t             cpr;
4190
4191         CALLB_CPR_INIT(&cpr, &arc_reclaim_lock, callb_generic_cpr, FTAG);
4192
4193         mutex_enter(&arc_reclaim_lock);
4194         while (!arc_reclaim_thread_exit) {
4195                 int64_t to_free;
4196                 int64_t free_memory = arc_available_memory();
4197                 uint64_t evicted = 0;
4198
4199                 arc_tuning_update();
4200
4201                 /*
4202                  * This is necessary in order for the mdb ::arc dcmd to
4203                  * show up to date information. Since the ::arc command
4204                  * does not call the kstat's update function, without
4205                  * this call, the command may show stale stats for the
4206                  * anon, mru, mru_ghost, mfu, and mfu_ghost lists. Even
4207                  * with this change, the data might be up to 1 second
4208                  * out of date; but that should suffice. The arc_state_t
4209                  * structures can be queried directly if more accurate
4210                  * information is needed.
4211                  */
4212 #ifndef __linux__
4213                 if (arc_ksp != NULL)
4214                         arc_ksp->ks_update(arc_ksp, KSTAT_READ);
4215 #endif
4216                 mutex_exit(&arc_reclaim_lock);
4217
4218                 if (free_memory < 0) {
4219
4220                         arc_no_grow = B_TRUE;
4221                         arc_warm = B_TRUE;
4222
4223                         /*
4224                          * Wait at least zfs_grow_retry (default 5) seconds
4225                          * before considering growing.
4226                          */
4227                         growtime = gethrtime() + SEC2NSEC(arc_grow_retry);
4228
4229                         arc_kmem_reap_now();
4230
4231                         /*
4232                          * If we are still low on memory, shrink the ARC
4233                          * so that we have arc_shrink_min free space.
4234                          */
4235                         free_memory = arc_available_memory();
4236
4237                         to_free = (arc_c >> arc_shrink_shift) - free_memory;
4238                         if (to_free > 0) {
4239 #ifdef _KERNEL
4240                                 to_free = MAX(to_free, arc_need_free);
4241 #endif
4242                                 arc_shrink(to_free);
4243                         }
4244                 } else if (free_memory < arc_c >> arc_no_grow_shift) {
4245                         arc_no_grow = B_TRUE;
4246                 } else if (gethrtime() >= growtime) {
4247                         arc_no_grow = B_FALSE;
4248                 }
4249
4250                 evicted = arc_adjust();
4251
4252                 mutex_enter(&arc_reclaim_lock);
4253
4254                 /*
4255                  * If evicted is zero, we couldn't evict anything via
4256                  * arc_adjust(). This could be due to hash lock
4257                  * collisions, but more likely due to the majority of
4258                  * arc buffers being unevictable. Therefore, even if
4259                  * arc_size is above arc_c, another pass is unlikely to
4260                  * be helpful and could potentially cause us to enter an
4261                  * infinite loop.
4262                  */
4263                 if (arc_size <= arc_c || evicted == 0) {
4264                         /*
4265                          * We're either no longer overflowing, or we
4266                          * can't evict anything more, so we should wake
4267                          * up any threads before we go to sleep and clear
4268                          * arc_need_free since nothing more can be done.
4269                          */
4270                         cv_broadcast(&arc_reclaim_waiters_cv);
4271                         arc_need_free = 0;
4272
4273                         /*
4274                          * Block until signaled, or after one second (we
4275                          * might need to perform arc_kmem_reap_now()
4276                          * even if we aren't being signalled)
4277                          */
4278                         CALLB_CPR_SAFE_BEGIN(&cpr);
4279                         (void) cv_timedwait_sig_hires(&arc_reclaim_thread_cv,
4280                             &arc_reclaim_lock, SEC2NSEC(1), MSEC2NSEC(1), 0);
4281                         CALLB_CPR_SAFE_END(&cpr, &arc_reclaim_lock);
4282                 }
4283         }
4284
4285         arc_reclaim_thread_exit = B_FALSE;
4286         cv_broadcast(&arc_reclaim_thread_cv);
4287         CALLB_CPR_EXIT(&cpr);           /* drops arc_reclaim_lock */
4288         spl_fstrans_unmark(cookie);
4289         thread_exit();
4290 }
4291
4292 #ifdef _KERNEL
4293 /*
4294  * Determine the amount of memory eligible for eviction contained in the
4295  * ARC. All clean data reported by the ghost lists can always be safely
4296  * evicted. Due to arc_c_min, the same does not hold for all clean data
4297  * contained by the regular mru and mfu lists.
4298  *
4299  * In the case of the regular mru and mfu lists, we need to report as
4300  * much clean data as possible, such that evicting that same reported
4301  * data will not bring arc_size below arc_c_min. Thus, in certain
4302  * circumstances, the total amount of clean data in the mru and mfu
4303  * lists might not actually be evictable.
4304  *
4305  * The following two distinct cases are accounted for:
4306  *
4307  * 1. The sum of the amount of dirty data contained by both the mru and
4308  *    mfu lists, plus the ARC's other accounting (e.g. the anon list),
4309  *    is greater than or equal to arc_c_min.
4310  *    (i.e. amount of dirty data >= arc_c_min)
4311  *
4312  *    This is the easy case; all clean data contained by the mru and mfu
4313  *    lists is evictable. Evicting all clean data can only drop arc_size
4314  *    to the amount of dirty data, which is greater than arc_c_min.
4315  *
4316  * 2. The sum of the amount of dirty data contained by both the mru and
4317  *    mfu lists, plus the ARC's other accounting (e.g. the anon list),
4318  *    is less than arc_c_min.
4319  *    (i.e. arc_c_min > amount of dirty data)
4320  *
4321  *    2.1. arc_size is greater than or equal arc_c_min.
4322  *         (i.e. arc_size >= arc_c_min > amount of dirty data)
4323  *
4324  *         In this case, not all clean data from the regular mru and mfu
4325  *         lists is actually evictable; we must leave enough clean data
4326  *         to keep arc_size above arc_c_min. Thus, the maximum amount of
4327  *         evictable data from the two lists combined, is exactly the
4328  *         difference between arc_size and arc_c_min.
4329  *
4330  *    2.2. arc_size is less than arc_c_min
4331  *         (i.e. arc_c_min > arc_size > amount of dirty data)
4332  *
4333  *         In this case, none of the data contained in the mru and mfu
4334  *         lists is evictable, even if it's clean. Since arc_size is
4335  *         already below arc_c_min, evicting any more would only
4336  *         increase this negative difference.
4337  */
4338 static uint64_t
4339 arc_evictable_memory(void) {
4340         uint64_t arc_clean =
4341             refcount_count(&arc_mru->arcs_esize[ARC_BUFC_DATA]) +
4342             refcount_count(&arc_mru->arcs_esize[ARC_BUFC_METADATA]) +
4343             refcount_count(&arc_mfu->arcs_esize[ARC_BUFC_DATA]) +
4344             refcount_count(&arc_mfu->arcs_esize[ARC_BUFC_METADATA]);
4345         uint64_t ghost_clean =
4346             refcount_count(&arc_mru_ghost->arcs_esize[ARC_BUFC_DATA]) +
4347             refcount_count(&arc_mru_ghost->arcs_esize[ARC_BUFC_METADATA]) +
4348             refcount_count(&arc_mfu_ghost->arcs_esize[ARC_BUFC_DATA]) +
4349             refcount_count(&arc_mfu_ghost->arcs_esize[ARC_BUFC_METADATA]);
4350         uint64_t arc_dirty = MAX((int64_t)arc_size - (int64_t)arc_clean, 0);
4351
4352         if (arc_dirty >= arc_c_min)
4353                 return (ghost_clean + arc_clean);
4354
4355         return (ghost_clean + MAX((int64_t)arc_size - (int64_t)arc_c_min, 0));
4356 }
4357
4358 /*
4359  * If sc->nr_to_scan is zero, the caller is requesting a query of the
4360  * number of objects which can potentially be freed.  If it is nonzero,
4361  * the request is to free that many objects.
4362  *
4363  * Linux kernels >= 3.12 have the count_objects and scan_objects callbacks
4364  * in struct shrinker and also require the shrinker to return the number
4365  * of objects freed.
4366  *
4367  * Older kernels require the shrinker to return the number of freeable
4368  * objects following the freeing of nr_to_free.
4369  */
4370 static spl_shrinker_t
4371 __arc_shrinker_func(struct shrinker *shrink, struct shrink_control *sc)
4372 {
4373         int64_t pages;
4374
4375         /* The arc is considered warm once reclaim has occurred */
4376         if (unlikely(arc_warm == B_FALSE))
4377                 arc_warm = B_TRUE;
4378
4379         /* Return the potential number of reclaimable pages */
4380         pages = btop((int64_t)arc_evictable_memory());
4381         if (sc->nr_to_scan == 0)
4382                 return (pages);
4383
4384         /* Not allowed to perform filesystem reclaim */
4385         if (!(sc->gfp_mask & __GFP_FS))
4386                 return (SHRINK_STOP);
4387
4388         /* Reclaim in progress */
4389         if (mutex_tryenter(&arc_reclaim_lock) == 0)
4390                 return (SHRINK_STOP);
4391
4392         mutex_exit(&arc_reclaim_lock);
4393
4394         /*
4395          * Evict the requested number of pages by shrinking arc_c the
4396          * requested amount.  If there is nothing left to evict just
4397          * reap whatever we can from the various arc slabs.
4398          */
4399         if (pages > 0) {
4400                 arc_shrink(ptob(sc->nr_to_scan));
4401                 arc_kmem_reap_now();
4402 #ifdef HAVE_SPLIT_SHRINKER_CALLBACK
4403                 pages = MAX(pages - btop(arc_evictable_memory()), 0);
4404 #else
4405                 pages = btop(arc_evictable_memory());
4406 #endif
4407         } else {
4408                 arc_kmem_reap_now();
4409                 pages = SHRINK_STOP;
4410         }
4411
4412         /*
4413          * We've reaped what we can, wake up threads.
4414          */
4415         cv_broadcast(&arc_reclaim_waiters_cv);
4416
4417         /*
4418          * When direct reclaim is observed it usually indicates a rapid
4419          * increase in memory pressure.  This occurs because the kswapd
4420          * threads were unable to asynchronously keep enough free memory
4421          * available.  In this case set arc_no_grow to briefly pause arc
4422          * growth to avoid compounding the memory pressure.
4423          */
4424         if (current_is_kswapd()) {
4425                 ARCSTAT_BUMP(arcstat_memory_indirect_count);
4426         } else {
4427                 arc_no_grow = B_TRUE;
4428                 arc_need_free = ptob(sc->nr_to_scan);
4429                 ARCSTAT_BUMP(arcstat_memory_direct_count);
4430         }
4431
4432         return (pages);
4433 }
4434 SPL_SHRINKER_CALLBACK_WRAPPER(arc_shrinker_func);
4435
4436 SPL_SHRINKER_DECLARE(arc_shrinker, arc_shrinker_func, DEFAULT_SEEKS);
4437 #endif /* _KERNEL */
4438
4439 /*
4440  * Adapt arc info given the number of bytes we are trying to add and
4441  * the state that we are comming from.  This function is only called
4442  * when we are adding new content to the cache.
4443  */
4444 static void
4445 arc_adapt(int bytes, arc_state_t *state)
4446 {
4447         int mult;
4448         uint64_t arc_p_min = (arc_c >> arc_p_min_shift);
4449         int64_t mrug_size = refcount_count(&arc_mru_ghost->arcs_size);
4450         int64_t mfug_size = refcount_count(&arc_mfu_ghost->arcs_size);
4451
4452         if (state == arc_l2c_only)
4453                 return;
4454
4455         ASSERT(bytes > 0);
4456         /*
4457          * Adapt the target size of the MRU list:
4458          *      - if we just hit in the MRU ghost list, then increase
4459          *        the target size of the MRU list.
4460          *      - if we just hit in the MFU ghost list, then increase
4461          *        the target size of the MFU list by decreasing the
4462          *        target size of the MRU list.
4463          */
4464         if (state == arc_mru_ghost) {
4465                 mult = (mrug_size >= mfug_size) ? 1 : (mfug_size / mrug_size);
4466                 if (!zfs_arc_p_dampener_disable)
4467                         mult = MIN(mult, 10); /* avoid wild arc_p adjustment */
4468
4469                 arc_p = MIN(arc_c - arc_p_min, arc_p + bytes * mult);
4470         } else if (state == arc_mfu_ghost) {
4471                 uint64_t delta;
4472
4473                 mult = (mfug_size >= mrug_size) ? 1 : (mrug_size / mfug_size);
4474                 if (!zfs_arc_p_dampener_disable)
4475                         mult = MIN(mult, 10);
4476
4477                 delta = MIN(bytes * mult, arc_p);
4478                 arc_p = MAX(arc_p_min, arc_p - delta);
4479         }
4480         ASSERT((int64_t)arc_p >= 0);
4481
4482         if (arc_reclaim_needed()) {
4483                 cv_signal(&arc_reclaim_thread_cv);
4484                 return;
4485         }
4486
4487         if (arc_no_grow)
4488                 return;
4489
4490         if (arc_c >= arc_c_max)
4491                 return;
4492
4493         /*
4494          * If we're within (2 * maxblocksize) bytes of the target
4495          * cache size, increment the target cache size
4496          */
4497         ASSERT3U(arc_c, >=, 2ULL << SPA_MAXBLOCKSHIFT);
4498         if (arc_size >= arc_c - (2ULL << SPA_MAXBLOCKSHIFT)) {
4499                 atomic_add_64(&arc_c, (int64_t)bytes);
4500                 if (arc_c > arc_c_max)
4501                         arc_c = arc_c_max;
4502                 else if (state == arc_anon)
4503                         atomic_add_64(&arc_p, (int64_t)bytes);
4504                 if (arc_p > arc_c)
4505                         arc_p = arc_c;
4506         }
4507         ASSERT((int64_t)arc_p >= 0);
4508 }
4509
4510 /*
4511  * Check if arc_size has grown past our upper threshold, determined by
4512  * zfs_arc_overflow_shift.
4513  */
4514 static boolean_t
4515 arc_is_overflowing(void)
4516 {
4517         /* Always allow at least one block of overflow */
4518         uint64_t overflow = MAX(SPA_MAXBLOCKSIZE,
4519             arc_c >> zfs_arc_overflow_shift);
4520
4521         return (arc_size >= arc_c + overflow);
4522 }
4523
4524 static abd_t *
4525 arc_get_data_abd(arc_buf_hdr_t *hdr, uint64_t size, void *tag)
4526 {
4527         arc_buf_contents_t type = arc_buf_type(hdr);
4528
4529         arc_get_data_impl(hdr, size, tag);
4530         if (type == ARC_BUFC_METADATA) {
4531                 return (abd_alloc(size, B_TRUE));
4532         } else {
4533                 ASSERT(type == ARC_BUFC_DATA);
4534                 return (abd_alloc(size, B_FALSE));
4535         }
4536 }
4537
4538 static void *
4539 arc_get_data_buf(arc_buf_hdr_t *hdr, uint64_t size, void *tag)
4540 {
4541         arc_buf_contents_t type = arc_buf_type(hdr);
4542
4543         arc_get_data_impl(hdr, size, tag);
4544         if (type == ARC_BUFC_METADATA) {
4545                 return (zio_buf_alloc(size));
4546         } else {
4547                 ASSERT(type == ARC_BUFC_DATA);
4548                 return (zio_data_buf_alloc(size));
4549         }
4550 }
4551
4552 /*
4553  * Allocate a block and return it to the caller. If we are hitting the
4554  * hard limit for the cache size, we must sleep, waiting for the eviction
4555  * thread to catch up. If we're past the target size but below the hard
4556  * limit, we'll only signal the reclaim thread and continue on.
4557  */
4558 static void
4559 arc_get_data_impl(arc_buf_hdr_t *hdr, uint64_t size, void *tag)
4560 {
4561         arc_state_t *state = hdr->b_l1hdr.b_state;
4562         arc_buf_contents_t type = arc_buf_type(hdr);
4563
4564         arc_adapt(size, state);
4565
4566         /*
4567          * If arc_size is currently overflowing, and has grown past our
4568          * upper limit, we must be adding data faster than the evict
4569          * thread can evict. Thus, to ensure we don't compound the
4570          * problem by adding more data and forcing arc_size to grow even
4571          * further past it's target size, we halt and wait for the
4572          * eviction thread to catch up.
4573          *
4574          * It's also possible that the reclaim thread is unable to evict
4575          * enough buffers to get arc_size below the overflow limit (e.g.
4576          * due to buffers being un-evictable, or hash lock collisions).
4577          * In this case, we want to proceed regardless if we're
4578          * overflowing; thus we don't use a while loop here.
4579          */
4580         if (arc_is_overflowing()) {
4581                 mutex_enter(&arc_reclaim_lock);
4582
4583                 /*
4584                  * Now that we've acquired the lock, we may no longer be
4585                  * over the overflow limit, lets check.
4586                  *
4587                  * We're ignoring the case of spurious wake ups. If that
4588                  * were to happen, it'd let this thread consume an ARC
4589                  * buffer before it should have (i.e. before we're under
4590                  * the overflow limit and were signalled by the reclaim
4591                  * thread). As long as that is a rare occurrence, it
4592                  * shouldn't cause any harm.
4593                  */
4594                 if (arc_is_overflowing()) {
4595                         cv_signal(&arc_reclaim_thread_cv);
4596                         cv_wait(&arc_reclaim_waiters_cv, &arc_reclaim_lock);
4597                 }
4598
4599                 mutex_exit(&arc_reclaim_lock);
4600         }
4601
4602         VERIFY3U(hdr->b_type, ==, type);
4603         if (type == ARC_BUFC_METADATA) {
4604                 arc_space_consume(size, ARC_SPACE_META);
4605         } else {
4606                 arc_space_consume(size, ARC_SPACE_DATA);
4607         }
4608
4609         /*
4610          * Update the state size.  Note that ghost states have a
4611          * "ghost size" and so don't need to be updated.
4612          */
4613         if (!GHOST_STATE(state)) {
4614
4615                 (void) refcount_add_many(&state->arcs_size, size, tag);
4616
4617                 /*
4618                  * If this is reached via arc_read, the link is
4619                  * protected by the hash lock. If reached via
4620                  * arc_buf_alloc, the header should not be accessed by
4621                  * any other thread. And, if reached via arc_read_done,
4622                  * the hash lock will protect it if it's found in the
4623                  * hash table; otherwise no other thread should be
4624                  * trying to [add|remove]_reference it.
4625                  */
4626                 if (multilist_link_active(&hdr->b_l1hdr.b_arc_node)) {
4627                         ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
4628                         (void) refcount_add_many(&state->arcs_esize[type],
4629                             size, tag);
4630                 }
4631
4632                 /*
4633                  * If we are growing the cache, and we are adding anonymous
4634                  * data, and we have outgrown arc_p, update arc_p
4635                  */
4636                 if (arc_size < arc_c && hdr->b_l1hdr.b_state == arc_anon &&
4637                     (refcount_count(&arc_anon->arcs_size) +
4638                     refcount_count(&arc_mru->arcs_size) > arc_p))
4639                         arc_p = MIN(arc_c, arc_p + size);
4640         }
4641 }
4642
4643 static void
4644 arc_free_data_abd(arc_buf_hdr_t *hdr, abd_t *abd, uint64_t size, void *tag)
4645 {
4646         arc_free_data_impl(hdr, size, tag);
4647         abd_free(abd);
4648 }
4649
4650 static void
4651 arc_free_data_buf(arc_buf_hdr_t *hdr, void *buf, uint64_t size, void *tag)
4652 {
4653         arc_buf_contents_t type = arc_buf_type(hdr);
4654
4655         arc_free_data_impl(hdr, size, tag);
4656         if (type == ARC_BUFC_METADATA) {
4657                 zio_buf_free(buf, size);
4658         } else {
4659                 ASSERT(type == ARC_BUFC_DATA);
4660                 zio_data_buf_free(buf, size);
4661         }
4662 }
4663
4664 /*
4665  * Free the arc data buffer.
4666  */
4667 static void
4668 arc_free_data_impl(arc_buf_hdr_t *hdr, uint64_t size, void *tag)
4669 {
4670         arc_state_t *state = hdr->b_l1hdr.b_state;
4671         arc_buf_contents_t type = arc_buf_type(hdr);
4672
4673         /* protected by hash lock, if in the hash table */
4674         if (multilist_link_active(&hdr->b_l1hdr.b_arc_node)) {
4675                 ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
4676                 ASSERT(state != arc_anon && state != arc_l2c_only);
4677
4678                 (void) refcount_remove_many(&state->arcs_esize[type],
4679                     size, tag);
4680         }
4681         (void) refcount_remove_many(&state->arcs_size, size, tag);
4682
4683         VERIFY3U(hdr->b_type, ==, type);
4684         if (type == ARC_BUFC_METADATA) {
4685                 arc_space_return(size, ARC_SPACE_META);
4686         } else {
4687                 ASSERT(type == ARC_BUFC_DATA);
4688                 arc_space_return(size, ARC_SPACE_DATA);
4689         }
4690 }
4691
4692 /*
4693  * This routine is called whenever a buffer is accessed.
4694  * NOTE: the hash lock is dropped in this function.
4695  */
4696 static void
4697 arc_access(arc_buf_hdr_t *hdr, kmutex_t *hash_lock)
4698 {
4699         clock_t now;
4700
4701         ASSERT(MUTEX_HELD(hash_lock));
4702         ASSERT(HDR_HAS_L1HDR(hdr));
4703
4704         if (hdr->b_l1hdr.b_state == arc_anon) {
4705                 /*
4706                  * This buffer is not in the cache, and does not
4707                  * appear in our "ghost" list.  Add the new buffer
4708                  * to the MRU state.
4709                  */
4710
4711                 ASSERT0(hdr->b_l1hdr.b_arc_access);
4712                 hdr->b_l1hdr.b_arc_access = ddi_get_lbolt();
4713                 DTRACE_PROBE1(new_state__mru, arc_buf_hdr_t *, hdr);
4714                 arc_change_state(arc_mru, hdr, hash_lock);
4715
4716         } else if (hdr->b_l1hdr.b_state == arc_mru) {
4717                 now = ddi_get_lbolt();
4718
4719                 /*
4720                  * If this buffer is here because of a prefetch, then either:
4721                  * - clear the flag if this is a "referencing" read
4722                  *   (any subsequent access will bump this into the MFU state).
4723                  * or
4724                  * - move the buffer to the head of the list if this is
4725                  *   another prefetch (to make it less likely to be evicted).
4726                  */
4727                 if (HDR_PREFETCH(hdr)) {
4728                         if (refcount_count(&hdr->b_l1hdr.b_refcnt) == 0) {
4729                                 /* link protected by hash lock */
4730                                 ASSERT(multilist_link_active(
4731                                     &hdr->b_l1hdr.b_arc_node));
4732                         } else {
4733                                 arc_hdr_clear_flags(hdr, ARC_FLAG_PREFETCH);
4734                                 atomic_inc_32(&hdr->b_l1hdr.b_mru_hits);
4735                                 ARCSTAT_BUMP(arcstat_mru_hits);
4736                         }
4737                         hdr->b_l1hdr.b_arc_access = now;
4738                         return;
4739                 }
4740
4741                 /*
4742                  * This buffer has been "accessed" only once so far,
4743                  * but it is still in the cache. Move it to the MFU
4744                  * state.
4745                  */
4746                 if (ddi_time_after(now, hdr->b_l1hdr.b_arc_access +
4747                     ARC_MINTIME)) {
4748                         /*
4749                          * More than 125ms have passed since we
4750                          * instantiated this buffer.  Move it to the
4751                          * most frequently used state.
4752                          */
4753                         hdr->b_l1hdr.b_arc_access = now;
4754                         DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr);
4755                         arc_change_state(arc_mfu, hdr, hash_lock);
4756                 }
4757                 atomic_inc_32(&hdr->b_l1hdr.b_mru_hits);
4758                 ARCSTAT_BUMP(arcstat_mru_hits);
4759         } else if (hdr->b_l1hdr.b_state == arc_mru_ghost) {
4760                 arc_state_t     *new_state;
4761                 /*
4762                  * This buffer has been "accessed" recently, but
4763                  * was evicted from the cache.  Move it to the
4764                  * MFU state.
4765                  */
4766
4767                 if (HDR_PREFETCH(hdr)) {
4768                         new_state = arc_mru;
4769                         if (refcount_count(&hdr->b_l1hdr.b_refcnt) > 0)
4770                                 arc_hdr_clear_flags(hdr, ARC_FLAG_PREFETCH);
4771                         DTRACE_PROBE1(new_state__mru, arc_buf_hdr_t *, hdr);
4772                 } else {
4773                         new_state = arc_mfu;
4774                         DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr);
4775                 }
4776
4777                 hdr->b_l1hdr.b_arc_access = ddi_get_lbolt();
4778                 arc_change_state(new_state, hdr, hash_lock);
4779
4780                 atomic_inc_32(&hdr->b_l1hdr.b_mru_ghost_hits);
4781                 ARCSTAT_BUMP(arcstat_mru_ghost_hits);
4782         } else if (hdr->b_l1hdr.b_state == arc_mfu) {
4783                 /*
4784                  * This buffer has been accessed more than once and is
4785                  * still in the cache.  Keep it in the MFU state.
4786                  *
4787                  * NOTE: an add_reference() that occurred when we did
4788                  * the arc_read() will have kicked this off the list.
4789                  * If it was a prefetch, we will explicitly move it to
4790                  * the head of the list now.
4791                  */
4792                 if ((HDR_PREFETCH(hdr)) != 0) {
4793                         ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
4794                         /* link protected by hash_lock */
4795                         ASSERT(multilist_link_active(&hdr->b_l1hdr.b_arc_node));
4796                 }
4797                 atomic_inc_32(&hdr->b_l1hdr.b_mfu_hits);
4798                 ARCSTAT_BUMP(arcstat_mfu_hits);
4799                 hdr->b_l1hdr.b_arc_access = ddi_get_lbolt();
4800         } else if (hdr->b_l1hdr.b_state == arc_mfu_ghost) {
4801                 arc_state_t     *new_state = arc_mfu;
4802                 /*
4803                  * This buffer has been accessed more than once but has
4804                  * been evicted from the cache.  Move it back to the
4805                  * MFU state.
4806                  */
4807
4808                 if (HDR_PREFETCH(hdr)) {
4809                         /*
4810                          * This is a prefetch access...
4811                          * move this block back to the MRU state.
4812                          */
4813                         ASSERT0(refcount_count(&hdr->b_l1hdr.b_refcnt));
4814                         new_state = arc_mru;
4815                 }
4816
4817                 hdr->b_l1hdr.b_arc_access = ddi_get_lbolt();
4818                 DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr);
4819                 arc_change_state(new_state, hdr, hash_lock);
4820
4821                 atomic_inc_32(&hdr->b_l1hdr.b_mfu_ghost_hits);
4822                 ARCSTAT_BUMP(arcstat_mfu_ghost_hits);
4823         } else if (hdr->b_l1hdr.b_state == arc_l2c_only) {
4824                 /*
4825                  * This buffer is on the 2nd Level ARC.
4826                  */
4827
4828                 hdr->b_l1hdr.b_arc_access = ddi_get_lbolt();
4829                 DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr);
4830                 arc_change_state(arc_mfu, hdr, hash_lock);
4831         } else {
4832                 cmn_err(CE_PANIC, "invalid arc state 0x%p",
4833                     hdr->b_l1hdr.b_state);
4834         }
4835 }
4836
4837 /* a generic arc_done_func_t which you can use */
4838 /* ARGSUSED */
4839 void
4840 arc_bcopy_func(zio_t *zio, arc_buf_t *buf, void *arg)
4841 {
4842         if (zio == NULL || zio->io_error == 0)
4843                 bcopy(buf->b_data, arg, arc_buf_size(buf));
4844         arc_buf_destroy(buf, arg);
4845 }
4846
4847 /* a generic arc_done_func_t */
4848 void
4849 arc_getbuf_func(zio_t *zio, arc_buf_t *buf, void *arg)
4850 {
4851         arc_buf_t **bufp = arg;
4852         if (zio && zio->io_error) {
4853                 arc_buf_destroy(buf, arg);
4854                 *bufp = NULL;
4855         } else {
4856                 *bufp = buf;
4857                 ASSERT(buf->b_data);
4858         }
4859 }
4860
4861 static void
4862 arc_hdr_verify(arc_buf_hdr_t *hdr, blkptr_t *bp)
4863 {
4864         if (BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) {
4865                 ASSERT3U(HDR_GET_PSIZE(hdr), ==, 0);
4866                 ASSERT3U(HDR_GET_COMPRESS(hdr), ==, ZIO_COMPRESS_OFF);
4867         } else {
4868                 if (HDR_COMPRESSION_ENABLED(hdr)) {
4869                         ASSERT3U(HDR_GET_COMPRESS(hdr), ==,
4870                             BP_GET_COMPRESS(bp));
4871                 }
4872                 ASSERT3U(HDR_GET_LSIZE(hdr), ==, BP_GET_LSIZE(bp));
4873                 ASSERT3U(HDR_GET_PSIZE(hdr), ==, BP_GET_PSIZE(bp));
4874         }
4875 }
4876
4877 static void
4878 arc_read_done(zio_t *zio)
4879 {
4880         arc_buf_hdr_t   *hdr = zio->io_private;
4881         kmutex_t        *hash_lock = NULL;
4882         arc_callback_t  *callback_list;
4883         arc_callback_t  *acb;
4884         boolean_t       freeable = B_FALSE;
4885         boolean_t       no_zio_error = (zio->io_error == 0);
4886         int callback_cnt = 0;
4887         /*
4888          * The hdr was inserted into hash-table and removed from lists
4889          * prior to starting I/O.  We should find this header, since
4890          * it's in the hash table, and it should be legit since it's
4891          * not possible to evict it during the I/O.  The only possible
4892          * reason for it not to be found is if we were freed during the
4893          * read.
4894          */
4895         if (HDR_IN_HASH_TABLE(hdr)) {
4896                 arc_buf_hdr_t *found;
4897
4898                 ASSERT3U(hdr->b_birth, ==, BP_PHYSICAL_BIRTH(zio->io_bp));
4899                 ASSERT3U(hdr->b_dva.dva_word[0], ==,
4900                     BP_IDENTITY(zio->io_bp)->dva_word[0]);
4901                 ASSERT3U(hdr->b_dva.dva_word[1], ==,
4902                     BP_IDENTITY(zio->io_bp)->dva_word[1]);
4903
4904                 found = buf_hash_find(hdr->b_spa, zio->io_bp, &hash_lock);
4905
4906                 ASSERT((found == hdr &&
4907                     DVA_EQUAL(&hdr->b_dva, BP_IDENTITY(zio->io_bp))) ||
4908                     (found == hdr && HDR_L2_READING(hdr)));
4909                 ASSERT3P(hash_lock, !=, NULL);
4910         }
4911
4912         if (no_zio_error) {
4913                 /* byteswap if necessary */
4914                 if (BP_SHOULD_BYTESWAP(zio->io_bp)) {
4915                         if (BP_GET_LEVEL(zio->io_bp) > 0) {
4916                                 hdr->b_l1hdr.b_byteswap = DMU_BSWAP_UINT64;
4917                         } else {
4918                                 hdr->b_l1hdr.b_byteswap =
4919                                     DMU_OT_BYTESWAP(BP_GET_TYPE(zio->io_bp));
4920                         }
4921                 } else {
4922                         hdr->b_l1hdr.b_byteswap = DMU_BSWAP_NUMFUNCS;
4923                 }
4924         }
4925
4926         arc_hdr_clear_flags(hdr, ARC_FLAG_L2_EVICTED);
4927         if (l2arc_noprefetch && HDR_PREFETCH(hdr))
4928                 arc_hdr_clear_flags(hdr, ARC_FLAG_L2CACHE);
4929
4930         callback_list = hdr->b_l1hdr.b_acb;
4931         ASSERT3P(callback_list, !=, NULL);
4932
4933         if (hash_lock && no_zio_error && hdr->b_l1hdr.b_state == arc_anon) {
4934                 /*
4935                  * Only call arc_access on anonymous buffers.  This is because
4936                  * if we've issued an I/O for an evicted buffer, we've already
4937                  * called arc_access (to prevent any simultaneous readers from
4938                  * getting confused).
4939                  */
4940                 arc_access(hdr, hash_lock);
4941         }
4942
4943         /*
4944          * If a read request has a callback (i.e. acb_done is not NULL), then we
4945          * make a buf containing the data according to the parameters which were
4946          * passed in. The implementation of arc_buf_alloc_impl() ensures that we
4947          * aren't needlessly decompressing the data multiple times.
4948          */
4949         for (acb = callback_list; acb != NULL; acb = acb->acb_next) {
4950                 int error;
4951                 if (!acb->acb_done)
4952                         continue;
4953
4954                 /* This is a demand read since prefetches don't use callbacks */
4955
4956                 callback_cnt++;
4957
4958                 error = arc_buf_alloc_impl(hdr, acb->acb_private,
4959                     acb->acb_compressed, no_zio_error, &acb->acb_buf);
4960                 if (no_zio_error) {
4961                         zio->io_error = error;
4962                 }
4963         }
4964         hdr->b_l1hdr.b_acb = NULL;
4965         arc_hdr_clear_flags(hdr, ARC_FLAG_IO_IN_PROGRESS);
4966         if (callback_cnt == 0) {
4967                 ASSERT(HDR_PREFETCH(hdr));
4968                 ASSERT0(hdr->b_l1hdr.b_bufcnt);
4969                 ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
4970         }
4971
4972         ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt) ||
4973             callback_list != NULL);
4974
4975         if (no_zio_error) {
4976                 arc_hdr_verify(hdr, zio->io_bp);
4977         } else {
4978                 arc_hdr_set_flags(hdr, ARC_FLAG_IO_ERROR);
4979                 if (hdr->b_l1hdr.b_state != arc_anon)
4980                         arc_change_state(arc_anon, hdr, hash_lock);
4981                 if (HDR_IN_HASH_TABLE(hdr))
4982                         buf_hash_remove(hdr);
4983                 freeable = refcount_is_zero(&hdr->b_l1hdr.b_refcnt);
4984         }
4985
4986         /*
4987          * Broadcast before we drop the hash_lock to avoid the possibility
4988          * that the hdr (and hence the cv) might be freed before we get to
4989          * the cv_broadcast().
4990          */
4991         cv_broadcast(&hdr->b_l1hdr.b_cv);
4992
4993         if (hash_lock != NULL) {
4994                 mutex_exit(hash_lock);
4995         } else {
4996                 /*
4997                  * This block was freed while we waited for the read to
4998                  * complete.  It has been removed from the hash table and
4999                  * moved to the anonymous state (so that it won't show up
5000                  * in the cache).
5001                  */
5002                 ASSERT3P(hdr->b_l1hdr.b_state, ==, arc_anon);
5003                 freeable = refcount_is_zero(&hdr->b_l1hdr.b_refcnt);
5004         }
5005
5006         /* execute each callback and free its structure */
5007         while ((acb = callback_list) != NULL) {
5008                 if (acb->acb_done)
5009                         acb->acb_done(zio, acb->acb_buf, acb->acb_private);
5010
5011                 if (acb->acb_zio_dummy != NULL) {
5012                         acb->acb_zio_dummy->io_error = zio->io_error;
5013                         zio_nowait(acb->acb_zio_dummy);
5014                 }
5015
5016                 callback_list = acb->acb_next;
5017                 kmem_free(acb, sizeof (arc_callback_t));
5018         }
5019
5020         if (freeable)
5021                 arc_hdr_destroy(hdr);
5022 }
5023
5024 /*
5025  * "Read" the block at the specified DVA (in bp) via the
5026  * cache.  If the block is found in the cache, invoke the provided
5027  * callback immediately and return.  Note that the `zio' parameter
5028  * in the callback will be NULL in this case, since no IO was
5029  * required.  If the block is not in the cache pass the read request
5030  * on to the spa with a substitute callback function, so that the
5031  * requested block will be added to the cache.
5032  *
5033  * If a read request arrives for a block that has a read in-progress,
5034  * either wait for the in-progress read to complete (and return the
5035  * results); or, if this is a read with a "done" func, add a record
5036  * to the read to invoke the "done" func when the read completes,
5037  * and return; or just return.
5038  *
5039  * arc_read_done() will invoke all the requested "done" functions
5040  * for readers of this block.
5041  */
5042 int
5043 arc_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, arc_done_func_t *done,
5044     void *private, zio_priority_t priority, int zio_flags,
5045     arc_flags_t *arc_flags, const zbookmark_phys_t *zb)
5046 {
5047         arc_buf_hdr_t *hdr = NULL;
5048         kmutex_t *hash_lock = NULL;
5049         zio_t *rzio;
5050         uint64_t guid = spa_load_guid(spa);
5051         boolean_t compressed_read = (zio_flags & ZIO_FLAG_RAW) != 0;
5052         int rc = 0;
5053
5054         ASSERT(!BP_IS_EMBEDDED(bp) ||
5055             BPE_GET_ETYPE(bp) == BP_EMBEDDED_TYPE_DATA);
5056
5057 top:
5058         if (!BP_IS_EMBEDDED(bp)) {
5059                 /*
5060                  * Embedded BP's have no DVA and require no I/O to "read".
5061                  * Create an anonymous arc buf to back it.
5062                  */
5063                 hdr = buf_hash_find(guid, bp, &hash_lock);
5064         }
5065
5066         if (hdr != NULL && HDR_HAS_L1HDR(hdr) && hdr->b_l1hdr.b_pabd != NULL) {
5067                 arc_buf_t *buf = NULL;
5068                 *arc_flags |= ARC_FLAG_CACHED;
5069
5070                 if (HDR_IO_IN_PROGRESS(hdr)) {
5071
5072                         if ((hdr->b_flags & ARC_FLAG_PRIO_ASYNC_READ) &&
5073                             priority == ZIO_PRIORITY_SYNC_READ) {
5074                                 /*
5075                                  * This sync read must wait for an
5076                                  * in-progress async read (e.g. a predictive
5077                                  * prefetch).  Async reads are queued
5078                                  * separately at the vdev_queue layer, so
5079                                  * this is a form of priority inversion.
5080                                  * Ideally, we would "inherit" the demand
5081                                  * i/o's priority by moving the i/o from
5082                                  * the async queue to the synchronous queue,
5083                                  * but there is currently no mechanism to do
5084                                  * so.  Track this so that we can evaluate
5085                                  * the magnitude of this potential performance
5086                                  * problem.
5087                                  *
5088                                  * Note that if the prefetch i/o is already
5089                                  * active (has been issued to the device),
5090                                  * the prefetch improved performance, because
5091                                  * we issued it sooner than we would have
5092                                  * without the prefetch.
5093                                  */
5094                                 DTRACE_PROBE1(arc__sync__wait__for__async,
5095                                     arc_buf_hdr_t *, hdr);
5096                                 ARCSTAT_BUMP(arcstat_sync_wait_for_async);
5097                         }
5098                         if (hdr->b_flags & ARC_FLAG_PREDICTIVE_PREFETCH) {
5099                                 arc_hdr_clear_flags(hdr,
5100                                     ARC_FLAG_PREDICTIVE_PREFETCH);
5101                         }
5102
5103                         if (*arc_flags & ARC_FLAG_WAIT) {
5104                                 cv_wait(&hdr->b_l1hdr.b_cv, hash_lock);
5105                                 mutex_exit(hash_lock);
5106                                 goto top;
5107                         }
5108                         ASSERT(*arc_flags & ARC_FLAG_NOWAIT);
5109
5110                         if (done) {
5111                                 arc_callback_t *acb = NULL;
5112
5113                                 acb = kmem_zalloc(sizeof (arc_callback_t),
5114                                     KM_SLEEP);
5115                                 acb->acb_done = done;
5116                                 acb->acb_private = private;
5117                                 if (pio != NULL)
5118                                         acb->acb_zio_dummy = zio_null(pio,
5119                                             spa, NULL, NULL, NULL, zio_flags);
5120
5121                                 ASSERT3P(acb->acb_done, !=, NULL);
5122                                 acb->acb_next = hdr->b_l1hdr.b_acb;
5123                                 hdr->b_l1hdr.b_acb = acb;
5124                                 mutex_exit(hash_lock);
5125                                 goto out;
5126                         }
5127                         mutex_exit(hash_lock);
5128                         goto out;
5129                 }
5130
5131                 ASSERT(hdr->b_l1hdr.b_state == arc_mru ||
5132                     hdr->b_l1hdr.b_state == arc_mfu);
5133
5134                 if (done) {
5135                         if (hdr->b_flags & ARC_FLAG_PREDICTIVE_PREFETCH) {
5136                                 /*
5137                                  * This is a demand read which does not have to
5138                                  * wait for i/o because we did a predictive
5139                                  * prefetch i/o for it, which has completed.
5140                                  */
5141                                 DTRACE_PROBE1(
5142                                     arc__demand__hit__predictive__prefetch,
5143                                     arc_buf_hdr_t *, hdr);
5144                                 ARCSTAT_BUMP(
5145                                     arcstat_demand_hit_predictive_prefetch);
5146                                 arc_hdr_clear_flags(hdr,
5147                                     ARC_FLAG_PREDICTIVE_PREFETCH);
5148                         }
5149                         ASSERT(!BP_IS_EMBEDDED(bp) || !BP_IS_HOLE(bp));
5150
5151                         /* Get a buf with the desired data in it. */
5152                         VERIFY0(arc_buf_alloc_impl(hdr, private,
5153                             compressed_read, B_TRUE, &buf));
5154                 } else if (*arc_flags & ARC_FLAG_PREFETCH &&
5155                     refcount_count(&hdr->b_l1hdr.b_refcnt) == 0) {
5156                         arc_hdr_set_flags(hdr, ARC_FLAG_PREFETCH);
5157                 }
5158                 DTRACE_PROBE1(arc__hit, arc_buf_hdr_t *, hdr);
5159                 arc_access(hdr, hash_lock);
5160                 if (*arc_flags & ARC_FLAG_L2CACHE)
5161                         arc_hdr_set_flags(hdr, ARC_FLAG_L2CACHE);
5162                 mutex_exit(hash_lock);
5163                 ARCSTAT_BUMP(arcstat_hits);
5164                 ARCSTAT_CONDSTAT(!HDR_PREFETCH(hdr),
5165                     demand, prefetch, !HDR_ISTYPE_METADATA(hdr),
5166                     data, metadata, hits);
5167
5168                 if (done)
5169                         done(NULL, buf, private);
5170         } else {
5171                 uint64_t lsize = BP_GET_LSIZE(bp);
5172                 uint64_t psize = BP_GET_PSIZE(bp);
5173                 arc_callback_t *acb;
5174                 vdev_t *vd = NULL;
5175                 uint64_t addr = 0;
5176                 boolean_t devw = B_FALSE;
5177                 uint64_t size;
5178
5179                 /*
5180                  * Gracefully handle a damaged logical block size as a
5181                  * checksum error.
5182                  */
5183                 if (lsize > spa_maxblocksize(spa)) {
5184                         rc = SET_ERROR(ECKSUM);
5185                         goto out;
5186                 }
5187
5188                 if (hdr == NULL) {
5189                         /* this block is not in the cache */
5190                         arc_buf_hdr_t *exists = NULL;
5191                         arc_buf_contents_t type = BP_GET_BUFC_TYPE(bp);
5192                         hdr = arc_hdr_alloc(spa_load_guid(spa), psize, lsize,
5193                             BP_GET_COMPRESS(bp), type);
5194
5195                         if (!BP_IS_EMBEDDED(bp)) {
5196                                 hdr->b_dva = *BP_IDENTITY(bp);
5197                                 hdr->b_birth = BP_PHYSICAL_BIRTH(bp);
5198                                 exists = buf_hash_insert(hdr, &hash_lock);
5199                         }
5200                         if (exists != NULL) {
5201                                 /* somebody beat us to the hash insert */
5202                                 mutex_exit(hash_lock);
5203                                 buf_discard_identity(hdr);
5204                                 arc_hdr_destroy(hdr);
5205                                 goto top; /* restart the IO request */
5206                         }
5207                 } else {
5208                         /*
5209                          * This block is in the ghost cache. If it was L2-only
5210                          * (and thus didn't have an L1 hdr), we realloc the
5211                          * header to add an L1 hdr.
5212                          */
5213                         if (!HDR_HAS_L1HDR(hdr)) {
5214                                 hdr = arc_hdr_realloc(hdr, hdr_l2only_cache,
5215                                     hdr_full_cache);
5216                         }
5217
5218                         ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
5219                         ASSERT(GHOST_STATE(hdr->b_l1hdr.b_state));
5220                         ASSERT(!HDR_IO_IN_PROGRESS(hdr));
5221                         ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
5222                         ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL);
5223                         ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL);
5224
5225                         /*
5226                          * This is a delicate dance that we play here.
5227                          * This hdr is in the ghost list so we access it
5228                          * to move it out of the ghost list before we
5229                          * initiate the read. If it's a prefetch then
5230                          * it won't have a callback so we'll remove the
5231                          * reference that arc_buf_alloc_impl() created. We
5232                          * do this after we've called arc_access() to
5233                          * avoid hitting an assert in remove_reference().
5234                          */
5235                         arc_access(hdr, hash_lock);
5236                         arc_hdr_alloc_pabd(hdr);
5237                 }
5238                 ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
5239                 size = arc_hdr_size(hdr);
5240
5241                 /*
5242                  * If compression is enabled on the hdr, then will do
5243                  * RAW I/O and will store the compressed data in the hdr's
5244                  * data block. Otherwise, the hdr's data block will contain
5245                  * the uncompressed data.
5246                  */
5247                 if (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF) {
5248                         zio_flags |= ZIO_FLAG_RAW;
5249                 }
5250
5251                 if (*arc_flags & ARC_FLAG_PREFETCH)
5252                         arc_hdr_set_flags(hdr, ARC_FLAG_PREFETCH);
5253                 if (*arc_flags & ARC_FLAG_L2CACHE)
5254                         arc_hdr_set_flags(hdr, ARC_FLAG_L2CACHE);
5255                 if (BP_GET_LEVEL(bp) > 0)
5256                         arc_hdr_set_flags(hdr, ARC_FLAG_INDIRECT);
5257                 if (*arc_flags & ARC_FLAG_PREDICTIVE_PREFETCH)
5258                         arc_hdr_set_flags(hdr, ARC_FLAG_PREDICTIVE_PREFETCH);
5259                 ASSERT(!GHOST_STATE(hdr->b_l1hdr.b_state));
5260
5261                 acb = kmem_zalloc(sizeof (arc_callback_t), KM_SLEEP);
5262                 acb->acb_done = done;
5263                 acb->acb_private = private;
5264                 acb->acb_compressed = compressed_read;
5265
5266                 ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL);
5267                 hdr->b_l1hdr.b_acb = acb;
5268                 arc_hdr_set_flags(hdr, ARC_FLAG_IO_IN_PROGRESS);
5269
5270                 if (HDR_HAS_L2HDR(hdr) &&
5271                     (vd = hdr->b_l2hdr.b_dev->l2ad_vdev) != NULL) {
5272                         devw = hdr->b_l2hdr.b_dev->l2ad_writing;
5273                         addr = hdr->b_l2hdr.b_daddr;
5274                         /*
5275                          * Lock out device removal.
5276                          */
5277                         if (vdev_is_dead(vd) ||
5278                             !spa_config_tryenter(spa, SCL_L2ARC, vd, RW_READER))
5279                                 vd = NULL;
5280                 }
5281
5282                 if (priority == ZIO_PRIORITY_ASYNC_READ)
5283                         arc_hdr_set_flags(hdr, ARC_FLAG_PRIO_ASYNC_READ);
5284                 else
5285                         arc_hdr_clear_flags(hdr, ARC_FLAG_PRIO_ASYNC_READ);
5286
5287                 if (hash_lock != NULL)
5288                         mutex_exit(hash_lock);
5289
5290                 /*
5291                  * At this point, we have a level 1 cache miss.  Try again in
5292                  * L2ARC if possible.
5293                  */
5294                 ASSERT3U(HDR_GET_LSIZE(hdr), ==, lsize);
5295
5296                 DTRACE_PROBE4(arc__miss, arc_buf_hdr_t *, hdr, blkptr_t *, bp,
5297                     uint64_t, lsize, zbookmark_phys_t *, zb);
5298                 ARCSTAT_BUMP(arcstat_misses);
5299                 ARCSTAT_CONDSTAT(!HDR_PREFETCH(hdr),
5300                     demand, prefetch, !HDR_ISTYPE_METADATA(hdr),
5301                     data, metadata, misses);
5302
5303                 if (vd != NULL && l2arc_ndev != 0 && !(l2arc_norw && devw)) {
5304                         /*
5305                          * Read from the L2ARC if the following are true:
5306                          * 1. The L2ARC vdev was previously cached.
5307                          * 2. This buffer still has L2ARC metadata.
5308                          * 3. This buffer isn't currently writing to the L2ARC.
5309                          * 4. The L2ARC entry wasn't evicted, which may
5310                          *    also have invalidated the vdev.
5311                          * 5. This isn't prefetch and l2arc_noprefetch is set.
5312                          */
5313                         if (HDR_HAS_L2HDR(hdr) &&
5314                             !HDR_L2_WRITING(hdr) && !HDR_L2_EVICTED(hdr) &&
5315                             !(l2arc_noprefetch && HDR_PREFETCH(hdr))) {
5316                                 l2arc_read_callback_t *cb;
5317
5318                                 DTRACE_PROBE1(l2arc__hit, arc_buf_hdr_t *, hdr);
5319                                 ARCSTAT_BUMP(arcstat_l2_hits);
5320                                 atomic_inc_32(&hdr->b_l2hdr.b_hits);
5321
5322                                 cb = kmem_zalloc(sizeof (l2arc_read_callback_t),
5323                                     KM_SLEEP);
5324                                 cb->l2rcb_hdr = hdr;
5325                                 cb->l2rcb_bp = *bp;
5326                                 cb->l2rcb_zb = *zb;
5327                                 cb->l2rcb_flags = zio_flags;
5328
5329                                 ASSERT(addr >= VDEV_LABEL_START_SIZE &&
5330                                     addr + lsize < vd->vdev_psize -
5331                                     VDEV_LABEL_END_SIZE);
5332
5333                                 /*
5334                                  * l2arc read.  The SCL_L2ARC lock will be
5335                                  * released by l2arc_read_done().
5336                                  * Issue a null zio if the underlying buffer
5337                                  * was squashed to zero size by compression.
5338                                  */
5339                                 ASSERT3U(HDR_GET_COMPRESS(hdr), !=,
5340                                     ZIO_COMPRESS_EMPTY);
5341                                 rzio = zio_read_phys(pio, vd, addr,
5342                                     size, hdr->b_l1hdr.b_pabd,
5343                                     ZIO_CHECKSUM_OFF,
5344                                     l2arc_read_done, cb, priority,
5345                                     zio_flags | ZIO_FLAG_DONT_CACHE |
5346                                     ZIO_FLAG_CANFAIL |
5347                                     ZIO_FLAG_DONT_PROPAGATE |
5348                                     ZIO_FLAG_DONT_RETRY, B_FALSE);
5349
5350                                 DTRACE_PROBE2(l2arc__read, vdev_t *, vd,
5351                                     zio_t *, rzio);
5352                                 ARCSTAT_INCR(arcstat_l2_read_bytes, size);
5353
5354                                 if (*arc_flags & ARC_FLAG_NOWAIT) {
5355                                         zio_nowait(rzio);
5356                                         goto out;
5357                                 }
5358
5359                                 ASSERT(*arc_flags & ARC_FLAG_WAIT);
5360                                 if (zio_wait(rzio) == 0)
5361                                         goto out;
5362
5363                                 /* l2arc read error; goto zio_read() */
5364                         } else {
5365                                 DTRACE_PROBE1(l2arc__miss,
5366                                     arc_buf_hdr_t *, hdr);
5367                                 ARCSTAT_BUMP(arcstat_l2_misses);
5368                                 if (HDR_L2_WRITING(hdr))
5369                                         ARCSTAT_BUMP(arcstat_l2_rw_clash);
5370                                 spa_config_exit(spa, SCL_L2ARC, vd);
5371                         }
5372                 } else {
5373                         if (vd != NULL)
5374                                 spa_config_exit(spa, SCL_L2ARC, vd);
5375                         if (l2arc_ndev != 0) {
5376                                 DTRACE_PROBE1(l2arc__miss,
5377                                     arc_buf_hdr_t *, hdr);
5378                                 ARCSTAT_BUMP(arcstat_l2_misses);
5379                         }
5380                 }
5381
5382                 rzio = zio_read(pio, spa, bp, hdr->b_l1hdr.b_pabd, size,
5383                     arc_read_done, hdr, priority, zio_flags, zb);
5384
5385                 if (*arc_flags & ARC_FLAG_WAIT) {
5386                         rc = zio_wait(rzio);
5387                         goto out;
5388                 }
5389
5390                 ASSERT(*arc_flags & ARC_FLAG_NOWAIT);
5391                 zio_nowait(rzio);
5392         }
5393
5394 out:
5395         spa_read_history_add(spa, zb, *arc_flags);
5396         return (rc);
5397 }
5398
5399 arc_prune_t *
5400 arc_add_prune_callback(arc_prune_func_t *func, void *private)
5401 {
5402         arc_prune_t *p;
5403
5404         p = kmem_alloc(sizeof (*p), KM_SLEEP);
5405         p->p_pfunc = func;
5406         p->p_private = private;
5407         list_link_init(&p->p_node);
5408         refcount_create(&p->p_refcnt);
5409
5410         mutex_enter(&arc_prune_mtx);
5411         refcount_add(&p->p_refcnt, &arc_prune_list);
5412         list_insert_head(&arc_prune_list, p);
5413         mutex_exit(&arc_prune_mtx);
5414
5415         return (p);
5416 }
5417
5418 void
5419 arc_remove_prune_callback(arc_prune_t *p)
5420 {
5421         boolean_t wait = B_FALSE;
5422         mutex_enter(&arc_prune_mtx);
5423         list_remove(&arc_prune_list, p);
5424         if (refcount_remove(&p->p_refcnt, &arc_prune_list) > 0)
5425                 wait = B_TRUE;
5426         mutex_exit(&arc_prune_mtx);
5427
5428         /* wait for arc_prune_task to finish */
5429         if (wait)
5430                 taskq_wait_outstanding(arc_prune_taskq, 0);
5431         ASSERT0(refcount_count(&p->p_refcnt));
5432         refcount_destroy(&p->p_refcnt);
5433         kmem_free(p, sizeof (*p));
5434 }
5435
5436 /*
5437  * Notify the arc that a block was freed, and thus will never be used again.
5438  */
5439 void
5440 arc_freed(spa_t *spa, const blkptr_t *bp)
5441 {
5442         arc_buf_hdr_t *hdr;
5443         kmutex_t *hash_lock;
5444         uint64_t guid = spa_load_guid(spa);
5445
5446         ASSERT(!BP_IS_EMBEDDED(bp));
5447
5448         hdr = buf_hash_find(guid, bp, &hash_lock);
5449         if (hdr == NULL)
5450                 return;
5451
5452         /*
5453          * We might be trying to free a block that is still doing I/O
5454          * (i.e. prefetch) or has a reference (i.e. a dedup-ed,
5455          * dmu_sync-ed block). If this block is being prefetched, then it
5456          * would still have the ARC_FLAG_IO_IN_PROGRESS flag set on the hdr
5457          * until the I/O completes. A block may also have a reference if it is
5458          * part of a dedup-ed, dmu_synced write. The dmu_sync() function would
5459          * have written the new block to its final resting place on disk but
5460          * without the dedup flag set. This would have left the hdr in the MRU
5461          * state and discoverable. When the txg finally syncs it detects that
5462          * the block was overridden in open context and issues an override I/O.
5463          * Since this is a dedup block, the override I/O will determine if the
5464          * block is already in the DDT. If so, then it will replace the io_bp
5465          * with the bp from the DDT and allow the I/O to finish. When the I/O
5466          * reaches the done callback, dbuf_write_override_done, it will
5467          * check to see if the io_bp and io_bp_override are identical.
5468          * If they are not, then it indicates that the bp was replaced with
5469          * the bp in the DDT and the override bp is freed. This allows
5470          * us to arrive here with a reference on a block that is being
5471          * freed. So if we have an I/O in progress, or a reference to
5472          * this hdr, then we don't destroy the hdr.
5473          */
5474         if (!HDR_HAS_L1HDR(hdr) || (!HDR_IO_IN_PROGRESS(hdr) &&
5475             refcount_is_zero(&hdr->b_l1hdr.b_refcnt))) {
5476                 arc_change_state(arc_anon, hdr, hash_lock);
5477                 arc_hdr_destroy(hdr);
5478                 mutex_exit(hash_lock);
5479         } else {
5480                 mutex_exit(hash_lock);
5481         }
5482
5483 }
5484
5485 /*
5486  * Release this buffer from the cache, making it an anonymous buffer.  This
5487  * must be done after a read and prior to modifying the buffer contents.
5488  * If the buffer has more than one reference, we must make
5489  * a new hdr for the buffer.
5490  */
5491 void
5492 arc_release(arc_buf_t *buf, void *tag)
5493 {
5494         kmutex_t *hash_lock;
5495         arc_state_t *state;
5496         arc_buf_hdr_t *hdr = buf->b_hdr;
5497
5498         /*
5499          * It would be nice to assert that if its DMU metadata (level >
5500          * 0 || it's the dnode file), then it must be syncing context.
5501          * But we don't know that information at this level.
5502          */
5503
5504         mutex_enter(&buf->b_evict_lock);
5505
5506         ASSERT(HDR_HAS_L1HDR(hdr));
5507
5508         /*
5509          * We don't grab the hash lock prior to this check, because if
5510          * the buffer's header is in the arc_anon state, it won't be
5511          * linked into the hash table.
5512          */
5513         if (hdr->b_l1hdr.b_state == arc_anon) {
5514                 mutex_exit(&buf->b_evict_lock);
5515                 ASSERT(!HDR_IO_IN_PROGRESS(hdr));
5516                 ASSERT(!HDR_IN_HASH_TABLE(hdr));
5517                 ASSERT(!HDR_HAS_L2HDR(hdr));
5518                 ASSERT(HDR_EMPTY(hdr));
5519
5520                 ASSERT3U(hdr->b_l1hdr.b_bufcnt, ==, 1);
5521                 ASSERT3S(refcount_count(&hdr->b_l1hdr.b_refcnt), ==, 1);
5522                 ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node));
5523
5524                 hdr->b_l1hdr.b_arc_access = 0;
5525
5526                 /*
5527                  * If the buf is being overridden then it may already
5528                  * have a hdr that is not empty.
5529                  */
5530                 buf_discard_identity(hdr);
5531                 arc_buf_thaw(buf);
5532
5533                 return;
5534         }
5535
5536         hash_lock = HDR_LOCK(hdr);
5537         mutex_enter(hash_lock);
5538
5539         /*
5540          * This assignment is only valid as long as the hash_lock is
5541          * held, we must be careful not to reference state or the
5542          * b_state field after dropping the lock.
5543          */
5544         state = hdr->b_l1hdr.b_state;
5545         ASSERT3P(hash_lock, ==, HDR_LOCK(hdr));
5546         ASSERT3P(state, !=, arc_anon);
5547
5548         /* this buffer is not on any list */
5549         ASSERT3S(refcount_count(&hdr->b_l1hdr.b_refcnt), >, 0);
5550
5551         if (HDR_HAS_L2HDR(hdr)) {
5552                 mutex_enter(&hdr->b_l2hdr.b_dev->l2ad_mtx);
5553
5554                 /*
5555                  * We have to recheck this conditional again now that
5556                  * we're holding the l2ad_mtx to prevent a race with
5557                  * another thread which might be concurrently calling
5558                  * l2arc_evict(). In that case, l2arc_evict() might have
5559                  * destroyed the header's L2 portion as we were waiting
5560                  * to acquire the l2ad_mtx.
5561                  */
5562                 if (HDR_HAS_L2HDR(hdr))
5563                         arc_hdr_l2hdr_destroy(hdr);
5564
5565                 mutex_exit(&hdr->b_l2hdr.b_dev->l2ad_mtx);
5566         }
5567
5568         /*
5569          * Do we have more than one buf?
5570          */
5571         if (hdr->b_l1hdr.b_bufcnt > 1) {
5572                 arc_buf_hdr_t *nhdr;
5573                 uint64_t spa = hdr->b_spa;
5574                 uint64_t psize = HDR_GET_PSIZE(hdr);
5575                 uint64_t lsize = HDR_GET_LSIZE(hdr);
5576                 enum zio_compress compress = HDR_GET_COMPRESS(hdr);
5577                 arc_buf_contents_t type = arc_buf_type(hdr);
5578                 arc_buf_t *lastbuf = NULL;
5579                 VERIFY3U(hdr->b_type, ==, type);
5580
5581                 ASSERT(hdr->b_l1hdr.b_buf != buf || buf->b_next != NULL);
5582                 (void) remove_reference(hdr, hash_lock, tag);
5583
5584                 if (arc_buf_is_shared(buf) && !ARC_BUF_COMPRESSED(buf)) {
5585                         ASSERT3P(hdr->b_l1hdr.b_buf, !=, buf);
5586                         ASSERT(ARC_BUF_LAST(buf));
5587                 }
5588
5589                 /*
5590                  * Pull the data off of this hdr and attach it to
5591                  * a new anonymous hdr. Also find the last buffer
5592                  * in the hdr's buffer list.
5593                  */
5594                 lastbuf = arc_buf_remove(hdr, buf);
5595                 ASSERT3P(lastbuf, !=, NULL);
5596
5597                 /*
5598                  * If the current arc_buf_t and the hdr are sharing their data
5599                  * buffer, then we must stop sharing that block.
5600                  */
5601                 if (arc_buf_is_shared(buf)) {
5602                         ASSERT3P(hdr->b_l1hdr.b_buf, !=, buf);
5603                         VERIFY(!arc_buf_is_shared(lastbuf));
5604
5605                         /*
5606                          * First, sever the block sharing relationship between
5607                          * buf and the arc_buf_hdr_t. Then, setup a new
5608                          * block sharing relationship with the last buffer
5609                          * on the arc_buf_t list.
5610                          */
5611                         arc_unshare_buf(hdr, buf);
5612
5613                         /*
5614                          * Now we need to recreate the hdr's b_pabd. Since we
5615                          * have lastbuf handy, we try to share with it, but if
5616                          * we can't then we allocate a new b_pabd and copy the
5617                          * data from buf into it.
5618                          */
5619                         if (arc_can_share(hdr, lastbuf)) {
5620                                 arc_share_buf(hdr, lastbuf);
5621                         } else {
5622                                 arc_hdr_alloc_pabd(hdr);
5623                                 abd_copy_from_buf(hdr->b_l1hdr.b_pabd,
5624                                     buf->b_data, psize);
5625                         }
5626                         VERIFY3P(lastbuf->b_data, !=, NULL);
5627                 } else if (HDR_SHARED_DATA(hdr)) {
5628                         /*
5629                          * Uncompressed shared buffers are always at the end
5630                          * of the list. Compressed buffers don't have the
5631                          * same requirements. This makes it hard to
5632                          * simply assert that the lastbuf is shared so
5633                          * we rely on the hdr's compression flags to determine
5634                          * if we have a compressed, shared buffer.
5635                          */
5636                         ASSERT(arc_buf_is_shared(lastbuf) ||
5637                             HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF);
5638                         ASSERT(!ARC_BUF_SHARED(buf));
5639                 }
5640                 ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
5641                 ASSERT3P(state, !=, arc_l2c_only);
5642
5643                 (void) refcount_remove_many(&state->arcs_size,
5644                     arc_buf_size(buf), buf);
5645
5646                 if (refcount_is_zero(&hdr->b_l1hdr.b_refcnt)) {
5647                         ASSERT3P(state, !=, arc_l2c_only);
5648                         (void) refcount_remove_many(&state->arcs_esize[type],
5649                             arc_buf_size(buf), buf);
5650                 }
5651
5652                 hdr->b_l1hdr.b_bufcnt -= 1;
5653                 arc_cksum_verify(buf);
5654                 arc_buf_unwatch(buf);
5655
5656                 mutex_exit(hash_lock);
5657
5658                 /*
5659                  * Allocate a new hdr. The new hdr will contain a b_pabd
5660                  * buffer which will be freed in arc_write().
5661                  */
5662                 nhdr = arc_hdr_alloc(spa, psize, lsize, compress, type);
5663                 ASSERT3P(nhdr->b_l1hdr.b_buf, ==, NULL);
5664                 ASSERT0(nhdr->b_l1hdr.b_bufcnt);
5665                 ASSERT0(refcount_count(&nhdr->b_l1hdr.b_refcnt));
5666                 VERIFY3U(nhdr->b_type, ==, type);
5667                 ASSERT(!HDR_SHARED_DATA(nhdr));
5668
5669                 nhdr->b_l1hdr.b_buf = buf;
5670                 nhdr->b_l1hdr.b_bufcnt = 1;
5671                 nhdr->b_l1hdr.b_mru_hits = 0;
5672                 nhdr->b_l1hdr.b_mru_ghost_hits = 0;
5673                 nhdr->b_l1hdr.b_mfu_hits = 0;
5674                 nhdr->b_l1hdr.b_mfu_ghost_hits = 0;
5675                 nhdr->b_l1hdr.b_l2_hits = 0;
5676                 (void) refcount_add(&nhdr->b_l1hdr.b_refcnt, tag);
5677                 buf->b_hdr = nhdr;
5678
5679                 mutex_exit(&buf->b_evict_lock);
5680                 (void) refcount_add_many(&arc_anon->arcs_size,
5681                     HDR_GET_LSIZE(nhdr), buf);
5682         } else {
5683                 mutex_exit(&buf->b_evict_lock);
5684                 ASSERT(refcount_count(&hdr->b_l1hdr.b_refcnt) == 1);
5685                 /* protected by hash lock, or hdr is on arc_anon */
5686                 ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node));
5687                 ASSERT(!HDR_IO_IN_PROGRESS(hdr));
5688                 hdr->b_l1hdr.b_mru_hits = 0;
5689                 hdr->b_l1hdr.b_mru_ghost_hits = 0;
5690                 hdr->b_l1hdr.b_mfu_hits = 0;
5691                 hdr->b_l1hdr.b_mfu_ghost_hits = 0;
5692                 hdr->b_l1hdr.b_l2_hits = 0;
5693                 arc_change_state(arc_anon, hdr, hash_lock);
5694                 hdr->b_l1hdr.b_arc_access = 0;
5695                 mutex_exit(hash_lock);
5696
5697                 buf_discard_identity(hdr);
5698                 arc_buf_thaw(buf);
5699         }
5700 }
5701
5702 int
5703 arc_released(arc_buf_t *buf)
5704 {
5705         int released;
5706
5707         mutex_enter(&buf->b_evict_lock);
5708         released = (buf->b_data != NULL &&
5709             buf->b_hdr->b_l1hdr.b_state == arc_anon);
5710         mutex_exit(&buf->b_evict_lock);
5711         return (released);
5712 }
5713
5714 #ifdef ZFS_DEBUG
5715 int
5716 arc_referenced(arc_buf_t *buf)
5717 {
5718         int referenced;
5719
5720         mutex_enter(&buf->b_evict_lock);
5721         referenced = (refcount_count(&buf->b_hdr->b_l1hdr.b_refcnt));
5722         mutex_exit(&buf->b_evict_lock);
5723         return (referenced);
5724 }
5725 #endif
5726
5727 static void
5728 arc_write_ready(zio_t *zio)
5729 {
5730         arc_write_callback_t *callback = zio->io_private;
5731         arc_buf_t *buf = callback->awcb_buf;
5732         arc_buf_hdr_t *hdr = buf->b_hdr;
5733         uint64_t psize = BP_IS_HOLE(zio->io_bp) ? 0 : BP_GET_PSIZE(zio->io_bp);
5734         enum zio_compress compress;
5735         fstrans_cookie_t cookie = spl_fstrans_mark();
5736
5737         ASSERT(HDR_HAS_L1HDR(hdr));
5738         ASSERT(!refcount_is_zero(&buf->b_hdr->b_l1hdr.b_refcnt));
5739         ASSERT(hdr->b_l1hdr.b_bufcnt > 0);
5740
5741         /*
5742          * If we're reexecuting this zio because the pool suspended, then
5743          * cleanup any state that was previously set the first time the
5744          * callback was invoked.
5745          */
5746         if (zio->io_flags & ZIO_FLAG_REEXECUTED) {
5747                 arc_cksum_free(hdr);
5748                 arc_buf_unwatch(buf);
5749                 if (hdr->b_l1hdr.b_pabd != NULL) {
5750                         if (arc_buf_is_shared(buf)) {
5751                                 arc_unshare_buf(hdr, buf);
5752                         } else {
5753                                 arc_hdr_free_pabd(hdr);
5754                         }
5755                 }
5756         }
5757         ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
5758         ASSERT(!HDR_SHARED_DATA(hdr));
5759         ASSERT(!arc_buf_is_shared(buf));
5760
5761         callback->awcb_ready(zio, buf, callback->awcb_private);
5762
5763         if (HDR_IO_IN_PROGRESS(hdr))
5764                 ASSERT(zio->io_flags & ZIO_FLAG_REEXECUTED);
5765
5766         arc_cksum_compute(buf);
5767         arc_hdr_set_flags(hdr, ARC_FLAG_IO_IN_PROGRESS);
5768
5769         if (BP_IS_HOLE(zio->io_bp) || BP_IS_EMBEDDED(zio->io_bp)) {
5770                 compress = ZIO_COMPRESS_OFF;
5771         } else {
5772                 ASSERT3U(HDR_GET_LSIZE(hdr), ==, BP_GET_LSIZE(zio->io_bp));
5773                 compress = BP_GET_COMPRESS(zio->io_bp);
5774         }
5775         HDR_SET_PSIZE(hdr, psize);
5776         arc_hdr_set_compress(hdr, compress);
5777
5778         /*
5779          * Fill the hdr with data. If the hdr is compressed, the data we want
5780          * is available from the zio, otherwise we can take it from the buf.
5781          *
5782          * We might be able to share the buf's data with the hdr here. However,
5783          * doing so would cause the ARC to be full of linear ABDs if we write a
5784          * lot of shareable data. As a compromise, we check whether scattered
5785          * ABDs are allowed, and assume that if they are then the user wants
5786          * the ARC to be primarily filled with them regardless of the data being
5787          * written. Therefore, if they're allowed then we allocate one and copy
5788          * the data into it; otherwise, we share the data directly if we can.
5789          */
5790         if (zfs_abd_scatter_enabled || !arc_can_share(hdr, buf)) {
5791                 arc_hdr_alloc_pabd(hdr);
5792
5793                 /*
5794                  * Ideally, we would always copy the io_abd into b_pabd, but the
5795                  * user may have disabled compressed ARC, thus we must check the
5796                  * hdr's compression setting rather than the io_bp's.
5797                  */
5798                 if (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF) {
5799                         ASSERT3U(BP_GET_COMPRESS(zio->io_bp), !=,
5800                             ZIO_COMPRESS_OFF);
5801                         ASSERT3U(psize, >, 0);
5802
5803                         abd_copy(hdr->b_l1hdr.b_pabd, zio->io_abd, psize);
5804                 } else {
5805                         ASSERT3U(zio->io_orig_size, ==, arc_hdr_size(hdr));
5806
5807                         abd_copy_from_buf(hdr->b_l1hdr.b_pabd, buf->b_data,
5808                             arc_buf_size(buf));
5809                 }
5810         } else {
5811                 ASSERT3P(buf->b_data, ==, abd_to_buf(zio->io_orig_abd));
5812                 ASSERT3U(zio->io_orig_size, ==, arc_buf_size(buf));
5813                 ASSERT3U(hdr->b_l1hdr.b_bufcnt, ==, 1);
5814
5815                 arc_share_buf(hdr, buf);
5816         }
5817
5818         arc_hdr_verify(hdr, zio->io_bp);
5819         spl_fstrans_unmark(cookie);
5820 }
5821
5822 static void
5823 arc_write_children_ready(zio_t *zio)
5824 {
5825         arc_write_callback_t *callback = zio->io_private;
5826         arc_buf_t *buf = callback->awcb_buf;
5827
5828         callback->awcb_children_ready(zio, buf, callback->awcb_private);
5829 }
5830
5831 /*
5832  * The SPA calls this callback for each physical write that happens on behalf
5833  * of a logical write.  See the comment in dbuf_write_physdone() for details.
5834  */
5835 static void
5836 arc_write_physdone(zio_t *zio)
5837 {
5838         arc_write_callback_t *cb = zio->io_private;
5839         if (cb->awcb_physdone != NULL)
5840                 cb->awcb_physdone(zio, cb->awcb_buf, cb->awcb_private);
5841 }
5842
5843 static void
5844 arc_write_done(zio_t *zio)
5845 {
5846         arc_write_callback_t *callback = zio->io_private;
5847         arc_buf_t *buf = callback->awcb_buf;
5848         arc_buf_hdr_t *hdr = buf->b_hdr;
5849
5850         ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL);
5851
5852         if (zio->io_error == 0) {
5853                 arc_hdr_verify(hdr, zio->io_bp);
5854
5855                 if (BP_IS_HOLE(zio->io_bp) || BP_IS_EMBEDDED(zio->io_bp)) {
5856                         buf_discard_identity(hdr);
5857                 } else {
5858                         hdr->b_dva = *BP_IDENTITY(zio->io_bp);
5859                         hdr->b_birth = BP_PHYSICAL_BIRTH(zio->io_bp);
5860                 }
5861         } else {
5862                 ASSERT(HDR_EMPTY(hdr));
5863         }
5864
5865         /*
5866          * If the block to be written was all-zero or compressed enough to be
5867          * embedded in the BP, no write was performed so there will be no
5868          * dva/birth/checksum.  The buffer must therefore remain anonymous
5869          * (and uncached).
5870          */
5871         if (!HDR_EMPTY(hdr)) {
5872                 arc_buf_hdr_t *exists;
5873                 kmutex_t *hash_lock;
5874
5875                 ASSERT3U(zio->io_error, ==, 0);
5876
5877                 arc_cksum_verify(buf);
5878
5879                 exists = buf_hash_insert(hdr, &hash_lock);
5880                 if (exists != NULL) {
5881                         /*
5882                          * This can only happen if we overwrite for
5883                          * sync-to-convergence, because we remove
5884                          * buffers from the hash table when we arc_free().
5885                          */
5886                         if (zio->io_flags & ZIO_FLAG_IO_REWRITE) {
5887                                 if (!BP_EQUAL(&zio->io_bp_orig, zio->io_bp))
5888                                         panic("bad overwrite, hdr=%p exists=%p",
5889                                             (void *)hdr, (void *)exists);
5890                                 ASSERT(refcount_is_zero(
5891                                     &exists->b_l1hdr.b_refcnt));
5892                                 arc_change_state(arc_anon, exists, hash_lock);
5893                                 mutex_exit(hash_lock);
5894                                 arc_hdr_destroy(exists);
5895                                 exists = buf_hash_insert(hdr, &hash_lock);
5896                                 ASSERT3P(exists, ==, NULL);
5897                         } else if (zio->io_flags & ZIO_FLAG_NOPWRITE) {
5898                                 /* nopwrite */
5899                                 ASSERT(zio->io_prop.zp_nopwrite);
5900                                 if (!BP_EQUAL(&zio->io_bp_orig, zio->io_bp))
5901                                         panic("bad nopwrite, hdr=%p exists=%p",
5902                                             (void *)hdr, (void *)exists);
5903                         } else {
5904                                 /* Dedup */
5905                                 ASSERT(hdr->b_l1hdr.b_bufcnt == 1);
5906                                 ASSERT(hdr->b_l1hdr.b_state == arc_anon);
5907                                 ASSERT(BP_GET_DEDUP(zio->io_bp));
5908                                 ASSERT(BP_GET_LEVEL(zio->io_bp) == 0);
5909                         }
5910                 }
5911                 arc_hdr_clear_flags(hdr, ARC_FLAG_IO_IN_PROGRESS);
5912                 /* if it's not anon, we are doing a scrub */
5913                 if (exists == NULL && hdr->b_l1hdr.b_state == arc_anon)
5914                         arc_access(hdr, hash_lock);
5915                 mutex_exit(hash_lock);
5916         } else {
5917                 arc_hdr_clear_flags(hdr, ARC_FLAG_IO_IN_PROGRESS);
5918         }
5919
5920         ASSERT(!refcount_is_zero(&hdr->b_l1hdr.b_refcnt));
5921         callback->awcb_done(zio, buf, callback->awcb_private);
5922
5923         abd_put(zio->io_abd);
5924         kmem_free(callback, sizeof (arc_write_callback_t));
5925 }
5926
5927 zio_t *
5928 arc_write(zio_t *pio, spa_t *spa, uint64_t txg,
5929     blkptr_t *bp, arc_buf_t *buf, boolean_t l2arc,
5930     const zio_prop_t *zp, arc_done_func_t *ready,
5931     arc_done_func_t *children_ready, arc_done_func_t *physdone,
5932     arc_done_func_t *done, void *private, zio_priority_t priority,
5933     int zio_flags, const zbookmark_phys_t *zb)
5934 {
5935         arc_buf_hdr_t *hdr = buf->b_hdr;
5936         arc_write_callback_t *callback;
5937         zio_t *zio;
5938
5939         ASSERT3P(ready, !=, NULL);
5940         ASSERT3P(done, !=, NULL);
5941         ASSERT(!HDR_IO_ERROR(hdr));
5942         ASSERT(!HDR_IO_IN_PROGRESS(hdr));
5943         ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL);
5944         ASSERT3U(hdr->b_l1hdr.b_bufcnt, >, 0);
5945         if (l2arc)
5946                 arc_hdr_set_flags(hdr, ARC_FLAG_L2CACHE);
5947         if (ARC_BUF_COMPRESSED(buf)) {
5948                 ASSERT3U(zp->zp_compress, !=, ZIO_COMPRESS_OFF);
5949                 zio_flags |= ZIO_FLAG_RAW;
5950         }
5951         callback = kmem_zalloc(sizeof (arc_write_callback_t), KM_SLEEP);
5952         callback->awcb_ready = ready;
5953         callback->awcb_children_ready = children_ready;
5954         callback->awcb_physdone = physdone;
5955         callback->awcb_done = done;
5956         callback->awcb_private = private;
5957         callback->awcb_buf = buf;
5958
5959         /*
5960          * The hdr's b_pabd is now stale, free it now. A new data block
5961          * will be allocated when the zio pipeline calls arc_write_ready().
5962          */
5963         if (hdr->b_l1hdr.b_pabd != NULL) {
5964                 /*
5965                  * If the buf is currently sharing the data block with
5966                  * the hdr then we need to break that relationship here.
5967                  * The hdr will remain with a NULL data pointer and the
5968                  * buf will take sole ownership of the block.
5969                  */
5970                 if (arc_buf_is_shared(buf)) {
5971                         arc_unshare_buf(hdr, buf);
5972                 } else {
5973                         arc_hdr_free_pabd(hdr);
5974                 }
5975                 VERIFY3P(buf->b_data, !=, NULL);
5976                 arc_hdr_set_compress(hdr, ZIO_COMPRESS_OFF);
5977         }
5978         ASSERT(!arc_buf_is_shared(buf));
5979         ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL);
5980
5981         zio = zio_write(pio, spa, txg, bp,
5982             abd_get_from_buf(buf->b_data, HDR_GET_LSIZE(hdr)),
5983             HDR_GET_LSIZE(hdr), arc_buf_size(buf), zp,
5984             arc_write_ready,
5985             (children_ready != NULL) ? arc_write_children_ready : NULL,
5986             arc_write_physdone, arc_write_done, callback,
5987             priority, zio_flags, zb);
5988
5989         return (zio);
5990 }
5991
5992 static int
5993 arc_memory_throttle(uint64_t reserve, uint64_t txg)
5994 {
5995 #ifdef _KERNEL
5996         uint64_t available_memory = ptob(freemem);
5997         static uint64_t page_load = 0;
5998         static uint64_t last_txg = 0;
5999 #ifdef __linux__
6000         pgcnt_t minfree = btop(arc_sys_free / 4);
6001 #endif
6002
6003 #if defined(__i386)
6004         available_memory =
6005             MIN(available_memory, vmem_size(heap_arena, VMEM_FREE));
6006 #endif
6007
6008         if (available_memory > arc_all_memory() * arc_lotsfree_percent / 100)
6009                 return (0);
6010
6011         if (txg > last_txg) {
6012                 last_txg = txg;
6013                 page_load = 0;
6014         }
6015         /*
6016          * If we are in pageout, we know that memory is already tight,
6017          * the arc is already going to be evicting, so we just want to
6018          * continue to let page writes occur as quickly as possible.
6019          */
6020         if (current_is_kswapd()) {
6021                 if (page_load > MAX(ptob(minfree), available_memory) / 4) {
6022                         DMU_TX_STAT_BUMP(dmu_tx_memory_reclaim);
6023                         return (SET_ERROR(ERESTART));
6024                 }
6025                 /* Note: reserve is inflated, so we deflate */
6026                 page_load += reserve / 8;
6027                 return (0);
6028         } else if (page_load > 0 && arc_reclaim_needed()) {
6029                 /* memory is low, delay before restarting */
6030                 ARCSTAT_INCR(arcstat_memory_throttle_count, 1);
6031                 DMU_TX_STAT_BUMP(dmu_tx_memory_reclaim);
6032                 return (SET_ERROR(EAGAIN));
6033         }
6034         page_load = 0;
6035 #endif
6036         return (0);
6037 }
6038
6039 void
6040 arc_tempreserve_clear(uint64_t reserve)
6041 {
6042         atomic_add_64(&arc_tempreserve, -reserve);
6043         ASSERT((int64_t)arc_tempreserve >= 0);
6044 }
6045
6046 int
6047 arc_tempreserve_space(uint64_t reserve, uint64_t txg)
6048 {
6049         int error;
6050         uint64_t anon_size;
6051
6052         if (!arc_no_grow &&
6053             reserve > arc_c/4 &&
6054             reserve * 4 > (2ULL << SPA_MAXBLOCKSHIFT))
6055                 arc_c = MIN(arc_c_max, reserve * 4);
6056
6057         /*
6058          * Throttle when the calculated memory footprint for the TXG
6059          * exceeds the target ARC size.
6060          */
6061         if (reserve > arc_c) {
6062                 DMU_TX_STAT_BUMP(dmu_tx_memory_reserve);
6063                 return (SET_ERROR(ERESTART));
6064         }
6065
6066         /*
6067          * Don't count loaned bufs as in flight dirty data to prevent long
6068          * network delays from blocking transactions that are ready to be
6069          * assigned to a txg.
6070          */
6071         anon_size = MAX((int64_t)(refcount_count(&arc_anon->arcs_size) -
6072             arc_loaned_bytes), 0);
6073
6074         /*
6075          * Writes will, almost always, require additional memory allocations
6076          * in order to compress/encrypt/etc the data.  We therefore need to
6077          * make sure that there is sufficient available memory for this.
6078          */
6079         error = arc_memory_throttle(reserve, txg);
6080         if (error != 0)
6081                 return (error);
6082
6083         /*
6084          * Throttle writes when the amount of dirty data in the cache
6085          * gets too large.  We try to keep the cache less than half full
6086          * of dirty blocks so that our sync times don't grow too large.
6087          * Note: if two requests come in concurrently, we might let them
6088          * both succeed, when one of them should fail.  Not a huge deal.
6089          */
6090
6091         if (reserve + arc_tempreserve + anon_size > arc_c / 2 &&
6092             anon_size > arc_c / 4) {
6093                 uint64_t meta_esize =
6094                     refcount_count(&arc_anon->arcs_esize[ARC_BUFC_METADATA]);
6095                 uint64_t data_esize =
6096                     refcount_count(&arc_anon->arcs_esize[ARC_BUFC_DATA]);
6097                 dprintf("failing, arc_tempreserve=%lluK anon_meta=%lluK "
6098                     "anon_data=%lluK tempreserve=%lluK arc_c=%lluK\n",
6099                     arc_tempreserve >> 10, meta_esize >> 10,
6100                     data_esize >> 10, reserve >> 10, arc_c >> 10);
6101                 DMU_TX_STAT_BUMP(dmu_tx_dirty_throttle);
6102                 return (SET_ERROR(ERESTART));
6103         }
6104         atomic_add_64(&arc_tempreserve, reserve);
6105         return (0);
6106 }
6107
6108 static void
6109 arc_kstat_update_state(arc_state_t *state, kstat_named_t *size,
6110     kstat_named_t *evict_data, kstat_named_t *evict_metadata)
6111 {
6112         size->value.ui64 = refcount_count(&state->arcs_size);
6113         evict_data->value.ui64 =
6114             refcount_count(&state->arcs_esize[ARC_BUFC_DATA]);
6115         evict_metadata->value.ui64 =
6116             refcount_count(&state->arcs_esize[ARC_BUFC_METADATA]);
6117 }
6118
6119 static int
6120 arc_kstat_update(kstat_t *ksp, int rw)
6121 {
6122         arc_stats_t *as = ksp->ks_data;
6123
6124         if (rw == KSTAT_WRITE) {
6125                 return (EACCES);
6126         } else {
6127                 arc_kstat_update_state(arc_anon,
6128                     &as->arcstat_anon_size,
6129                     &as->arcstat_anon_evictable_data,
6130                     &as->arcstat_anon_evictable_metadata);
6131                 arc_kstat_update_state(arc_mru,
6132                     &as->arcstat_mru_size,
6133                     &as->arcstat_mru_evictable_data,
6134                     &as->arcstat_mru_evictable_metadata);
6135                 arc_kstat_update_state(arc_mru_ghost,
6136                     &as->arcstat_mru_ghost_size,
6137                     &as->arcstat_mru_ghost_evictable_data,
6138                     &as->arcstat_mru_ghost_evictable_metadata);
6139                 arc_kstat_update_state(arc_mfu,
6140                     &as->arcstat_mfu_size,
6141                     &as->arcstat_mfu_evictable_data,
6142                     &as->arcstat_mfu_evictable_metadata);
6143                 arc_kstat_update_state(arc_mfu_ghost,
6144                     &as->arcstat_mfu_ghost_size,
6145                     &as->arcstat_mfu_ghost_evictable_data,
6146                     &as->arcstat_mfu_ghost_evictable_metadata);
6147         }
6148
6149         return (0);
6150 }
6151
6152 /*
6153  * This function *must* return indices evenly distributed between all
6154  * sublists of the multilist. This is needed due to how the ARC eviction
6155  * code is laid out; arc_evict_state() assumes ARC buffers are evenly
6156  * distributed between all sublists and uses this assumption when
6157  * deciding which sublist to evict from and how much to evict from it.
6158  */
6159 unsigned int
6160 arc_state_multilist_index_func(multilist_t *ml, void *obj)
6161 {
6162         arc_buf_hdr_t *hdr = obj;
6163
6164         /*
6165          * We rely on b_dva to generate evenly distributed index
6166          * numbers using buf_hash below. So, as an added precaution,
6167          * let's make sure we never add empty buffers to the arc lists.
6168          */
6169         ASSERT(!HDR_EMPTY(hdr));
6170
6171         /*
6172          * The assumption here, is the hash value for a given
6173          * arc_buf_hdr_t will remain constant throughout its lifetime
6174          * (i.e. its b_spa, b_dva, and b_birth fields don't change).
6175          * Thus, we don't need to store the header's sublist index
6176          * on insertion, as this index can be recalculated on removal.
6177          *
6178          * Also, the low order bits of the hash value are thought to be
6179          * distributed evenly. Otherwise, in the case that the multilist
6180          * has a power of two number of sublists, each sublists' usage
6181          * would not be evenly distributed.
6182          */
6183         return (buf_hash(hdr->b_spa, &hdr->b_dva, hdr->b_birth) %
6184             multilist_get_num_sublists(ml));
6185 }
6186
6187 /*
6188  * Called during module initialization and periodically thereafter to
6189  * apply reasonable changes to the exposed performance tunings.  Non-zero
6190  * zfs_* values which differ from the currently set values will be applied.
6191  */
6192 static void
6193 arc_tuning_update(void)
6194 {
6195         uint64_t percent, allmem = arc_all_memory();
6196
6197         /* Valid range: 64M - <all physical memory> */
6198         if ((zfs_arc_max) && (zfs_arc_max != arc_c_max) &&
6199             (zfs_arc_max > 64 << 20) && (zfs_arc_max < allmem) &&
6200             (zfs_arc_max > arc_c_min)) {
6201                 arc_c_max = zfs_arc_max;
6202                 arc_c = arc_c_max;
6203                 arc_p = (arc_c >> 1);
6204                 /* Valid range of arc_meta_limit: arc_meta_min - arc_c_max */
6205                 percent = MIN(zfs_arc_meta_limit_percent, 100);
6206                 arc_meta_limit = MAX(arc_meta_min, (percent * arc_c_max) / 100);
6207                 percent = MIN(zfs_arc_dnode_limit_percent, 100);
6208                 arc_dnode_limit = (percent * arc_meta_limit) / 100;
6209         }
6210
6211         /* Valid range: 32M - <arc_c_max> */
6212         if ((zfs_arc_min) && (zfs_arc_min != arc_c_min) &&
6213             (zfs_arc_min >= 2ULL << SPA_MAXBLOCKSHIFT) &&
6214             (zfs_arc_min <= arc_c_max)) {
6215                 arc_c_min = zfs_arc_min;
6216                 arc_c = MAX(arc_c, arc_c_min);
6217         }
6218
6219         /* Valid range: 16M - <arc_c_max> */
6220         if ((zfs_arc_meta_min) && (zfs_arc_meta_min != arc_meta_min) &&
6221             (zfs_arc_meta_min >= 1ULL << SPA_MAXBLOCKSHIFT) &&
6222             (zfs_arc_meta_min <= arc_c_max)) {
6223                 arc_meta_min = zfs_arc_meta_min;
6224                 arc_meta_limit = MAX(arc_meta_limit, arc_meta_min);
6225                 arc_dnode_limit = arc_meta_limit / 10;
6226         }
6227
6228         /* Valid range: <arc_meta_min> - <arc_c_max> */
6229         if ((zfs_arc_meta_limit) && (zfs_arc_meta_limit != arc_meta_limit) &&
6230             (zfs_arc_meta_limit >= zfs_arc_meta_min) &&
6231             (zfs_arc_meta_limit <= arc_c_max))
6232                 arc_meta_limit = zfs_arc_meta_limit;
6233
6234         /* Valid range: <arc_meta_min> - <arc_c_max> */
6235         if ((zfs_arc_dnode_limit) && (zfs_arc_dnode_limit != arc_dnode_limit) &&
6236             (zfs_arc_dnode_limit >= zfs_arc_meta_min) &&
6237             (zfs_arc_dnode_limit <= arc_c_max))
6238                 arc_dnode_limit = zfs_arc_dnode_limit;
6239
6240         /* Valid range: 1 - N */
6241         if (zfs_arc_grow_retry)
6242                 arc_grow_retry = zfs_arc_grow_retry;
6243
6244         /* Valid range: 1 - N */
6245         if (zfs_arc_shrink_shift) {
6246                 arc_shrink_shift = zfs_arc_shrink_shift;
6247                 arc_no_grow_shift = MIN(arc_no_grow_shift, arc_shrink_shift -1);
6248         }
6249
6250         /* Valid range: 1 - N */
6251         if (zfs_arc_p_min_shift)
6252                 arc_p_min_shift = zfs_arc_p_min_shift;
6253
6254         /* Valid range: 1 - N ticks */
6255         if (zfs_arc_min_prefetch_lifespan)
6256                 arc_min_prefetch_lifespan = zfs_arc_min_prefetch_lifespan;
6257
6258         /* Valid range: 0 - 100 */
6259         if ((zfs_arc_lotsfree_percent >= 0) &&
6260             (zfs_arc_lotsfree_percent <= 100))
6261                 arc_lotsfree_percent = zfs_arc_lotsfree_percent;
6262
6263         /* Valid range: 0 - <all physical memory> */
6264         if ((zfs_arc_sys_free) && (zfs_arc_sys_free != arc_sys_free))
6265                 arc_sys_free = MIN(MAX(zfs_arc_sys_free, 0), allmem);
6266
6267 }
6268
6269 static void
6270 arc_state_init(void)
6271 {
6272         arc_anon = &ARC_anon;
6273         arc_mru = &ARC_mru;
6274         arc_mru_ghost = &ARC_mru_ghost;
6275         arc_mfu = &ARC_mfu;
6276         arc_mfu_ghost = &ARC_mfu_ghost;
6277         arc_l2c_only = &ARC_l2c_only;
6278
6279         multilist_create(&arc_mru->arcs_list[ARC_BUFC_METADATA],
6280             sizeof (arc_buf_hdr_t),
6281             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6282             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6283         multilist_create(&arc_mru->arcs_list[ARC_BUFC_DATA],
6284             sizeof (arc_buf_hdr_t),
6285             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6286             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6287         multilist_create(&arc_mru_ghost->arcs_list[ARC_BUFC_METADATA],
6288             sizeof (arc_buf_hdr_t),
6289             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6290             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6291         multilist_create(&arc_mru_ghost->arcs_list[ARC_BUFC_DATA],
6292             sizeof (arc_buf_hdr_t),
6293             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6294             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6295         multilist_create(&arc_mfu->arcs_list[ARC_BUFC_METADATA],
6296             sizeof (arc_buf_hdr_t),
6297             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6298             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6299         multilist_create(&arc_mfu->arcs_list[ARC_BUFC_DATA],
6300             sizeof (arc_buf_hdr_t),
6301             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6302             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6303         multilist_create(&arc_mfu_ghost->arcs_list[ARC_BUFC_METADATA],
6304             sizeof (arc_buf_hdr_t),
6305             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6306             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6307         multilist_create(&arc_mfu_ghost->arcs_list[ARC_BUFC_DATA],
6308             sizeof (arc_buf_hdr_t),
6309             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6310             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6311         multilist_create(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA],
6312             sizeof (arc_buf_hdr_t),
6313             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6314             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6315         multilist_create(&arc_l2c_only->arcs_list[ARC_BUFC_DATA],
6316             sizeof (arc_buf_hdr_t),
6317             offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
6318             zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
6319
6320         refcount_create(&arc_anon->arcs_esize[ARC_BUFC_METADATA]);
6321         refcount_create(&arc_anon->arcs_esize[ARC_BUFC_DATA]);
6322         refcount_create(&arc_mru->arcs_esize[ARC_BUFC_METADATA]);
6323         refcount_create(&arc_mru->arcs_esize[ARC_BUFC_DATA]);
6324         refcount_create(&arc_mru_ghost->arcs_esize[ARC_BUFC_METADATA]);
6325         refcount_create(&arc_mru_ghost->arcs_esize[ARC_BUFC_DATA]);
6326         refcount_create(&arc_mfu->arcs_esize[ARC_BUFC_METADATA]);
6327         refcount_create(&arc_mfu->arcs_esize[ARC_BUFC_DATA]);
6328         refcount_create(&arc_mfu_ghost->arcs_esize[ARC_BUFC_METADATA]);
6329         refcount_create(&arc_mfu_ghost->arcs_esize[ARC_BUFC_DATA]);
6330         refcount_create(&arc_l2c_only->arcs_esize[ARC_BUFC_METADATA]);
6331         refcount_create(&arc_l2c_only->arcs_esize[ARC_BUFC_DATA]);
6332
6333         refcount_create(&arc_anon->arcs_size);
6334         refcount_create(&arc_mru->arcs_size);
6335         refcount_create(&arc_mru_ghost->arcs_size);
6336         refcount_create(&arc_mfu->arcs_size);
6337         refcount_create(&arc_mfu_ghost->arcs_size);
6338         refcount_create(&arc_l2c_only->arcs_size);
6339
6340         arc_anon->arcs_state = ARC_STATE_ANON;
6341         arc_mru->arcs_state = ARC_STATE_MRU;
6342         arc_mru_ghost->arcs_state = ARC_STATE_MRU_GHOST;
6343         arc_mfu->arcs_state = ARC_STATE_MFU;
6344         arc_mfu_ghost->arcs_state = ARC_STATE_MFU_GHOST;
6345         arc_l2c_only->arcs_state = ARC_STATE_L2C_ONLY;
6346 }
6347
6348 static void
6349 arc_state_fini(void)
6350 {
6351         refcount_destroy(&arc_anon->arcs_esize[ARC_BUFC_METADATA]);
6352         refcount_destroy(&arc_anon->arcs_esize[ARC_BUFC_DATA]);
6353         refcount_destroy(&arc_mru->arcs_esize[ARC_BUFC_METADATA]);
6354         refcount_destroy(&arc_mru->arcs_esize[ARC_BUFC_DATA]);
6355         refcount_destroy(&arc_mru_ghost->arcs_esize[ARC_BUFC_METADATA]);
6356         refcount_destroy(&arc_mru_ghost->arcs_esize[ARC_BUFC_DATA]);
6357         refcount_destroy(&arc_mfu->arcs_esize[ARC_BUFC_METADATA]);
6358         refcount_destroy(&arc_mfu->arcs_esize[ARC_BUFC_DATA]);
6359         refcount_destroy(&arc_mfu_ghost->arcs_esize[ARC_BUFC_METADATA]);
6360         refcount_destroy(&arc_mfu_ghost->arcs_esize[ARC_BUFC_DATA]);
6361         refcount_destroy(&arc_l2c_only->arcs_esize[ARC_BUFC_METADATA]);
6362         refcount_destroy(&arc_l2c_only->arcs_esize[ARC_BUFC_DATA]);
6363
6364         refcount_destroy(&arc_anon->arcs_size);
6365         refcount_destroy(&arc_mru->arcs_size);
6366         refcount_destroy(&arc_mru_ghost->arcs_size);
6367         refcount_destroy(&arc_mfu->arcs_size);
6368         refcount_destroy(&arc_mfu_ghost->arcs_size);
6369         refcount_destroy(&arc_l2c_only->arcs_size);
6370
6371         multilist_destroy(&arc_mru->arcs_list[ARC_BUFC_METADATA]);
6372         multilist_destroy(&arc_mru_ghost->arcs_list[ARC_BUFC_METADATA]);
6373         multilist_destroy(&arc_mfu->arcs_list[ARC_BUFC_METADATA]);
6374         multilist_destroy(&arc_mfu_ghost->arcs_list[ARC_BUFC_METADATA]);
6375         multilist_destroy(&arc_mru->arcs_list[ARC_BUFC_DATA]);
6376         multilist_destroy(&arc_mru_ghost->arcs_list[ARC_BUFC_DATA]);
6377         multilist_destroy(&arc_mfu->arcs_list[ARC_BUFC_DATA]);
6378         multilist_destroy(&arc_mfu_ghost->arcs_list[ARC_BUFC_DATA]);
6379         multilist_destroy(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA]);
6380         multilist_destroy(&arc_l2c_only->arcs_list[ARC_BUFC_DATA]);
6381 }
6382
6383 uint64_t
6384 arc_max_bytes(void)
6385 {
6386         return (arc_c_max);
6387 }
6388
6389 void
6390 arc_init(void)
6391 {
6392         uint64_t percent, allmem = arc_all_memory();
6393
6394         mutex_init(&arc_reclaim_lock, NULL, MUTEX_DEFAULT, NULL);
6395         cv_init(&arc_reclaim_thread_cv, NULL, CV_DEFAULT, NULL);
6396         cv_init(&arc_reclaim_waiters_cv, NULL, CV_DEFAULT, NULL);
6397
6398         /* Convert seconds to clock ticks */
6399         arc_min_prefetch_lifespan = 1 * hz;
6400
6401 #ifdef _KERNEL
6402         /*
6403          * Register a shrinker to support synchronous (direct) memory
6404          * reclaim from the arc.  This is done to prevent kswapd from
6405          * swapping out pages when it is preferable to shrink the arc.
6406          */
6407         spl_register_shrinker(&arc_shrinker);
6408
6409         /* Set to 1/64 of all memory or a minimum of 512K */
6410         arc_sys_free = MAX(allmem / 64, (512 * 1024));
6411         arc_need_free = 0;
6412 #endif
6413
6414         /* Set max to 1/2 of all memory */
6415         arc_c_max = allmem / 2;
6416
6417         /*
6418          * In userland, there's only the memory pressure that we artificially
6419          * create (see arc_available_memory()).  Don't let arc_c get too
6420          * small, because it can cause transactions to be larger than
6421          * arc_c, causing arc_tempreserve_space() to fail.
6422          */
6423 #ifndef _KERNEL
6424         arc_c_min = MAX(arc_c_max / 2, 2ULL << SPA_MAXBLOCKSHIFT);
6425 #else
6426         arc_c_min = 2ULL << SPA_MAXBLOCKSHIFT;
6427 #endif
6428
6429         arc_c = arc_c_max;
6430         arc_p = (arc_c >> 1);
6431         arc_size = 0;
6432
6433         /* Set min to 1/2 of arc_c_min */
6434         arc_meta_min = 1ULL << SPA_MAXBLOCKSHIFT;
6435         /* Initialize maximum observed usage to zero */
6436         arc_meta_max = 0;
6437         /*
6438          * Set arc_meta_limit to a percent of arc_c_max with a floor of
6439          * arc_meta_min, and a ceiling of arc_c_max.
6440          */
6441         percent = MIN(zfs_arc_meta_limit_percent, 100);
6442         arc_meta_limit = MAX(arc_meta_min, (percent * arc_c_max) / 100);
6443         percent = MIN(zfs_arc_dnode_limit_percent, 100);
6444         arc_dnode_limit = (percent * arc_meta_limit) / 100;
6445
6446         /* Apply user specified tunings */
6447         arc_tuning_update();
6448
6449         if (zfs_arc_num_sublists_per_state < 1)
6450                 zfs_arc_num_sublists_per_state = MAX(boot_ncpus, 1);
6451
6452         /* if kmem_flags are set, lets try to use less memory */
6453         if (kmem_debugging())
6454                 arc_c = arc_c / 2;
6455         if (arc_c < arc_c_min)
6456                 arc_c = arc_c_min;
6457
6458         arc_state_init();
6459         buf_init();
6460
6461         list_create(&arc_prune_list, sizeof (arc_prune_t),
6462             offsetof(arc_prune_t, p_node));
6463         mutex_init(&arc_prune_mtx, NULL, MUTEX_DEFAULT, NULL);
6464
6465         arc_prune_taskq = taskq_create("arc_prune", max_ncpus, defclsyspri,
6466             max_ncpus, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
6467
6468         arc_reclaim_thread_exit = B_FALSE;
6469
6470         arc_ksp = kstat_create("zfs", 0, "arcstats", "misc", KSTAT_TYPE_NAMED,
6471             sizeof (arc_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL);
6472
6473         if (arc_ksp != NULL) {
6474                 arc_ksp->ks_data = &arc_stats;
6475                 arc_ksp->ks_update = arc_kstat_update;
6476                 kstat_install(arc_ksp);
6477         }
6478
6479         (void) thread_create(NULL, 0, arc_reclaim_thread, NULL, 0, &p0,
6480             TS_RUN, defclsyspri);
6481
6482         arc_dead = B_FALSE;
6483         arc_warm = B_FALSE;
6484
6485         /*
6486          * Calculate maximum amount of dirty data per pool.
6487          *
6488          * If it has been set by a module parameter, take that.
6489          * Otherwise, use a percentage of physical memory defined by
6490          * zfs_dirty_data_max_percent (default 10%) with a cap at
6491          * zfs_dirty_data_max_max (default 25% of physical memory).
6492          */
6493         if (zfs_dirty_data_max_max == 0)
6494                 zfs_dirty_data_max_max = allmem *
6495                     zfs_dirty_data_max_max_percent / 100;
6496
6497         if (zfs_dirty_data_max == 0) {
6498                 zfs_dirty_data_max = allmem *
6499                     zfs_dirty_data_max_percent / 100;
6500                 zfs_dirty_data_max = MIN(zfs_dirty_data_max,
6501                     zfs_dirty_data_max_max);
6502         }
6503 }
6504
6505 void
6506 arc_fini(void)
6507 {
6508         arc_prune_t *p;
6509
6510 #ifdef _KERNEL
6511         spl_unregister_shrinker(&arc_shrinker);
6512 #endif /* _KERNEL */
6513
6514         mutex_enter(&arc_reclaim_lock);
6515         arc_reclaim_thread_exit = B_TRUE;
6516         /*
6517          * The reclaim thread will set arc_reclaim_thread_exit back to
6518          * B_FALSE when it is finished exiting; we're waiting for that.
6519          */
6520         while (arc_reclaim_thread_exit) {
6521                 cv_signal(&arc_reclaim_thread_cv);
6522                 cv_wait(&arc_reclaim_thread_cv, &arc_reclaim_lock);
6523         }
6524         mutex_exit(&arc_reclaim_lock);
6525
6526         /* Use B_TRUE to ensure *all* buffers are evicted */
6527         arc_flush(NULL, B_TRUE);
6528
6529         arc_dead = B_TRUE;
6530
6531         if (arc_ksp != NULL) {
6532                 kstat_delete(arc_ksp);
6533                 arc_ksp = NULL;
6534         }
6535
6536         taskq_wait(arc_prune_taskq);
6537         taskq_destroy(arc_prune_taskq);
6538
6539         mutex_enter(&arc_prune_mtx);
6540         while ((p = list_head(&arc_prune_list)) != NULL) {
6541                 list_remove(&arc_prune_list, p);
6542                 refcount_remove(&p->p_refcnt, &arc_prune_list);
6543                 refcount_destroy(&p->p_refcnt);
6544                 kmem_free(p, sizeof (*p));
6545         }
6546         mutex_exit(&arc_prune_mtx);
6547
6548         list_destroy(&arc_prune_list);
6549         mutex_destroy(&arc_prune_mtx);
6550         mutex_destroy(&arc_reclaim_lock);
6551         cv_destroy(&arc_reclaim_thread_cv);
6552         cv_destroy(&arc_reclaim_waiters_cv);
6553
6554         arc_state_fini();
6555         buf_fini();
6556
6557         ASSERT0(arc_loaned_bytes);
6558 }
6559
6560 /*
6561  * Level 2 ARC
6562  *
6563  * The level 2 ARC (L2ARC) is a cache layer in-between main memory and disk.
6564  * It uses dedicated storage devices to hold cached data, which are populated
6565  * using large infrequent writes.  The main role of this cache is to boost
6566  * the performance of random read workloads.  The intended L2ARC devices
6567  * include short-stroked disks, solid state disks, and other media with
6568  * substantially faster read latency than disk.
6569  *
6570  *                 +-----------------------+
6571  *                 |         ARC           |
6572  *                 +-----------------------+
6573  *                    |         ^     ^
6574  *                    |         |     |
6575  *      l2arc_feed_thread()    arc_read()
6576  *                    |         |     |
6577  *                    |  l2arc read   |
6578  *                    V         |     |
6579  *               +---------------+    |
6580  *               |     L2ARC     |    |
6581  *               +---------------+    |
6582  *                   |    ^           |
6583  *          l2arc_write() |           |
6584  *                   |    |           |
6585  *                   V    |           |
6586  *                 +-------+      +-------+
6587  *                 | vdev  |      | vdev  |
6588  *                 | cache |      | cache |
6589  *                 +-------+      +-------+
6590  *                 +=========+     .-----.
6591  *                 :  L2ARC  :    |-_____-|
6592  *                 : devices :    | Disks |
6593  *                 +=========+    `-_____-'
6594  *
6595  * Read requests are satisfied from the following sources, in order:
6596  *
6597  *      1) ARC
6598  *      2) vdev cache of L2ARC devices
6599  *      3) L2ARC devices
6600  *      4) vdev cache of disks
6601  *      5) disks
6602  *
6603  * Some L2ARC device types exhibit extremely slow write performance.
6604  * To accommodate for this there are some significant differences between
6605  * the L2ARC and traditional cache design:
6606  *
6607  * 1. There is no eviction path from the ARC to the L2ARC.  Evictions from
6608  * the ARC behave as usual, freeing buffers and placing headers on ghost
6609  * lists.  The ARC does not send buffers to the L2ARC during eviction as
6610  * this would add inflated write latencies for all ARC memory pressure.
6611  *
6612  * 2. The L2ARC attempts to cache data from the ARC before it is evicted.
6613  * It does this by periodically scanning buffers from the eviction-end of
6614  * the MFU and MRU ARC lists, copying them to the L2ARC devices if they are
6615  * not already there. It scans until a headroom of buffers is satisfied,
6616  * which itself is a buffer for ARC eviction. If a compressible buffer is
6617  * found during scanning and selected for writing to an L2ARC device, we
6618  * temporarily boost scanning headroom during the next scan cycle to make
6619  * sure we adapt to compression effects (which might significantly reduce
6620  * the data volume we write to L2ARC). The thread that does this is
6621  * l2arc_feed_thread(), illustrated below; example sizes are included to
6622  * provide a better sense of ratio than this diagram:
6623  *
6624  *             head -->                        tail
6625  *              +---------------------+----------+
6626  *      ARC_mfu |:::::#:::::::::::::::|o#o###o###|-->.   # already on L2ARC
6627  *              +---------------------+----------+   |   o L2ARC eligible
6628  *      ARC_mru |:#:::::::::::::::::::|#o#ooo####|-->|   : ARC buffer
6629  *              +---------------------+----------+   |
6630  *                   15.9 Gbytes      ^ 32 Mbytes    |
6631  *                                 headroom          |
6632  *                                            l2arc_feed_thread()
6633  *                                                   |
6634  *                       l2arc write hand <--[oooo]--'
6635  *                               |           8 Mbyte
6636  *                               |          write max
6637  *                               V
6638  *                +==============================+
6639  *      L2ARC dev |####|#|###|###|    |####| ... |
6640  *                +==============================+
6641  *                           32 Gbytes
6642  *
6643  * 3. If an ARC buffer is copied to the L2ARC but then hit instead of
6644  * evicted, then the L2ARC has cached a buffer much sooner than it probably
6645  * needed to, potentially wasting L2ARC device bandwidth and storage.  It is
6646  * safe to say that this is an uncommon case, since buffers at the end of
6647  * the ARC lists have moved there due to inactivity.
6648  *
6649  * 4. If the ARC evicts faster than the L2ARC can maintain a headroom,
6650  * then the L2ARC simply misses copying some buffers.  This serves as a
6651  * pressure valve to prevent heavy read workloads from both stalling the ARC
6652  * with waits and clogging the L2ARC with writes.  This also helps prevent
6653  * the potential for the L2ARC to churn if it attempts to cache content too
6654  * quickly, such as during backups of the entire pool.
6655  *
6656  * 5. After system boot and before the ARC has filled main memory, there are
6657  * no evictions from the ARC and so the tails of the ARC_mfu and ARC_mru
6658  * lists can remain mostly static.  Instead of searching from tail of these
6659  * lists as pictured, the l2arc_feed_thread() will search from the list heads
6660  * for eligible buffers, greatly increasing its chance of finding them.
6661  *
6662  * The L2ARC device write speed is also boosted during this time so that
6663  * the L2ARC warms up faster.  Since there have been no ARC evictions yet,
6664  * there are no L2ARC reads, and no fear of degrading read performance
6665  * through increased writes.
6666  *
6667  * 6. Writes to the L2ARC devices are grouped and sent in-sequence, so that
6668  * the vdev queue can aggregate them into larger and fewer writes.  Each
6669  * device is written to in a rotor fashion, sweeping writes through
6670  * available space then repeating.
6671  *
6672  * 7. The L2ARC does not store dirty content.  It never needs to flush
6673  * write buffers back to disk based storage.
6674  *
6675  * 8. If an ARC buffer is written (and dirtied) which also exists in the
6676  * L2ARC, the now stale L2ARC buffer is immediately dropped.
6677  *
6678  * The performance of the L2ARC can be tweaked by a number of tunables, which
6679  * may be necessary for different workloads:
6680  *
6681  *      l2arc_write_max         max write bytes per interval
6682  *      l2arc_write_boost       extra write bytes during device warmup
6683  *      l2arc_noprefetch        skip caching prefetched buffers
6684  *      l2arc_headroom          number of max device writes to precache
6685  *      l2arc_headroom_boost    when we find compressed buffers during ARC
6686  *                              scanning, we multiply headroom by this
6687  *                              percentage factor for the next scan cycle,
6688  *                              since more compressed buffers are likely to
6689  *                              be present
6690  *      l2arc_feed_secs         seconds between L2ARC writing
6691  *
6692  * Tunables may be removed or added as future performance improvements are
6693  * integrated, and also may become zpool properties.
6694  *
6695  * There are three key functions that control how the L2ARC warms up:
6696  *
6697  *      l2arc_write_eligible()  check if a buffer is eligible to cache
6698  *      l2arc_write_size()      calculate how much to write
6699  *      l2arc_write_interval()  calculate sleep delay between writes
6700  *
6701  * These three functions determine what to write, how much, and how quickly
6702  * to send writes.
6703  */
6704
6705 static boolean_t
6706 l2arc_write_eligible(uint64_t spa_guid, arc_buf_hdr_t *hdr)
6707 {
6708         /*
6709          * A buffer is *not* eligible for the L2ARC if it:
6710          * 1. belongs to a different spa.
6711          * 2. is already cached on the L2ARC.
6712          * 3. has an I/O in progress (it may be an incomplete read).
6713          * 4. is flagged not eligible (zfs property).
6714          */
6715         if (hdr->b_spa != spa_guid || HDR_HAS_L2HDR(hdr) ||
6716             HDR_IO_IN_PROGRESS(hdr) || !HDR_L2CACHE(hdr))
6717                 return (B_FALSE);
6718
6719         return (B_TRUE);
6720 }
6721
6722 static uint64_t
6723 l2arc_write_size(void)
6724 {
6725         uint64_t size;
6726
6727         /*
6728          * Make sure our globals have meaningful values in case the user
6729          * altered them.
6730          */
6731         size = l2arc_write_max;
6732         if (size == 0) {
6733                 cmn_err(CE_NOTE, "Bad value for l2arc_write_max, value must "
6734                     "be greater than zero, resetting it to the default (%d)",
6735                     L2ARC_WRITE_SIZE);
6736                 size = l2arc_write_max = L2ARC_WRITE_SIZE;
6737         }
6738
6739         if (arc_warm == B_FALSE)
6740                 size += l2arc_write_boost;
6741
6742         return (size);
6743
6744 }
6745
6746 static clock_t
6747 l2arc_write_interval(clock_t began, uint64_t wanted, uint64_t wrote)
6748 {
6749         clock_t interval, next, now;
6750
6751         /*
6752          * If the ARC lists are busy, increase our write rate; if the
6753          * lists are stale, idle back.  This is achieved by checking
6754          * how much we previously wrote - if it was more than half of
6755          * what we wanted, schedule the next write much sooner.
6756          */
6757         if (l2arc_feed_again && wrote > (wanted / 2))
6758                 interval = (hz * l2arc_feed_min_ms) / 1000;
6759         else
6760                 interval = hz * l2arc_feed_secs;
6761
6762         now = ddi_get_lbolt();
6763         next = MAX(now, MIN(now + interval, began + interval));
6764
6765         return (next);
6766 }
6767
6768 /*
6769  * Cycle through L2ARC devices.  This is how L2ARC load balances.
6770  * If a device is returned, this also returns holding the spa config lock.
6771  */
6772 static l2arc_dev_t *
6773 l2arc_dev_get_next(void)
6774 {
6775         l2arc_dev_t *first, *next = NULL;
6776
6777         /*
6778          * Lock out the removal of spas (spa_namespace_lock), then removal
6779          * of cache devices (l2arc_dev_mtx).  Once a device has been selected,
6780          * both locks will be dropped and a spa config lock held instead.
6781          */
6782         mutex_enter(&spa_namespace_lock);
6783         mutex_enter(&l2arc_dev_mtx);
6784
6785         /* if there are no vdevs, there is nothing to do */
6786         if (l2arc_ndev == 0)
6787                 goto out;
6788
6789         first = NULL;
6790         next = l2arc_dev_last;
6791         do {
6792                 /* loop around the list looking for a non-faulted vdev */
6793                 if (next == NULL) {
6794                         next = list_head(l2arc_dev_list);
6795                 } else {
6796                         next = list_next(l2arc_dev_list, next);
6797                         if (next == NULL)
6798                                 next = list_head(l2arc_dev_list);
6799                 }
6800
6801                 /* if we have come back to the start, bail out */
6802                 if (first == NULL)
6803                         first = next;
6804                 else if (next == first)
6805                         break;
6806
6807         } while (vdev_is_dead(next->l2ad_vdev));
6808
6809         /* if we were unable to find any usable vdevs, return NULL */
6810         if (vdev_is_dead(next->l2ad_vdev))
6811                 next = NULL;
6812
6813         l2arc_dev_last = next;
6814
6815 out:
6816         mutex_exit(&l2arc_dev_mtx);
6817
6818         /*
6819          * Grab the config lock to prevent the 'next' device from being
6820          * removed while we are writing to it.
6821          */
6822         if (next != NULL)
6823                 spa_config_enter(next->l2ad_spa, SCL_L2ARC, next, RW_READER);
6824         mutex_exit(&spa_namespace_lock);
6825
6826         return (next);
6827 }
6828
6829 /*
6830  * Free buffers that were tagged for destruction.
6831  */
6832 static void
6833 l2arc_do_free_on_write(void)
6834 {
6835         list_t *buflist;
6836         l2arc_data_free_t *df, *df_prev;
6837
6838         mutex_enter(&l2arc_free_on_write_mtx);
6839         buflist = l2arc_free_on_write;
6840
6841         for (df = list_tail(buflist); df; df = df_prev) {
6842                 df_prev = list_prev(buflist, df);
6843                 ASSERT3P(df->l2df_abd, !=, NULL);
6844                 abd_free(df->l2df_abd);
6845                 list_remove(buflist, df);
6846                 kmem_free(df, sizeof (l2arc_data_free_t));
6847         }
6848
6849         mutex_exit(&l2arc_free_on_write_mtx);
6850 }
6851
6852 /*
6853  * A write to a cache device has completed.  Update all headers to allow
6854  * reads from these buffers to begin.
6855  */
6856 static void
6857 l2arc_write_done(zio_t *zio)
6858 {
6859         l2arc_write_callback_t *cb;
6860         l2arc_dev_t *dev;
6861         list_t *buflist;
6862         arc_buf_hdr_t *head, *hdr, *hdr_prev;
6863         kmutex_t *hash_lock;
6864         int64_t bytes_dropped = 0;
6865
6866         cb = zio->io_private;
6867         ASSERT3P(cb, !=, NULL);
6868         dev = cb->l2wcb_dev;
6869         ASSERT3P(dev, !=, NULL);
6870         head = cb->l2wcb_head;
6871         ASSERT3P(head, !=, NULL);
6872         buflist = &dev->l2ad_buflist;
6873         ASSERT3P(buflist, !=, NULL);
6874         DTRACE_PROBE2(l2arc__iodone, zio_t *, zio,
6875             l2arc_write_callback_t *, cb);
6876
6877         if (zio->io_error != 0)
6878                 ARCSTAT_BUMP(arcstat_l2_writes_error);
6879
6880         /*
6881          * All writes completed, or an error was hit.
6882          */
6883 top:
6884         mutex_enter(&dev->l2ad_mtx);
6885         for (hdr = list_prev(buflist, head); hdr; hdr = hdr_prev) {
6886                 hdr_prev = list_prev(buflist, hdr);
6887
6888                 hash_lock = HDR_LOCK(hdr);
6889
6890                 /*
6891                  * We cannot use mutex_enter or else we can deadlock
6892                  * with l2arc_write_buffers (due to swapping the order
6893                  * the hash lock and l2ad_mtx are taken).
6894                  */
6895                 if (!mutex_tryenter(hash_lock)) {
6896                         /*
6897                          * Missed the hash lock. We must retry so we
6898                          * don't leave the ARC_FLAG_L2_WRITING bit set.
6899                          */
6900                         ARCSTAT_BUMP(arcstat_l2_writes_lock_retry);
6901
6902                         /*
6903                          * We don't want to rescan the headers we've
6904                          * already marked as having been written out, so
6905                          * we reinsert the head node so we can pick up
6906                          * where we left off.
6907                          */
6908                         list_remove(buflist, head);
6909                         list_insert_after(buflist, hdr, head);
6910
6911                         mutex_exit(&dev->l2ad_mtx);
6912
6913                         /*
6914                          * We wait for the hash lock to become available
6915                          * to try and prevent busy waiting, and increase
6916                          * the chance we'll be able to acquire the lock
6917                          * the next time around.
6918                          */
6919                         mutex_enter(hash_lock);
6920                         mutex_exit(hash_lock);
6921                         goto top;
6922                 }
6923
6924                 /*
6925                  * We could not have been moved into the arc_l2c_only
6926                  * state while in-flight due to our ARC_FLAG_L2_WRITING
6927                  * bit being set. Let's just ensure that's being enforced.
6928                  */
6929                 ASSERT(HDR_HAS_L1HDR(hdr));
6930
6931                 /*
6932                  * Skipped - drop L2ARC entry and mark the header as no
6933                  * longer L2 eligibile.
6934                  */
6935                 if (zio->io_error != 0) {
6936                         /*
6937                          * Error - drop L2ARC entry.
6938                          */
6939                         list_remove(buflist, hdr);
6940                         arc_hdr_clear_flags(hdr, ARC_FLAG_HAS_L2HDR);
6941
6942                         ARCSTAT_INCR(arcstat_l2_asize, -arc_hdr_size(hdr));
6943                         ARCSTAT_INCR(arcstat_l2_size, -HDR_GET_LSIZE(hdr));
6944
6945                         bytes_dropped += arc_hdr_size(hdr);
6946                         (void) refcount_remove_many(&dev->l2ad_alloc,
6947                             arc_hdr_size(hdr), hdr);
6948                 }
6949
6950                 /*
6951                  * Allow ARC to begin reads and ghost list evictions to
6952                  * this L2ARC entry.
6953                  */
6954                 arc_hdr_clear_flags(hdr, ARC_FLAG_L2_WRITING);
6955
6956                 mutex_exit(hash_lock);
6957         }
6958
6959         atomic_inc_64(&l2arc_writes_done);
6960         list_remove(buflist, head);
6961         ASSERT(!HDR_HAS_L1HDR(head));
6962         kmem_cache_free(hdr_l2only_cache, head);
6963         mutex_exit(&dev->l2ad_mtx);
6964
6965         vdev_space_update(dev->l2ad_vdev, -bytes_dropped, 0, 0);
6966
6967         l2arc_do_free_on_write();
6968
6969         kmem_free(cb, sizeof (l2arc_write_callback_t));
6970 }
6971
6972 /*
6973  * A read to a cache device completed.  Validate buffer contents before
6974  * handing over to the regular ARC routines.
6975  */
6976 static void
6977 l2arc_read_done(zio_t *zio)
6978 {
6979         l2arc_read_callback_t *cb;
6980         arc_buf_hdr_t *hdr;
6981         kmutex_t *hash_lock;
6982         boolean_t valid_cksum;
6983
6984         ASSERT3P(zio->io_vd, !=, NULL);
6985         ASSERT(zio->io_flags & ZIO_FLAG_DONT_PROPAGATE);
6986
6987         spa_config_exit(zio->io_spa, SCL_L2ARC, zio->io_vd);
6988
6989         cb = zio->io_private;
6990         ASSERT3P(cb, !=, NULL);
6991         hdr = cb->l2rcb_hdr;
6992         ASSERT3P(hdr, !=, NULL);
6993
6994         hash_lock = HDR_LOCK(hdr);
6995         mutex_enter(hash_lock);
6996         ASSERT3P(hash_lock, ==, HDR_LOCK(hdr));
6997
6998         ASSERT3P(zio->io_abd, !=, NULL);
6999
7000         /*
7001          * Check this survived the L2ARC journey.
7002          */
7003         ASSERT3P(zio->io_abd, ==, hdr->b_l1hdr.b_pabd);
7004         zio->io_bp_copy = cb->l2rcb_bp; /* XXX fix in L2ARC 2.0 */
7005         zio->io_bp = &zio->io_bp_copy;  /* XXX fix in L2ARC 2.0 */
7006
7007         valid_cksum = arc_cksum_is_equal(hdr, zio);
7008         if (valid_cksum && zio->io_error == 0 && !HDR_L2_EVICTED(hdr)) {
7009                 mutex_exit(hash_lock);
7010                 zio->io_private = hdr;
7011                 arc_read_done(zio);
7012         } else {
7013                 mutex_exit(hash_lock);
7014                 /*
7015                  * Buffer didn't survive caching.  Increment stats and
7016                  * reissue to the original storage device.
7017                  */
7018                 if (zio->io_error != 0) {
7019                         ARCSTAT_BUMP(arcstat_l2_io_error);
7020                 } else {
7021                         zio->io_error = SET_ERROR(EIO);
7022                 }
7023                 if (!valid_cksum)
7024                         ARCSTAT_BUMP(arcstat_l2_cksum_bad);
7025
7026                 /*
7027                  * If there's no waiter, issue an async i/o to the primary
7028                  * storage now.  If there *is* a waiter, the caller must
7029                  * issue the i/o in a context where it's OK to block.
7030                  */
7031                 if (zio->io_waiter == NULL) {
7032                         zio_t *pio = zio_unique_parent(zio);
7033
7034                         ASSERT(!pio || pio->io_child_type == ZIO_CHILD_LOGICAL);
7035
7036                         zio_nowait(zio_read(pio, zio->io_spa, zio->io_bp,
7037                             hdr->b_l1hdr.b_pabd, zio->io_size, arc_read_done,
7038                             hdr, zio->io_priority, cb->l2rcb_flags,
7039                             &cb->l2rcb_zb));
7040                 }
7041         }
7042
7043         kmem_free(cb, sizeof (l2arc_read_callback_t));
7044 }
7045
7046 /*
7047  * This is the list priority from which the L2ARC will search for pages to
7048  * cache.  This is used within loops (0..3) to cycle through lists in the
7049  * desired order.  This order can have a significant effect on cache
7050  * performance.
7051  *
7052  * Currently the metadata lists are hit first, MFU then MRU, followed by
7053  * the data lists.  This function returns a locked list, and also returns
7054  * the lock pointer.
7055  */
7056 static multilist_sublist_t *
7057 l2arc_sublist_lock(int list_num)
7058 {
7059         multilist_t *ml = NULL;
7060         unsigned int idx;
7061
7062         ASSERT(list_num >= 0 && list_num < L2ARC_FEED_TYPES);
7063
7064         switch (list_num) {
7065         case 0:
7066                 ml = &arc_mfu->arcs_list[ARC_BUFC_METADATA];
7067                 break;
7068         case 1:
7069                 ml = &arc_mru->arcs_list[ARC_BUFC_METADATA];
7070                 break;
7071         case 2:
7072                 ml = &arc_mfu->arcs_list[ARC_BUFC_DATA];
7073                 break;
7074         case 3:
7075                 ml = &arc_mru->arcs_list[ARC_BUFC_DATA];
7076                 break;
7077         default:
7078                 return (NULL);
7079         }
7080
7081         /*
7082          * Return a randomly-selected sublist. This is acceptable
7083          * because the caller feeds only a little bit of data for each
7084          * call (8MB). Subsequent calls will result in different
7085          * sublists being selected.
7086          */
7087         idx = multilist_get_random_index(ml);
7088         return (multilist_sublist_lock(ml, idx));
7089 }
7090
7091 /*
7092  * Evict buffers from the device write hand to the distance specified in
7093  * bytes.  This distance may span populated buffers, it may span nothing.
7094  * This is clearing a region on the L2ARC device ready for writing.
7095  * If the 'all' boolean is set, every buffer is evicted.
7096  */
7097 static void
7098 l2arc_evict(l2arc_dev_t *dev, uint64_t distance, boolean_t all)
7099 {
7100         list_t *buflist;
7101         arc_buf_hdr_t *hdr, *hdr_prev;
7102         kmutex_t *hash_lock;
7103         uint64_t taddr;
7104
7105         buflist = &dev->l2ad_buflist;
7106
7107         if (!all && dev->l2ad_first) {
7108                 /*
7109                  * This is the first sweep through the device.  There is
7110                  * nothing to evict.
7111                  */
7112                 return;
7113         }
7114
7115         if (dev->l2ad_hand >= (dev->l2ad_end - (2 * distance))) {
7116                 /*
7117                  * When nearing the end of the device, evict to the end
7118                  * before the device write hand jumps to the start.
7119                  */
7120                 taddr = dev->l2ad_end;
7121         } else {
7122                 taddr = dev->l2ad_hand + distance;
7123         }
7124         DTRACE_PROBE4(l2arc__evict, l2arc_dev_t *, dev, list_t *, buflist,
7125             uint64_t, taddr, boolean_t, all);
7126
7127 top:
7128         mutex_enter(&dev->l2ad_mtx);
7129         for (hdr = list_tail(buflist); hdr; hdr = hdr_prev) {
7130                 hdr_prev = list_prev(buflist, hdr);
7131
7132                 hash_lock = HDR_LOCK(hdr);
7133
7134                 /*
7135                  * We cannot use mutex_enter or else we can deadlock
7136                  * with l2arc_write_buffers (due to swapping the order
7137                  * the hash lock and l2ad_mtx are taken).
7138                  */
7139                 if (!mutex_tryenter(hash_lock)) {
7140                         /*
7141                          * Missed the hash lock.  Retry.
7142                          */
7143                         ARCSTAT_BUMP(arcstat_l2_evict_lock_retry);
7144                         mutex_exit(&dev->l2ad_mtx);
7145                         mutex_enter(hash_lock);
7146                         mutex_exit(hash_lock);
7147                         goto top;
7148                 }
7149
7150                 if (HDR_L2_WRITE_HEAD(hdr)) {
7151                         /*
7152                          * We hit a write head node.  Leave it for
7153                          * l2arc_write_done().
7154                          */
7155                         list_remove(buflist, hdr);
7156                         mutex_exit(hash_lock);
7157                         continue;
7158                 }
7159
7160                 if (!all && HDR_HAS_L2HDR(hdr) &&
7161                     (hdr->b_l2hdr.b_daddr > taddr ||
7162                     hdr->b_l2hdr.b_daddr < dev->l2ad_hand)) {
7163                         /*
7164                          * We've evicted to the target address,
7165                          * or the end of the device.
7166                          */
7167                         mutex_exit(hash_lock);
7168                         break;
7169                 }
7170
7171                 ASSERT(HDR_HAS_L2HDR(hdr));
7172                 if (!HDR_HAS_L1HDR(hdr)) {
7173                         ASSERT(!HDR_L2_READING(hdr));
7174                         /*
7175                          * This doesn't exist in the ARC.  Destroy.
7176                          * arc_hdr_destroy() will call list_remove()
7177                          * and decrement arcstat_l2_size.
7178                          */
7179                         arc_change_state(arc_anon, hdr, hash_lock);
7180                         arc_hdr_destroy(hdr);
7181                 } else {
7182                         ASSERT(hdr->b_l1hdr.b_state != arc_l2c_only);
7183                         ARCSTAT_BUMP(arcstat_l2_evict_l1cached);
7184                         /*
7185                          * Invalidate issued or about to be issued
7186                          * reads, since we may be about to write
7187                          * over this location.
7188                          */
7189                         if (HDR_L2_READING(hdr)) {
7190                                 ARCSTAT_BUMP(arcstat_l2_evict_reading);
7191                                 arc_hdr_set_flags(hdr, ARC_FLAG_L2_EVICTED);
7192                         }
7193
7194                         /* Ensure this header has finished being written */
7195                         ASSERT(!HDR_L2_WRITING(hdr));
7196
7197                         arc_hdr_l2hdr_destroy(hdr);
7198                 }
7199                 mutex_exit(hash_lock);
7200         }
7201         mutex_exit(&dev->l2ad_mtx);
7202 }
7203
7204 /*
7205  * Find and write ARC buffers to the L2ARC device.
7206  *
7207  * An ARC_FLAG_L2_WRITING flag is set so that the L2ARC buffers are not valid
7208  * for reading until they have completed writing.
7209  * The headroom_boost is an in-out parameter used to maintain headroom boost
7210  * state between calls to this function.
7211  *
7212  * Returns the number of bytes actually written (which may be smaller than
7213  * the delta by which the device hand has changed due to alignment).
7214  */
7215 static uint64_t
7216 l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz)
7217 {
7218         arc_buf_hdr_t *hdr, *hdr_prev, *head;
7219         uint64_t write_asize, write_psize, write_sz, headroom;
7220         boolean_t full;
7221         l2arc_write_callback_t *cb;
7222         zio_t *pio, *wzio;
7223         uint64_t guid = spa_load_guid(spa);
7224         int try;
7225
7226         ASSERT3P(dev->l2ad_vdev, !=, NULL);
7227
7228         pio = NULL;
7229         write_sz = write_asize = write_psize = 0;
7230         full = B_FALSE;
7231         head = kmem_cache_alloc(hdr_l2only_cache, KM_PUSHPAGE);
7232         arc_hdr_set_flags(head, ARC_FLAG_L2_WRITE_HEAD | ARC_FLAG_HAS_L2HDR);
7233
7234         /*
7235          * Copy buffers for L2ARC writing.
7236          */
7237         for (try = 0; try < L2ARC_FEED_TYPES; try++) {
7238                 multilist_sublist_t *mls = l2arc_sublist_lock(try);
7239                 uint64_t passed_sz = 0;
7240
7241                 VERIFY3P(mls, !=, NULL);
7242
7243                 /*
7244                  * L2ARC fast warmup.
7245                  *
7246                  * Until the ARC is warm and starts to evict, read from the
7247                  * head of the ARC lists rather than the tail.
7248                  */
7249                 if (arc_warm == B_FALSE)
7250                         hdr = multilist_sublist_head(mls);
7251                 else
7252                         hdr = multilist_sublist_tail(mls);
7253
7254                 headroom = target_sz * l2arc_headroom;
7255                 if (zfs_compressed_arc_enabled)
7256                         headroom = (headroom * l2arc_headroom_boost) / 100;
7257
7258                 for (; hdr; hdr = hdr_prev) {
7259                         kmutex_t *hash_lock;
7260                         uint64_t asize, size;
7261                         abd_t *to_write;
7262
7263                         if (arc_warm == B_FALSE)
7264                                 hdr_prev = multilist_sublist_next(mls, hdr);
7265                         else
7266                                 hdr_prev = multilist_sublist_prev(mls, hdr);
7267
7268                         hash_lock = HDR_LOCK(hdr);
7269                         if (!mutex_tryenter(hash_lock)) {
7270                                 /*
7271                                  * Skip this buffer rather than waiting.
7272                                  */
7273                                 continue;
7274                         }
7275
7276                         passed_sz += HDR_GET_LSIZE(hdr);
7277                         if (passed_sz > headroom) {
7278                                 /*
7279                                  * Searched too far.
7280                                  */
7281                                 mutex_exit(hash_lock);
7282                                 break;
7283                         }
7284
7285                         if (!l2arc_write_eligible(guid, hdr)) {
7286                                 mutex_exit(hash_lock);
7287                                 continue;
7288                         }
7289
7290                         if ((write_asize + HDR_GET_LSIZE(hdr)) > target_sz) {
7291                                 full = B_TRUE;
7292                                 mutex_exit(hash_lock);
7293                                 break;
7294                         }
7295
7296                         if (pio == NULL) {
7297                                 /*
7298                                  * Insert a dummy header on the buflist so
7299                                  * l2arc_write_done() can find where the
7300                                  * write buffers begin without searching.
7301                                  */
7302                                 mutex_enter(&dev->l2ad_mtx);
7303                                 list_insert_head(&dev->l2ad_buflist, head);
7304                                 mutex_exit(&dev->l2ad_mtx);
7305
7306                                 cb = kmem_alloc(
7307                                     sizeof (l2arc_write_callback_t), KM_SLEEP);
7308                                 cb->l2wcb_dev = dev;
7309                                 cb->l2wcb_head = head;
7310                                 pio = zio_root(spa, l2arc_write_done, cb,
7311                                     ZIO_FLAG_CANFAIL);
7312                         }
7313
7314                         hdr->b_l2hdr.b_dev = dev;
7315                         hdr->b_l2hdr.b_hits = 0;
7316
7317                         hdr->b_l2hdr.b_daddr = dev->l2ad_hand;
7318                         arc_hdr_set_flags(hdr,
7319                             ARC_FLAG_L2_WRITING | ARC_FLAG_HAS_L2HDR);
7320
7321                         mutex_enter(&dev->l2ad_mtx);
7322                         list_insert_head(&dev->l2ad_buflist, hdr);
7323                         mutex_exit(&dev->l2ad_mtx);
7324
7325                         /*
7326                          * We rely on the L1 portion of the header below, so
7327                          * it's invalid for this header to have been evicted out
7328                          * of the ghost cache, prior to being written out. The
7329                          * ARC_FLAG_L2_WRITING bit ensures this won't happen.
7330                          */
7331                         ASSERT(HDR_HAS_L1HDR(hdr));
7332
7333                         ASSERT3U(HDR_GET_PSIZE(hdr), >, 0);
7334                         ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL);
7335                         ASSERT3U(arc_hdr_size(hdr), >, 0);
7336                         size = arc_hdr_size(hdr);
7337
7338                         (void) refcount_add_many(&dev->l2ad_alloc, size, hdr);
7339
7340                         /*
7341                          * Normally the L2ARC can use the hdr's data, but if
7342                          * we're sharing data between the hdr and one of its
7343                          * bufs, L2ARC needs its own copy of the data so that
7344                          * the ZIO below can't race with the buf consumer. To
7345                          * ensure that this copy will be available for the
7346                          * lifetime of the ZIO and be cleaned up afterwards, we
7347                          * add it to the l2arc_free_on_write queue.
7348                          */
7349                         if (!HDR_SHARED_DATA(hdr)) {
7350                                 to_write = hdr->b_l1hdr.b_pabd;
7351                         } else {
7352                                 to_write = abd_alloc_for_io(size,
7353                                     HDR_ISTYPE_METADATA(hdr));
7354                                 abd_copy(to_write, hdr->b_l1hdr.b_pabd, size);
7355                                 l2arc_free_abd_on_write(to_write, size,
7356                                     arc_buf_type(hdr));
7357                         }
7358                         wzio = zio_write_phys(pio, dev->l2ad_vdev,
7359                             hdr->b_l2hdr.b_daddr, size, to_write,
7360                             ZIO_CHECKSUM_OFF, NULL, hdr,
7361                             ZIO_PRIORITY_ASYNC_WRITE,
7362                             ZIO_FLAG_CANFAIL, B_FALSE);
7363
7364                         write_sz += HDR_GET_LSIZE(hdr);
7365                         DTRACE_PROBE2(l2arc__write, vdev_t *, dev->l2ad_vdev,
7366                             zio_t *, wzio);
7367
7368                         write_asize += size;
7369                         /*
7370                          * Keep the clock hand suitably device-aligned.
7371                          */
7372                         asize = vdev_psize_to_asize(dev->l2ad_vdev, size);
7373                         write_psize += asize;
7374                         dev->l2ad_hand += asize;
7375
7376                         mutex_exit(hash_lock);
7377
7378                         (void) zio_nowait(wzio);
7379                 }
7380
7381                 multilist_sublist_unlock(mls);
7382
7383                 if (full == B_TRUE)
7384                         break;
7385         }
7386
7387         /* No buffers selected for writing? */
7388         if (pio == NULL) {
7389                 ASSERT0(write_sz);
7390                 ASSERT(!HDR_HAS_L1HDR(head));
7391                 kmem_cache_free(hdr_l2only_cache, head);
7392                 return (0);
7393         }
7394
7395         ASSERT3U(write_asize, <=, target_sz);
7396         ARCSTAT_BUMP(arcstat_l2_writes_sent);
7397         ARCSTAT_INCR(arcstat_l2_write_bytes, write_asize);
7398         ARCSTAT_INCR(arcstat_l2_size, write_sz);
7399         ARCSTAT_INCR(arcstat_l2_asize, write_asize);
7400         vdev_space_update(dev->l2ad_vdev, write_asize, 0, 0);
7401
7402         /*
7403          * Bump device hand to the device start if it is approaching the end.
7404          * l2arc_evict() will already have evicted ahead for this case.
7405          */
7406         if (dev->l2ad_hand >= (dev->l2ad_end - target_sz)) {
7407                 dev->l2ad_hand = dev->l2ad_start;
7408                 dev->l2ad_first = B_FALSE;
7409         }
7410
7411         dev->l2ad_writing = B_TRUE;
7412         (void) zio_wait(pio);
7413         dev->l2ad_writing = B_FALSE;
7414
7415         return (write_asize);
7416 }
7417
7418 /*
7419  * This thread feeds the L2ARC at regular intervals.  This is the beating
7420  * heart of the L2ARC.
7421  */
7422 static void
7423 l2arc_feed_thread(void)
7424 {
7425         callb_cpr_t cpr;
7426         l2arc_dev_t *dev;
7427         spa_t *spa;
7428         uint64_t size, wrote;
7429         clock_t begin, next = ddi_get_lbolt();
7430         fstrans_cookie_t cookie;
7431
7432         CALLB_CPR_INIT(&cpr, &l2arc_feed_thr_lock, callb_generic_cpr, FTAG);
7433
7434         mutex_enter(&l2arc_feed_thr_lock);
7435
7436         cookie = spl_fstrans_mark();
7437         while (l2arc_thread_exit == 0) {
7438                 CALLB_CPR_SAFE_BEGIN(&cpr);
7439                 (void) cv_timedwait_sig(&l2arc_feed_thr_cv,
7440                     &l2arc_feed_thr_lock, next);
7441                 CALLB_CPR_SAFE_END(&cpr, &l2arc_feed_thr_lock);
7442                 next = ddi_get_lbolt() + hz;
7443
7444                 /*
7445                  * Quick check for L2ARC devices.
7446                  */
7447                 mutex_enter(&l2arc_dev_mtx);
7448                 if (l2arc_ndev == 0) {
7449                         mutex_exit(&l2arc_dev_mtx);
7450                         continue;
7451                 }
7452                 mutex_exit(&l2arc_dev_mtx);
7453                 begin = ddi_get_lbolt();
7454
7455                 /*
7456                  * This selects the next l2arc device to write to, and in
7457                  * doing so the next spa to feed from: dev->l2ad_spa.   This
7458                  * will return NULL if there are now no l2arc devices or if
7459                  * they are all faulted.
7460                  *
7461                  * If a device is returned, its spa's config lock is also
7462                  * held to prevent device removal.  l2arc_dev_get_next()
7463                  * will grab and release l2arc_dev_mtx.
7464                  */
7465                 if ((dev = l2arc_dev_get_next()) == NULL)
7466                         continue;
7467
7468                 spa = dev->l2ad_spa;
7469                 ASSERT3P(spa, !=, NULL);
7470
7471                 /*
7472                  * If the pool is read-only then force the feed thread to
7473                  * sleep a little longer.
7474                  */
7475                 if (!spa_writeable(spa)) {
7476                         next = ddi_get_lbolt() + 5 * l2arc_feed_secs * hz;
7477                         spa_config_exit(spa, SCL_L2ARC, dev);
7478                         continue;
7479                 }
7480
7481                 /*
7482                  * Avoid contributing to memory pressure.
7483                  */
7484                 if (arc_reclaim_needed()) {
7485                         ARCSTAT_BUMP(arcstat_l2_abort_lowmem);
7486                         spa_config_exit(spa, SCL_L2ARC, dev);
7487                         continue;
7488                 }
7489
7490                 ARCSTAT_BUMP(arcstat_l2_feeds);
7491
7492                 size = l2arc_write_size();
7493
7494                 /*
7495                  * Evict L2ARC buffers that will be overwritten.
7496                  */
7497                 l2arc_evict(dev, size, B_FALSE);
7498
7499                 /*
7500                  * Write ARC buffers.
7501                  */
7502                 wrote = l2arc_write_buffers(spa, dev, size);
7503
7504                 /*
7505                  * Calculate interval between writes.
7506                  */
7507                 next = l2arc_write_interval(begin, size, wrote);
7508                 spa_config_exit(spa, SCL_L2ARC, dev);
7509         }
7510         spl_fstrans_unmark(cookie);
7511
7512         l2arc_thread_exit = 0;
7513         cv_broadcast(&l2arc_feed_thr_cv);
7514         CALLB_CPR_EXIT(&cpr);           /* drops l2arc_feed_thr_lock */
7515         thread_exit();
7516 }
7517
7518 boolean_t
7519 l2arc_vdev_present(vdev_t *vd)
7520 {
7521         l2arc_dev_t *dev;
7522
7523         mutex_enter(&l2arc_dev_mtx);
7524         for (dev = list_head(l2arc_dev_list); dev != NULL;
7525             dev = list_next(l2arc_dev_list, dev)) {
7526                 if (dev->l2ad_vdev == vd)
7527                         break;
7528         }
7529         mutex_exit(&l2arc_dev_mtx);
7530
7531         return (dev != NULL);
7532 }
7533
7534 /*
7535  * Add a vdev for use by the L2ARC.  By this point the spa has already
7536  * validated the vdev and opened it.
7537  */
7538 void
7539 l2arc_add_vdev(spa_t *spa, vdev_t *vd)
7540 {
7541         l2arc_dev_t *adddev;
7542
7543         ASSERT(!l2arc_vdev_present(vd));
7544
7545         /*
7546          * Create a new l2arc device entry.
7547          */
7548         adddev = kmem_zalloc(sizeof (l2arc_dev_t), KM_SLEEP);
7549         adddev->l2ad_spa = spa;
7550         adddev->l2ad_vdev = vd;
7551         adddev->l2ad_start = VDEV_LABEL_START_SIZE;
7552         adddev->l2ad_end = VDEV_LABEL_START_SIZE + vdev_get_min_asize(vd);
7553         adddev->l2ad_hand = adddev->l2ad_start;
7554         adddev->l2ad_first = B_TRUE;
7555         adddev->l2ad_writing = B_FALSE;
7556         list_link_init(&adddev->l2ad_node);
7557
7558         mutex_init(&adddev->l2ad_mtx, NULL, MUTEX_DEFAULT, NULL);
7559         /*
7560          * This is a list of all ARC buffers that are still valid on the
7561          * device.
7562          */
7563         list_create(&adddev->l2ad_buflist, sizeof (arc_buf_hdr_t),
7564             offsetof(arc_buf_hdr_t, b_l2hdr.b_l2node));
7565
7566         vdev_space_update(vd, 0, 0, adddev->l2ad_end - adddev->l2ad_hand);
7567         refcount_create(&adddev->l2ad_alloc);
7568
7569         /*
7570          * Add device to global list
7571          */
7572         mutex_enter(&l2arc_dev_mtx);
7573         list_insert_head(l2arc_dev_list, adddev);
7574         atomic_inc_64(&l2arc_ndev);
7575         mutex_exit(&l2arc_dev_mtx);
7576 }
7577
7578 /*
7579  * Remove a vdev from the L2ARC.
7580  */
7581 void
7582 l2arc_remove_vdev(vdev_t *vd)
7583 {
7584         l2arc_dev_t *dev, *nextdev, *remdev = NULL;
7585
7586         /*
7587          * Find the device by vdev
7588          */
7589         mutex_enter(&l2arc_dev_mtx);
7590         for (dev = list_head(l2arc_dev_list); dev; dev = nextdev) {
7591                 nextdev = list_next(l2arc_dev_list, dev);
7592                 if (vd == dev->l2ad_vdev) {
7593                         remdev = dev;
7594                         break;
7595                 }
7596         }
7597         ASSERT3P(remdev, !=, NULL);
7598
7599         /*
7600          * Remove device from global list
7601          */
7602         list_remove(l2arc_dev_list, remdev);
7603         l2arc_dev_last = NULL;          /* may have been invalidated */
7604         atomic_dec_64(&l2arc_ndev);
7605         mutex_exit(&l2arc_dev_mtx);
7606
7607         /*
7608          * Clear all buflists and ARC references.  L2ARC device flush.
7609          */
7610         l2arc_evict(remdev, 0, B_TRUE);
7611         list_destroy(&remdev->l2ad_buflist);
7612         mutex_destroy(&remdev->l2ad_mtx);
7613         refcount_destroy(&remdev->l2ad_alloc);
7614         kmem_free(remdev, sizeof (l2arc_dev_t));
7615 }
7616
7617 void
7618 l2arc_init(void)
7619 {
7620         l2arc_thread_exit = 0;
7621         l2arc_ndev = 0;
7622         l2arc_writes_sent = 0;
7623         l2arc_writes_done = 0;
7624
7625         mutex_init(&l2arc_feed_thr_lock, NULL, MUTEX_DEFAULT, NULL);
7626         cv_init(&l2arc_feed_thr_cv, NULL, CV_DEFAULT, NULL);
7627         mutex_init(&l2arc_dev_mtx, NULL, MUTEX_DEFAULT, NULL);
7628         mutex_init(&l2arc_free_on_write_mtx, NULL, MUTEX_DEFAULT, NULL);
7629
7630         l2arc_dev_list = &L2ARC_dev_list;
7631         l2arc_free_on_write = &L2ARC_free_on_write;
7632         list_create(l2arc_dev_list, sizeof (l2arc_dev_t),
7633             offsetof(l2arc_dev_t, l2ad_node));
7634         list_create(l2arc_free_on_write, sizeof (l2arc_data_free_t),
7635             offsetof(l2arc_data_free_t, l2df_list_node));
7636 }
7637
7638 void
7639 l2arc_fini(void)
7640 {
7641         /*
7642          * This is called from dmu_fini(), which is called from spa_fini();
7643          * Because of this, we can assume that all l2arc devices have
7644          * already been removed when the pools themselves were removed.
7645          */
7646
7647         l2arc_do_free_on_write();
7648
7649         mutex_destroy(&l2arc_feed_thr_lock);
7650         cv_destroy(&l2arc_feed_thr_cv);
7651         mutex_destroy(&l2arc_dev_mtx);
7652         mutex_destroy(&l2arc_free_on_write_mtx);
7653
7654         list_destroy(l2arc_dev_list);
7655         list_destroy(l2arc_free_on_write);
7656 }
7657
7658 void
7659 l2arc_start(void)
7660 {
7661         if (!(spa_mode_global & FWRITE))
7662                 return;
7663
7664         (void) thread_create(NULL, 0, l2arc_feed_thread, NULL, 0, &p0,
7665             TS_RUN, defclsyspri);
7666 }
7667
7668 void
7669 l2arc_stop(void)
7670 {
7671         if (!(spa_mode_global & FWRITE))
7672                 return;
7673
7674         mutex_enter(&l2arc_feed_thr_lock);
7675         cv_signal(&l2arc_feed_thr_cv);  /* kick thread out of startup */
7676         l2arc_thread_exit = 1;
7677         while (l2arc_thread_exit != 0)
7678                 cv_wait(&l2arc_feed_thr_cv, &l2arc_feed_thr_lock);
7679         mutex_exit(&l2arc_feed_thr_lock);
7680 }
7681
7682 #if defined(_KERNEL) && defined(HAVE_SPL)
7683 EXPORT_SYMBOL(arc_buf_size);
7684 EXPORT_SYMBOL(arc_write);
7685 EXPORT_SYMBOL(arc_read);
7686 EXPORT_SYMBOL(arc_buf_info);
7687 EXPORT_SYMBOL(arc_getbuf_func);
7688 EXPORT_SYMBOL(arc_add_prune_callback);
7689 EXPORT_SYMBOL(arc_remove_prune_callback);
7690
7691 module_param(zfs_arc_min, ulong, 0644);
7692 MODULE_PARM_DESC(zfs_arc_min, "Min arc size");
7693
7694 module_param(zfs_arc_max, ulong, 0644);
7695 MODULE_PARM_DESC(zfs_arc_max, "Max arc size");
7696
7697 module_param(zfs_arc_meta_limit, ulong, 0644);
7698 MODULE_PARM_DESC(zfs_arc_meta_limit, "Meta limit for arc size");
7699
7700 module_param(zfs_arc_meta_limit_percent, ulong, 0644);
7701 MODULE_PARM_DESC(zfs_arc_meta_limit_percent,
7702         "Percent of arc size for arc meta limit");
7703
7704 module_param(zfs_arc_meta_min, ulong, 0644);
7705 MODULE_PARM_DESC(zfs_arc_meta_min, "Min arc metadata");
7706
7707 module_param(zfs_arc_meta_prune, int, 0644);
7708 MODULE_PARM_DESC(zfs_arc_meta_prune, "Meta objects to scan for prune");
7709
7710 module_param(zfs_arc_meta_adjust_restarts, int, 0644);
7711 MODULE_PARM_DESC(zfs_arc_meta_adjust_restarts,
7712         "Limit number of restarts in arc_adjust_meta");
7713
7714 module_param(zfs_arc_meta_strategy, int, 0644);
7715 MODULE_PARM_DESC(zfs_arc_meta_strategy, "Meta reclaim strategy");
7716
7717 module_param(zfs_arc_grow_retry, int, 0644);
7718 MODULE_PARM_DESC(zfs_arc_grow_retry, "Seconds before growing arc size");
7719
7720 module_param(zfs_arc_p_aggressive_disable, int, 0644);
7721 MODULE_PARM_DESC(zfs_arc_p_aggressive_disable, "disable aggressive arc_p grow");
7722
7723 module_param(zfs_arc_p_dampener_disable, int, 0644);
7724 MODULE_PARM_DESC(zfs_arc_p_dampener_disable, "disable arc_p adapt dampener");
7725
7726 module_param(zfs_arc_shrink_shift, int, 0644);
7727 MODULE_PARM_DESC(zfs_arc_shrink_shift, "log2(fraction of arc to reclaim)");
7728
7729 module_param(zfs_arc_p_min_shift, int, 0644);
7730 MODULE_PARM_DESC(zfs_arc_p_min_shift, "arc_c shift to calc min/max arc_p");
7731
7732 module_param(zfs_arc_average_blocksize, int, 0444);
7733 MODULE_PARM_DESC(zfs_arc_average_blocksize, "Target average block size");
7734
7735 module_param(zfs_compressed_arc_enabled, int, 0644);
7736 MODULE_PARM_DESC(zfs_arc_average_blocksize, "Disable compressed arc buffers");
7737
7738 module_param(zfs_arc_min_prefetch_lifespan, int, 0644);
7739 MODULE_PARM_DESC(zfs_arc_min_prefetch_lifespan, "Min life of prefetch block");
7740
7741 module_param(zfs_arc_num_sublists_per_state, int, 0644);
7742 MODULE_PARM_DESC(zfs_arc_num_sublists_per_state,
7743         "Number of sublists used in each of the ARC state lists");
7744
7745 module_param(l2arc_write_max, ulong, 0644);
7746 MODULE_PARM_DESC(l2arc_write_max, "Max write bytes per interval");
7747
7748 module_param(l2arc_write_boost, ulong, 0644);
7749 MODULE_PARM_DESC(l2arc_write_boost, "Extra write bytes during device warmup");
7750
7751 module_param(l2arc_headroom, ulong, 0644);
7752 MODULE_PARM_DESC(l2arc_headroom, "Number of max device writes to precache");
7753
7754 module_param(l2arc_headroom_boost, ulong, 0644);
7755 MODULE_PARM_DESC(l2arc_headroom_boost, "Compressed l2arc_headroom multiplier");
7756
7757 module_param(l2arc_feed_secs, ulong, 0644);
7758 MODULE_PARM_DESC(l2arc_feed_secs, "Seconds between L2ARC writing");
7759
7760 module_param(l2arc_feed_min_ms, ulong, 0644);
7761 MODULE_PARM_DESC(l2arc_feed_min_ms, "Min feed interval in milliseconds");
7762
7763 module_param(l2arc_noprefetch, int, 0644);
7764 MODULE_PARM_DESC(l2arc_noprefetch, "Skip caching prefetched buffers");
7765
7766 module_param(l2arc_feed_again, int, 0644);
7767 MODULE_PARM_DESC(l2arc_feed_again, "Turbo L2ARC warmup");
7768
7769 module_param(l2arc_norw, int, 0644);
7770 MODULE_PARM_DESC(l2arc_norw, "No reads during writes");
7771
7772 module_param(zfs_arc_lotsfree_percent, int, 0644);
7773 MODULE_PARM_DESC(zfs_arc_lotsfree_percent,
7774         "System free memory I/O throttle in bytes");
7775
7776 module_param(zfs_arc_sys_free, ulong, 0644);
7777 MODULE_PARM_DESC(zfs_arc_sys_free, "System free memory target size in bytes");
7778
7779 module_param(zfs_arc_dnode_limit, ulong, 0644);
7780 MODULE_PARM_DESC(zfs_arc_dnode_limit, "Minimum bytes of dnodes in arc");
7781
7782 module_param(zfs_arc_dnode_limit_percent, ulong, 0644);
7783 MODULE_PARM_DESC(zfs_arc_dnode_limit_percent,
7784         "Percent of ARC meta buffers for dnodes");
7785
7786 module_param(zfs_arc_dnode_reduce_percent, ulong, 0644);
7787 MODULE_PARM_DESC(zfs_arc_dnode_reduce_percent,
7788         "Percentage of excess dnodes to try to unpin");
7789
7790 #endif