Fix Change Details ------------------
(Compare with comment #3)
The xattr dir/child inodes are evicted/disposed immediately on file removal, not on shrinker.
$ touch /zfs/file <...>-23940 [006] d... 10808.746798: p_zfs_mknode_0: (zfs_mknode+0x0/0xe00 [zfs]) flag=0x0 dzp=0xffff88011aa94400 <...>-23940 [006] d... 10808.746925: p_zfs_znode_alloc_0: (zfs_znode_alloc+0x0/0x520 [zfs]) obj=0xa <...>-23940 [006] d... 10808.746938: r_zfs_znode_alloc_0: (zfs_mknode+0x8a3/0xe00 [zfs] <- zfs_znode_alloc) zpp=0xffff88011aa90880
$ setfattr -n user.debug -v 1 /zfs/file <...>-23941 [006] d... 10818.945733: p_zfs_mknode_0: (zfs_mknode+0x0/0xe00 [zfs]) flag=0x2 dzp=0xffff88011aa90880 <...>-23941 [006] d... 10818.945892: p_zfs_znode_alloc_0: (zfs_znode_alloc+0x0/0x520 [zfs]) obj=0xb <...>-23941 [006] d... 10818.945905: r_zfs_znode_alloc_0: (zfs_mknode+0x8a3/0xe00 [zfs] <- zfs_znode_alloc) zpp=0xffff88011aa961c0 <...>-23941 [006] d... 10818.945925: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff880016f00000 obj=0xa setfattr-23941 [006] d... 10818.945929: r_zfs_zget_0: (zfs_zaccess+0x12b/0x220 [zfs] <- zfs_zget) setfattr-23941 [006] d... 10818.945933: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff880016f00000 obj=0xa setfattr-23941 [006] d... 10818.945936: r_zfs_zget_0: (zfs_zaccess+0x12b/0x220 [zfs] <- zfs_zget) setfattr-23941 [006] d... 10818.945948: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff880016f00000 obj=0xa setfattr-23941 [006] d... 10818.945951: r_zfs_zget_0: (zfs_zaccess+0x12b/0x220 [zfs] <- zfs_zget) setfattr-23941 [006] d... 10818.945966: p_zfs_mknode_0: (zfs_mknode+0x0/0xe00 [zfs]) flag=0x0 dzp=0xffff88011aa961c0 setfattr-23941 [006] d... 10818.945990: p_zfs_znode_alloc_0: (zfs_znode_alloc+0x0/0x520 [zfs]) obj=0xc setfattr-23941 [006] d... 10818.945996: r_zfs_znode_alloc_0: (zfs_mknode+0x8a3/0xe00 [zfs] <- zfs_znode_alloc) zpp=0xffff88011aa90440
$ rm /zfs/file <...>-23942 [006] d... 10822.453456: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff880016f00000 obj=0xa <...>-23942 [006] d... 10822.453469: r_zfs_zget_0: (zfs_dirent_lock+0x56c/0x6c0 [zfs] <- zfs_zget) rm-23942 [006] d... 10822.453494: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff880016f00000 obj=0xb rm-23942 [006] d... 10822.453498: r_zfs_zget_0: (zfs_remove+0x22b/0x4c0 [zfs] <- zfs_zget) rm-23942 [006] d... 10822.453597: p_zpl_evict_inode_0: (zpl_evict_inode+0x0/0x60 [zfs]) inode=0xffff88011aa90a90 rm-23942 [006] d... 10822.453602: p_zfs_inactive_0: (zfs_inactive+0x0/0x270 [zfs]) inode=0xffff88011aa90a90 rm-23942 [006] d... 10822.453603: p_zfs_zinactive_0: (zfs_zinactive+0x0/0xe0 [zfs]) znode=0xffff88011aa90880 obj=0xa rm-23942 [006] d... 10822.453607: p_zfs_rmnode_0: (zfs_rmnode+0x0/0x360 [zfs]) znode=0xffff88011aa90880 rm-23942 [006] d... 10822.453619: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff880016f00000 obj=0xb rm-23942 [006] d... 10822.453623: r_zfs_zget_0: (zfs_rmnode+0x25b/0x360 [zfs] <- zfs_zget) rm-23942 [006] d... 10822.453656: p_zfs_iput_async_0: (zfs_iput_async+0x0/0x60 [zfs]) inode=0xffff88011aa963d0 obj=0x0 z_iput-23904 [006] d... 10822.453675: p_zpl_evict_inode_0: (zpl_evict_inode+0x0/0x60 [zfs]) inode=0xffff88011aa963d0 z_iput-23904 [006] d... 10822.453676: p_zfs_inactive_0: (zfs_inactive+0x0/0x270 [zfs]) inode=0xffff88011aa963d0 z_iput-23904 [006] d... 10822.453677: p_zfs_zinactive_0: (zfs_zinactive+0x0/0xe0 [zfs]) znode=0xffff88011aa961c0 obj=0xb z_iput-23904 [006] d... 10822.453679: p_zfs_rmnode_0: (zfs_rmnode+0x0/0x360 [zfs]) znode=0xffff88011aa961c0 z_iput-23904 [006] d... 10822.453681: p_zfs_purgedir_0: (zfs_purgedir+0x0/0x230 [zfs]) znode=0xffff88011aa961c0 z_iput-23904 [006] d... 10822.453686: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff880016f00000 obj=0xc z_iput-23904 [006] d... 10822.453690: r_zfs_zget_0: (zfs_purgedir+0xb4/0x230 [zfs] <- zfs_zget) z_iput-23904 [006] d... 10822.453713: p_zfs_iput_async_0: (zfs_iput_async+0x0/0x60 [zfs]) inode=0xffff88011aa90650 obj=0x0 z_iput-23904 [006] d... 10822.453719: r_zfs_purgedir_0: (zfs_rmnode+0x272/0x360 [zfs] <- zfs_purgedir) z_iput-23904 [006] d... 10822.453755: p_zpl_evict_inode_0: (zpl_evict_inode+0x0/0x60 [zfs]) inode=0xffff88011aa90650 z_iput-23904 [006] d... 10822.453756: p_zfs_inactive_0: (zfs_inactive+0x0/0x270 [zfs]) inode=0xffff88011aa90650 z_iput-23904 [006] d... 10822.453757: p_zfs_zinactive_0: (zfs_zinactive+0x0/0xe0 [zfs]) znode=0xffff88011aa90440 obj=0xc z_iput-23904 [006] d... 10822.453759: p_zfs_rmnode_0: (zfs_rmnode+0x0/0x360 [zfs]) znode=0xffff88011aa90440
$ echo 2 | sudo tee /proc/sys/vm/drop_caches 2 <...>-23945 [005] d... 10836.555639: p_dispose_list_0: (dispose_list+0x0/0x50) <...>-23945 [005] d... 10836.555775: p_dispose_list_0: (dispose_list+0x0/0x50) <...>-23945 [005] d... 10836.560865: p_dispose_list_0: (dispose_list+0x0/0x50) <...>-23945 [005] d... 10836.560993: p_dispose_list_0: (dispose_list+0x0/0x50) <...>-23945 [005] d... 10836.567297: p_dispose_list_0: (dispose_list+0x0/0x50) <...>-23945 [005] d... 10836.567371: p_dispose_list_0: (dispose_list+0x0/0x50)
Fix Change Details
------------------
(Compare with comment #3)
The xattr dir/child inodes are evicted/disposed
immediately on file removal, not on shrinker.
$ touch /zfs/file
<.. .>-23940 [006] d... 10808.746798: p_zfs_mknode_0: (zfs_mknode+ 0x0/0xe00 [zfs]) flag=0x0 dzp=0xffff88011 aa94400
<.. .>-23940 [006] d... 10808.746925: p_zfs_znode_ alloc_0: (zfs_znode_ alloc+0x0/ 0x520 [zfs]) obj=0xa
<.. .>-23940 [006] d... 10808.746938: r_zfs_znode_ alloc_0: (zfs_mknode+ 0x8a3/0xe00 [zfs] <- zfs_znode_alloc) zpp=0xffff88011 aa90880
$ setfattr -n user.debug -v 1 /zfs/file
<.. .>-23941 [006] d... 10818.945733: p_zfs_mknode_0: (zfs_mknode+ 0x0/0xe00 [zfs]) flag=0x2 dzp=0xffff88011 aa90880
<.. .>-23941 [006] d... 10818.945892: p_zfs_znode_ alloc_0: (zfs_znode_ alloc+0x0/ 0x520 [zfs]) obj=0xb
<.. .>-23941 [006] d... 10818.945905: r_zfs_znode_ alloc_0: (zfs_mknode+ 0x8a3/0xe00 [zfs] <- zfs_znode_alloc) zpp=0xffff88011 aa961c0
<.. .>-23941 [006] d... 10818.945925: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff88001 6f00000 obj=0xa
setfattr- 23941 [006] d... 10818.945929: r_zfs_zget_0: (zfs_zaccess+ 0x12b/0x220 [zfs] <- zfs_zget)
setfattr- 23941 [006] d... 10818.945933: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff88001 6f00000 obj=0xa
setfattr- 23941 [006] d... 10818.945936: r_zfs_zget_0: (zfs_zaccess+ 0x12b/0x220 [zfs] <- zfs_zget)
setfattr- 23941 [006] d... 10818.945948: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff88001 6f00000 obj=0xa
setfattr- 23941 [006] d... 10818.945951: r_zfs_zget_0: (zfs_zaccess+ 0x12b/0x220 [zfs] <- zfs_zget)
setfattr- 23941 [006] d... 10818.945966: p_zfs_mknode_0: (zfs_mknode+ 0x0/0xe00 [zfs]) flag=0x0 dzp=0xffff88011 aa961c0
setfattr- 23941 [006] d... 10818.945990: p_zfs_znode_ alloc_0: (zfs_znode_ alloc+0x0/ 0x520 [zfs]) obj=0xc
setfattr- 23941 [006] d... 10818.945996: r_zfs_znode_ alloc_0: (zfs_mknode+ 0x8a3/0xe00 [zfs] <- zfs_znode_alloc) zpp=0xffff88011 aa90440
$ rm /zfs/file
<.. .>-23942 [006] d... 10822.453456: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff88001 6f00000 obj=0xa
<.. .>-23942 [006] d... 10822.453469: r_zfs_zget_0: (zfs_dirent_ lock+0x56c/ 0x6c0 [zfs] <- zfs_zget)
rm-23942 [006] d... 10822.453494: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff88001 6f00000 obj=0xb
rm-23942 [006] d... 10822.453498: r_zfs_zget_0: (zfs_remove+ 0x22b/0x4c0 [zfs] <- zfs_zget)
rm-23942 [006] d... 10822.453597: p_zpl_evict_ inode_0: (zpl_evict_ inode+0x0/ 0x60 [zfs]) inode=0xffff880 11aa90a90
rm-23942 [006] d... 10822.453602: p_zfs_inactive_0: (zfs_inactive+ 0x0/0x270 [zfs]) inode=0xffff880 11aa90a90
rm-23942 [006] d... 10822.453603: p_zfs_zinactive_0: (zfs_zinactive+ 0x0/0xe0 [zfs]) znode=0xffff880 11aa90880 obj=0xa
rm-23942 [006] d... 10822.453607: p_zfs_rmnode_0: (zfs_rmnode+ 0x0/0x360 [zfs]) znode=0xffff880 11aa90880
rm-23942 [006] d... 10822.453619: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff88001 6f00000 obj=0xb
rm-23942 [006] d... 10822.453623: r_zfs_zget_0: (zfs_rmnode+ 0x25b/0x360 [zfs] <- zfs_zget)
rm-23942 [006] d... 10822.453656: p_zfs_iput_async_0: (zfs_iput_ async+0x0/ 0x60 [zfs]) inode=0xffff880 11aa963d0 obj=0x0
z_iput- 23904 [006] d... 10822.453675: p_zpl_evict_ inode_0: (zpl_evict_ inode+0x0/ 0x60 [zfs]) inode=0xffff880 11aa963d0
z_iput- 23904 [006] d... 10822.453676: p_zfs_inactive_0: (zfs_inactive+ 0x0/0x270 [zfs]) inode=0xffff880 11aa963d0
z_iput- 23904 [006] d... 10822.453677: p_zfs_zinactive_0: (zfs_zinactive+ 0x0/0xe0 [zfs]) znode=0xffff880 11aa961c0 obj=0xb
z_iput- 23904 [006] d... 10822.453679: p_zfs_rmnode_0: (zfs_rmnode+ 0x0/0x360 [zfs]) znode=0xffff880 11aa961c0
z_iput- 23904 [006] d... 10822.453681: p_zfs_purgedir_0: (zfs_purgedir+ 0x0/0x230 [zfs]) znode=0xffff880 11aa961c0
z_iput- 23904 [006] d... 10822.453686: p_zfs_zget_0: (zfs_zget+0x0/0x230 [zfs]) zsb=0xffff88001 6f00000 obj=0xc
z_iput- 23904 [006] d... 10822.453690: r_zfs_zget_0: (zfs_purgedir+ 0xb4/0x230 [zfs] <- zfs_zget)
z_iput- 23904 [006] d... 10822.453713: p_zfs_iput_async_0: (zfs_iput_ async+0x0/ 0x60 [zfs]) inode=0xffff880 11aa90650 obj=0x0
z_iput- 23904 [006] d... 10822.453719: r_zfs_purgedir_0: (zfs_rmnode+ 0x272/0x360 [zfs] <- zfs_purgedir)
z_iput- 23904 [006] d... 10822.453755: p_zpl_evict_ inode_0: (zpl_evict_ inode+0x0/ 0x60 [zfs]) inode=0xffff880 11aa90650
z_iput- 23904 [006] d... 10822.453756: p_zfs_inactive_0: (zfs_inactive+ 0x0/0x270 [zfs]) inode=0xffff880 11aa90650
z_iput- 23904 [006] d... 10822.453757: p_zfs_zinactive_0: (zfs_zinactive+ 0x0/0xe0 [zfs]) znode=0xffff880 11aa90440 obj=0xc
z_iput- 23904 [006] d... 10822.453759: p_zfs_rmnode_0: (zfs_rmnode+ 0x0/0x360 [zfs]) znode=0xffff880 11aa90440
$ echo 2 | sudo tee /proc/sys/ vm/drop_ caches
<.. .>-23945 [005] d... 10836.555639: p_dispose_list_0: (dispose_ list+0x0/ 0x50)
<.. .>-23945 [005] d... 10836.555775: p_dispose_list_0: (dispose_ list+0x0/ 0x50)
<.. .>-23945 [005] d... 10836.560865: p_dispose_list_0: (dispose_ list+0x0/ 0x50)
<.. .>-23945 [005] d... 10836.560993: p_dispose_list_0: (dispose_ list+0x0/ 0x50)
<.. .>-23945 [005] d... 10836.567297: p_dispose_list_0: (dispose_ list+0x0/ 0x50)
<.. .>-23945 [005] d... 10836.567371: p_dispose_list_0: (dispose_ list+0x0/ 0x50)
2