mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
linux 6.7 compat: handle superblock shrinker member change
In 6.7 the superblock shrinker member s_shrink has changed from being an embedded struct to a pointer. Detect this, and don't take a reference if it already is one. Signed-off-by: Rob Norris <robn@despairlabs.com> Sponsored-by: https://github.com/sponsors/robn
This commit is contained in:
committed by
Brian Behlendorf
parent
3c13601a12
commit
18a9185165
@@ -1240,12 +1240,18 @@ zfs_prune_aliases(zfsvfs_t *zfsvfs, unsigned long nr_to_scan)
|
||||
* and inode caches. This can occur when the ARC needs to free meta data
|
||||
* blocks but can't because they are all pinned by entries in these caches.
|
||||
*/
|
||||
#if defined(HAVE_SUPER_BLOCK_S_SHRINK)
|
||||
#define S_SHRINK(sb) (&(sb)->s_shrink)
|
||||
#elif defined(HAVE_SUPER_BLOCK_S_SHRINK_PTR)
|
||||
#define S_SHRINK(sb) ((sb)->s_shrink)
|
||||
#endif
|
||||
|
||||
int
|
||||
zfs_prune(struct super_block *sb, unsigned long nr_to_scan, int *objects)
|
||||
{
|
||||
zfsvfs_t *zfsvfs = sb->s_fs_info;
|
||||
int error = 0;
|
||||
struct shrinker *shrinker = &sb->s_shrink;
|
||||
struct shrinker *shrinker = S_SHRINK(sb);
|
||||
struct shrink_control sc = {
|
||||
.nr_to_scan = nr_to_scan,
|
||||
.gfp_mask = GFP_KERNEL,
|
||||
@@ -1257,7 +1263,7 @@ zfs_prune(struct super_block *sb, unsigned long nr_to_scan, int *objects)
|
||||
#if defined(HAVE_SPLIT_SHRINKER_CALLBACK) && \
|
||||
defined(SHRINK_CONTROL_HAS_NID) && \
|
||||
defined(SHRINKER_NUMA_AWARE)
|
||||
if (sb->s_shrink.flags & SHRINKER_NUMA_AWARE) {
|
||||
if (shrinker->flags & SHRINKER_NUMA_AWARE) {
|
||||
*objects = 0;
|
||||
for_each_online_node(sc.nid) {
|
||||
*objects += (*shrinker->scan_objects)(shrinker, &sc);
|
||||
|
||||
Reference in New Issue
Block a user