mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 06:10:53 +07:00
fuse: Convert to separately allocated bdi
Allocate struct backing_dev_info separately instead of embedding it inside the superblock. This unifies handling of bdi among users. CC: Miklos Szeredi <miklos@szeredi.hu> CC: linux-fsdevel@vger.kernel.org Acked-by: Miklos Szeredi <mszeredi@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
c7f014771b
commit
5f7f7543f5
@ -383,8 +383,8 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
|
|||||||
|
|
||||||
if (fc->num_background == fc->congestion_threshold &&
|
if (fc->num_background == fc->congestion_threshold &&
|
||||||
fc->connected && fc->bdi_initialized) {
|
fc->connected && fc->bdi_initialized) {
|
||||||
clear_bdi_congested(&fc->bdi, BLK_RW_SYNC);
|
clear_bdi_congested(fc->sb->s_bdi, BLK_RW_SYNC);
|
||||||
clear_bdi_congested(&fc->bdi, BLK_RW_ASYNC);
|
clear_bdi_congested(fc->sb->s_bdi, BLK_RW_ASYNC);
|
||||||
}
|
}
|
||||||
fc->num_background--;
|
fc->num_background--;
|
||||||
fc->active_background--;
|
fc->active_background--;
|
||||||
@ -575,8 +575,8 @@ void fuse_request_send_background_locked(struct fuse_conn *fc,
|
|||||||
fc->blocked = 1;
|
fc->blocked = 1;
|
||||||
if (fc->num_background == fc->congestion_threshold &&
|
if (fc->num_background == fc->congestion_threshold &&
|
||||||
fc->bdi_initialized) {
|
fc->bdi_initialized) {
|
||||||
set_bdi_congested(&fc->bdi, BLK_RW_SYNC);
|
set_bdi_congested(fc->sb->s_bdi, BLK_RW_SYNC);
|
||||||
set_bdi_congested(&fc->bdi, BLK_RW_ASYNC);
|
set_bdi_congested(fc->sb->s_bdi, BLK_RW_ASYNC);
|
||||||
}
|
}
|
||||||
list_add_tail(&req->list, &fc->bg_queue);
|
list_add_tail(&req->list, &fc->bg_queue);
|
||||||
flush_bg_queue(fc);
|
flush_bg_queue(fc);
|
||||||
|
@ -631,9 +631,6 @@ struct fuse_conn {
|
|||||||
/** Negotiated minor version */
|
/** Negotiated minor version */
|
||||||
unsigned minor;
|
unsigned minor;
|
||||||
|
|
||||||
/** Backing dev info */
|
|
||||||
struct backing_dev_info bdi;
|
|
||||||
|
|
||||||
/** Entry on the fuse_conn_list */
|
/** Entry on the fuse_conn_list */
|
||||||
struct list_head entry;
|
struct list_head entry;
|
||||||
|
|
||||||
|
@ -386,12 +386,6 @@ static void fuse_send_destroy(struct fuse_conn *fc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fuse_bdi_destroy(struct fuse_conn *fc)
|
|
||||||
{
|
|
||||||
if (fc->bdi_initialized)
|
|
||||||
bdi_destroy(&fc->bdi);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fuse_put_super(struct super_block *sb)
|
static void fuse_put_super(struct super_block *sb)
|
||||||
{
|
{
|
||||||
struct fuse_conn *fc = get_fuse_conn_super(sb);
|
struct fuse_conn *fc = get_fuse_conn_super(sb);
|
||||||
@ -403,7 +397,6 @@ static void fuse_put_super(struct super_block *sb)
|
|||||||
list_del(&fc->entry);
|
list_del(&fc->entry);
|
||||||
fuse_ctl_remove_conn(fc);
|
fuse_ctl_remove_conn(fc);
|
||||||
mutex_unlock(&fuse_mutex);
|
mutex_unlock(&fuse_mutex);
|
||||||
fuse_bdi_destroy(fc);
|
|
||||||
|
|
||||||
fuse_conn_put(fc);
|
fuse_conn_put(fc);
|
||||||
}
|
}
|
||||||
@ -928,7 +921,8 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)
|
|||||||
fc->no_flock = 1;
|
fc->no_flock = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fc->bdi.ra_pages = min(fc->bdi.ra_pages, ra_pages);
|
fc->sb->s_bdi->ra_pages =
|
||||||
|
min(fc->sb->s_bdi->ra_pages, ra_pages);
|
||||||
fc->minor = arg->minor;
|
fc->minor = arg->minor;
|
||||||
fc->max_write = arg->minor < 5 ? 4096 : arg->max_write;
|
fc->max_write = arg->minor < 5 ? 4096 : arg->max_write;
|
||||||
fc->max_write = max_t(unsigned, 4096, fc->max_write);
|
fc->max_write = max_t(unsigned, 4096, fc->max_write);
|
||||||
@ -944,7 +938,7 @@ static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req)
|
|||||||
|
|
||||||
arg->major = FUSE_KERNEL_VERSION;
|
arg->major = FUSE_KERNEL_VERSION;
|
||||||
arg->minor = FUSE_KERNEL_MINOR_VERSION;
|
arg->minor = FUSE_KERNEL_MINOR_VERSION;
|
||||||
arg->max_readahead = fc->bdi.ra_pages * PAGE_SIZE;
|
arg->max_readahead = fc->sb->s_bdi->ra_pages * PAGE_SIZE;
|
||||||
arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC |
|
arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC |
|
||||||
FUSE_EXPORT_SUPPORT | FUSE_BIG_WRITES | FUSE_DONT_MASK |
|
FUSE_EXPORT_SUPPORT | FUSE_BIG_WRITES | FUSE_DONT_MASK |
|
||||||
FUSE_SPLICE_WRITE | FUSE_SPLICE_MOVE | FUSE_SPLICE_READ |
|
FUSE_SPLICE_WRITE | FUSE_SPLICE_MOVE | FUSE_SPLICE_READ |
|
||||||
@ -976,28 +970,21 @@ static void fuse_free_conn(struct fuse_conn *fc)
|
|||||||
static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
|
static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
char *suffix = "";
|
||||||
|
|
||||||
fc->bdi.name = "fuse";
|
if (sb->s_bdev)
|
||||||
fc->bdi.ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_SIZE;
|
suffix = "-fuseblk";
|
||||||
/* fuse does it's own writeback accounting */
|
err = super_setup_bdi_name(sb, "%u:%u%s", MAJOR(fc->dev),
|
||||||
fc->bdi.capabilities = BDI_CAP_NO_ACCT_WB | BDI_CAP_STRICTLIMIT;
|
MINOR(fc->dev), suffix);
|
||||||
|
|
||||||
err = bdi_init(&fc->bdi);
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
sb->s_bdi->ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_SIZE;
|
||||||
|
/* fuse does it's own writeback accounting */
|
||||||
|
sb->s_bdi->capabilities = BDI_CAP_NO_ACCT_WB | BDI_CAP_STRICTLIMIT;
|
||||||
|
|
||||||
fc->bdi_initialized = 1;
|
fc->bdi_initialized = 1;
|
||||||
|
|
||||||
if (sb->s_bdev) {
|
|
||||||
err = bdi_register(&fc->bdi, NULL, "%u:%u-fuseblk",
|
|
||||||
MAJOR(fc->dev), MINOR(fc->dev));
|
|
||||||
} else {
|
|
||||||
err = bdi_register_dev(&fc->bdi, fc->dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For a single fuse filesystem use max 1% of dirty +
|
* For a single fuse filesystem use max 1% of dirty +
|
||||||
* writeback threshold.
|
* writeback threshold.
|
||||||
@ -1010,7 +997,7 @@ static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
|
|||||||
*
|
*
|
||||||
* /sys/class/bdi/<bdi>/max_ratio
|
* /sys/class/bdi/<bdi>/max_ratio
|
||||||
*/
|
*/
|
||||||
bdi_set_max_ratio(&fc->bdi, 1);
|
bdi_set_max_ratio(sb->s_bdi, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1113,8 +1100,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
|
|||||||
if (err)
|
if (err)
|
||||||
goto err_dev_free;
|
goto err_dev_free;
|
||||||
|
|
||||||
sb->s_bdi = &fc->bdi;
|
|
||||||
|
|
||||||
/* Handle umasking inside the fuse code */
|
/* Handle umasking inside the fuse code */
|
||||||
if (sb->s_flags & MS_POSIXACL)
|
if (sb->s_flags & MS_POSIXACL)
|
||||||
fc->dont_mask = 1;
|
fc->dont_mask = 1;
|
||||||
@ -1182,7 +1167,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
|
|||||||
err_dev_free:
|
err_dev_free:
|
||||||
fuse_dev_free(fud);
|
fuse_dev_free(fud);
|
||||||
err_put_conn:
|
err_put_conn:
|
||||||
fuse_bdi_destroy(fc);
|
|
||||||
fuse_conn_put(fc);
|
fuse_conn_put(fc);
|
||||||
err_fput:
|
err_fput:
|
||||||
fput(file);
|
fput(file);
|
||||||
|
Loading…
Reference in New Issue
Block a user