*/
size = l2arc_write_max;
if (size == 0) {
- cmn_err(CE_NOTE, "Bad value for l2arc_write_max, value must "
- "be greater than zero, resetting it to the default (%d)",
- L2ARC_WRITE_SIZE);
+ cmn_err(CE_NOTE, "l2arc_write_max must be greater than zero, "
+ "resetting it to the default (%d)", L2ARC_WRITE_SIZE);
size = l2arc_write_max = L2ARC_WRITE_SIZE;
}
* device. This is important in l2arc_evict(), otherwise infinite
* iteration can occur.
*/
- if (size > dev->l2ad_end - dev->l2ad_start) {
- cmn_err(CE_NOTE, "l2arc_write_max or l2arc_write_boost "
- "plus the overhead of log blocks (persistent L2ARC, "
- "%llu bytes) exceeds the size of the cache device "
- "(guid %llu), resetting them to the default (%d)",
- (u_longlong_t)l2arc_log_blk_overhead(size, dev),
- (u_longlong_t)dev->l2ad_vdev->vdev_guid, L2ARC_WRITE_SIZE);
+ size = MIN(size, (dev->l2ad_end - dev->l2ad_start) / 4);
- size = l2arc_write_max = l2arc_write_boost = L2ARC_WRITE_SIZE;
-
- if (l2arc_trim_ahead > 1) {
- cmn_err(CE_NOTE, "l2arc_trim_ahead set to 1");
- l2arc_trim_ahead = 1;
- }
-
- if (arc_warm == B_FALSE)
- size += l2arc_write_boost;
-
- size += l2arc_log_blk_overhead(size, dev);
- if (dev->l2ad_vdev->vdev_has_trim && l2arc_trim_ahead > 0) {
- size += MAX(64 * 1024 * 1024,
- (size * l2arc_trim_ahead) / 100);
- }
- }
+ size = P2ROUNDUP(size, 1ULL << dev->l2ad_vdev->vdev_ashift);
return (size);
# 2. Set l2arc_write_max to a value larger than the cache device.
# 3. Create a file larger than the cache device and random read
# for 10 sec.
-# 4. Verify that l2arc_write_max is set back to the default.
-# 5. Set l2arc_write_max to a value less than the cache device size but
+# 4. Set l2arc_write_max to a value less than the cache device size but
# larger than the default (256MB).
-# 6. Record the l2_size.
-# 7. Random read for 1 sec.
-# 8. Record the l2_size again.
-# 9. If (6) <= (8) then we have not looped around yet.
-# 10. If (6) > (8) then we looped around. Break out of the loop and test.
-# 11. Destroy pool.
+# 5. Record the l2_size.
+# 6. Random read for 1 sec.
+# 7. Record the l2_size again.
+# 8. If (5) <= (7) then we have not looped around yet.
+# 9. Destroy pool.
#
verify_runnable "global"
log_must fio $FIO_SCRIPTS/mkfiles.fio
log_must fio $FIO_SCRIPTS/random_reads.fio
-typeset write_max2=$(get_tunable L2ARC_WRITE_MAX)
-
-log_must test $write_max2 -eq $write_max
-
log_must set_tunable32 L2ARC_WRITE_MAX $(( 256 * 1024 * 1024 ))
export RUNTIME=1
do_once=false
done
-log_must test $l2_size1 -gt $l2_size2
-
log_must zpool destroy $TESTPOOL
log_pass "Looping around a cache device succeeds."