diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx5/mr.c')
| -rw-r--r-- | drivers/infiniband/hw/mlx5/mr.c | 34 | 
1 files changed, 22 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c index 2046a6987453..8ab2f1360a45 100644 --- a/drivers/infiniband/hw/mlx5/mr.c +++ b/drivers/infiniband/hw/mlx5/mr.c @@ -582,6 +582,15 @@ static void clean_keys(struct mlx5_ib_dev *dev, int c)  	}  } +static void mlx5_mr_cache_debugfs_cleanup(struct mlx5_ib_dev *dev) +{ +	if (!mlx5_debugfs_root) +		return; + +	debugfs_remove_recursive(dev->cache.root); +	dev->cache.root = NULL; +} +  static int mlx5_mr_cache_debugfs_init(struct mlx5_ib_dev *dev)  {  	struct mlx5_mr_cache *cache = &dev->cache; @@ -600,38 +609,34 @@ static int mlx5_mr_cache_debugfs_init(struct mlx5_ib_dev *dev)  		sprintf(ent->name, "%d", ent->order);  		ent->dir = debugfs_create_dir(ent->name,  cache->root);  		if (!ent->dir) -			return -ENOMEM; +			goto err;  		ent->fsize = debugfs_create_file("size", 0600, ent->dir, ent,  						 &size_fops);  		if (!ent->fsize) -			return -ENOMEM; +			goto err;  		ent->flimit = debugfs_create_file("limit", 0600, ent->dir, ent,  						  &limit_fops);  		if (!ent->flimit) -			return -ENOMEM; +			goto err;  		ent->fcur = debugfs_create_u32("cur", 0400, ent->dir,  					       &ent->cur);  		if (!ent->fcur) -			return -ENOMEM; +			goto err;  		ent->fmiss = debugfs_create_u32("miss", 0600, ent->dir,  						&ent->miss);  		if (!ent->fmiss) -			return -ENOMEM; +			goto err;  	}  	return 0; -} - -static void mlx5_mr_cache_debugfs_cleanup(struct mlx5_ib_dev *dev) -{ -	if (!mlx5_debugfs_root) -		return; +err: +	mlx5_mr_cache_debugfs_cleanup(dev); -	debugfs_remove_recursive(dev->cache.root); +	return -ENOMEM;  }  static void delay_time_func(unsigned long ctx) @@ -692,6 +697,11 @@ int mlx5_mr_cache_init(struct mlx5_ib_dev *dev)  	if (err)  		mlx5_ib_warn(dev, "cache debugfs failure\n"); +	/* +	 * We don't want to fail driver if debugfs failed to initialize, +	 * so we are not forwarding error to the user. +	 */ +  	return 0;  }  | 
