mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
38 lines
834 B
C
38 lines
834 B
C
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
/*
|
||
|
* Copyright (C) 2022, Alibaba Cloud
|
||
|
*/
|
||
|
#include <linux/fscache.h>
|
||
|
#include "internal.h"
|
||
|
|
||
|
int erofs_fscache_register_fs(struct super_block *sb)
|
||
|
{
|
||
|
struct erofs_sb_info *sbi = EROFS_SB(sb);
|
||
|
struct fscache_volume *volume;
|
||
|
char *name;
|
||
|
int ret = 0;
|
||
|
|
||
|
name = kasprintf(GFP_KERNEL, "erofs,%s", sbi->opt.fsid);
|
||
|
if (!name)
|
||
|
return -ENOMEM;
|
||
|
|
||
|
volume = fscache_acquire_volume(name, NULL, NULL, 0);
|
||
|
if (IS_ERR_OR_NULL(volume)) {
|
||
|
erofs_err(sb, "failed to register volume for %s", name);
|
||
|
ret = volume ? PTR_ERR(volume) : -EOPNOTSUPP;
|
||
|
volume = NULL;
|
||
|
}
|
||
|
|
||
|
sbi->volume = volume;
|
||
|
kfree(name);
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
void erofs_fscache_unregister_fs(struct super_block *sb)
|
||
|
{
|
||
|
struct erofs_sb_info *sbi = EROFS_SB(sb);
|
||
|
|
||
|
fscache_relinquish_volume(sbi->volume, NULL, false);
|
||
|
sbi->volume = NULL;
|
||
|
}
|