On Tue, Sep 10, 2024 at 11:43:57PM +0000, Ackerley Tng wrote:
> @@ -1079,12 +1152,20 @@ static struct inode 
> *kvm_gmem_inode_make_secure_inode(const char *name,
>       if (err)
>               goto out;
>  
> +     err = -ENOMEM;
> +     private = kzalloc(sizeof(*private), GFP_KERNEL);
> +     if (!private)
> +             goto out;
> +
>       if (flags & KVM_GUEST_MEMFD_HUGETLB) {
> -             err = kvm_gmem_hugetlb_setup(inode, size, flags);
> +             err = kvm_gmem_hugetlb_setup(inode, private, size, flags);
>               if (err)
> -                     goto out;
> +                     goto free_private;
>       }
>  
> +     xa_init(&private->faultability);
> +     inode->i_mapping->i_private_data = private;
> +
>       inode->i_private = (void *)(unsigned long)flags;

Looks like inode->i_private isn't used before this series; the flags was
always zero before anyway.  Maybe it could keep kvm_gmem_inode_private
instead? Then make the flags be part of the struct.

It avoids two separate places (inode->i_mapping->i_private_data,
inode->i_private) to store gmem private info.

>       inode->i_op = &kvm_gmem_iops;
>       inode->i_mapping->a_ops = &kvm_gmem_aops;
> @@ -1097,6 +1178,8 @@ static struct inode 
> *kvm_gmem_inode_make_secure_inode(const char *name,
>  
>       return inode;
>  
> +free_private:
> +     kfree(private);
>  out:
>       iput(inode);
>  
> -- 
> 2.46.0.598.g6f2099f65c-goog
> 

-- 
Peter Xu


Reply via email to