That, AFAICS, fixes a real bug.  Applied, and it needs Cc:stable as well.

> Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>
> ---
>  fs/orangefs/super.c |    9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> --- a/fs/orangefs/super.c
> +++ b/fs/orangefs/super.c
> @@ -115,6 +115,13 @@ static struct inode *orangefs_alloc_inod
>       return &orangefs_inode->vfs_inode;
>  }
>  
> +static void orangefs_i_callback(struct rcu_head *head)
> +{
> +     struct inode *inode = container_of(head, struct inode, i_rcu);
> +     struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
> +     kmem_cache_free(orangefs_inode_cache, orangefs_inode);
> +}
> +
>  static void orangefs_destroy_inode(struct inode *inode)
>  {
>       struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
> @@ -123,7 +130,7 @@ static void orangefs_destroy_inode(struc
>                       "%s: deallocated %p destroying inode %pU\n",
>                       __func__, orangefs_inode, get_khandle_from_ino(inode));
>  
> -     kmem_cache_free(orangefs_inode_cache, orangefs_inode);
> +     call_rcu(&inode->i_rcu, orangefs_i_callback);
>  }
>  
>  /*
> 
> 

Reply via email to