60 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | |
| From: Thomas Lamprecht <t.lamprecht@proxmox.com>
 | |
| Date: Wed, 10 Nov 2021 09:29:47 +0100
 | |
| Subject: [PATCH] arc stat/summary: guard access to l2arc MFU/MRU stats
 | |
| 
 | |
| commit 085321621e79a75bea41c2b6511da6ebfbf2ba0a added printing MFU
 | |
| and MRU stats for 2.1 user space tools, but those keys are not
 | |
| available in the 2.0 module. That means it may break the arcstat and
 | |
| arc_summary tools after upgrade to 2.1 (user space), before a reboot
 | |
| to the new 2.1 ZFS kernel-module happened, due to python raising a
 | |
| KeyError on the dict access then.
 | |
| 
 | |
| Move those two keys to a .get accessor with `0` as fallback, as it
 | |
| should be better to show some possible wrong data for new stat-keys
 | |
| than throwing an exception.
 | |
| 
 | |
| Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
 | |
| ---
 | |
|  cmd/arc_summary/arc_summary3 | 8 ++++----
 | |
|  cmd/arcstat/arcstat.in       | 4 ++--
 | |
|  2 files changed, 6 insertions(+), 6 deletions(-)
 | |
| 
 | |
| diff --git a/cmd/arc_summary/arc_summary3 b/cmd/arc_summary/arc_summary3
 | |
| index 7b28012ed..0a81b2bc7 100755
 | |
| --- a/cmd/arc_summary/arc_summary3
 | |
| +++ b/cmd/arc_summary/arc_summary3
 | |
| @@ -617,13 +617,13 @@ def section_arc(kstats_dict):
 | |
|      prt_i1('L2 cached evictions:', f_bytes(arc_stats['evict_l2_cached']))
 | |
|      prt_i1('L2 eligible evictions:', f_bytes(arc_stats['evict_l2_eligible']))
 | |
|      prt_i2('L2 eligible MFU evictions:',
 | |
| -           f_perc(arc_stats['evict_l2_eligible_mfu'],
 | |
| +           f_perc(arc_stats.get('evict_l2_eligible_mfu', 0), # 2.0 module compat
 | |
|             arc_stats['evict_l2_eligible']),
 | |
| -           f_bytes(arc_stats['evict_l2_eligible_mfu']))
 | |
| +           f_bytes(arc_stats.get('evict_l2_eligible_mfu', 0)))
 | |
|      prt_i2('L2 eligible MRU evictions:',
 | |
| -           f_perc(arc_stats['evict_l2_eligible_mru'],
 | |
| +           f_perc(arc_stats.get('evict_l2_eligible_mru', 0), # 2.0 module compat
 | |
|             arc_stats['evict_l2_eligible']),
 | |
| -           f_bytes(arc_stats['evict_l2_eligible_mru']))
 | |
| +           f_bytes(arc_stats.get('evict_l2_eligible_mru', 0)))
 | |
|      prt_i1('L2 ineligible evictions:',
 | |
|             f_bytes(arc_stats['evict_l2_ineligible']))
 | |
|      print()
 | |
| diff --git a/cmd/arcstat/arcstat.in b/cmd/arcstat/arcstat.in
 | |
| index cd9a803a2..6878419e7 100755
 | |
| --- a/cmd/arcstat/arcstat.in
 | |
| +++ b/cmd/arcstat/arcstat.in
 | |
| @@ -482,8 +482,8 @@ def calculate():
 | |
|      v["el2skip"] = d["evict_l2_skip"] // sint
 | |
|      v["el2cach"] = d["evict_l2_cached"] // sint
 | |
|      v["el2el"] = d["evict_l2_eligible"] // sint
 | |
| -    v["el2mfu"] = d["evict_l2_eligible_mfu"] // sint
 | |
| -    v["el2mru"] = d["evict_l2_eligible_mru"] // sint
 | |
| +    v["el2mfu"] = d.get("evict_l2_eligible_mfu", 0) // sint
 | |
| +    v["el2mru"] = d.get("evict_l2_eligible_mru", 0) // sint
 | |
|      v["el2inel"] = d["evict_l2_ineligible"] // sint
 | |
|      v["mtxmis"] = d["mutex_miss"] // sint
 | |
|  
 | 
