[Virtio-fs] [PATCH 1/3] Use helper function to get forget requests from fuse

Liu Bo bo.liu at linux.alibaba.com
Wed Jun 5 18:16:23 UTC 2019


On Fri, May 31, 2019 at 02:57:07PM -0400, Vivek Goyal wrote:
> stacked file systems like virtio-fs do not have to play directly with
> forget list data structures. There is a helper function use that instead.
> 
> Rename dequeue_forget() to fuse_dequeue_forget() and export it so that
> stacked filesystems can use it.

Reviewed-by: Liu Bo <bo.liu at linux.alibaba.com>

thanks,
-liubo
> 
> Signed-off-by: Vivek Goyal <vgoyal at redhat.com>
> ---
>  fs/fuse/dev.c       | 9 +++++----
>  fs/fuse/fuse_i.h    | 3 +++
>  fs/fuse/virtio_fs.c | 7 +------
>  3 files changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
> index ee9dd38bc0f0..39da7ec19fa2 100644
> --- a/fs/fuse/dev.c
> +++ b/fs/fuse/dev.c
> @@ -1203,7 +1203,7 @@ __releases(fiq->waitq.lock)
>  	return err ? err : reqsize;
>  }
>  
> -static struct fuse_forget_link *dequeue_forget(struct fuse_iqueue *fiq,
> +struct fuse_forget_link *fuse_dequeue_forget(struct fuse_iqueue *fiq,
>  					       unsigned max,
>  					       unsigned *countp)
>  {
> @@ -1224,6 +1224,7 @@ static struct fuse_forget_link *dequeue_forget(struct fuse_iqueue *fiq,
>  
>  	return head;
>  }
> +EXPORT_SYMBOL(fuse_dequeue_forget);
>  
>  static int fuse_read_single_forget(struct fuse_iqueue *fiq,
>  				   struct fuse_copy_state *cs,
> @@ -1231,7 +1232,7 @@ static int fuse_read_single_forget(struct fuse_iqueue *fiq,
>  __releases(fiq->waitq.lock)
>  {
>  	int err;
> -	struct fuse_forget_link *forget = dequeue_forget(fiq, 1, NULL);
> +	struct fuse_forget_link *forget = fuse_dequeue_forget(fiq, 1, NULL);
>  	struct fuse_forget_in arg = {
>  		.nlookup = forget->forget_one.nlookup,
>  	};
> @@ -1279,7 +1280,7 @@ __releases(fiq->waitq.lock)
>  	}
>  
>  	max_forgets = (nbytes - ih.len) / sizeof(struct fuse_forget_one);
> -	head = dequeue_forget(fiq, max_forgets, &count);
> +	head = fuse_dequeue_forget(fiq, max_forgets, &count);
>  	spin_unlock(&fiq->waitq.lock);
>  
>  	arg.count = count;
> @@ -2249,7 +2250,7 @@ void fuse_abort_conn(struct fuse_conn *fc)
>  			clear_bit(FR_PENDING, &req->flags);
>  		list_splice_tail_init(&fiq->pending, &to_end);
>  		while (forget_pending(fiq))
> -			kfree(dequeue_forget(fiq, 1, NULL));
> +			kfree(fuse_dequeue_forget(fiq, 1, NULL));
>  		wake_up_all_locked(&fiq->waitq);
>  		spin_unlock(&fiq->waitq.lock);
>  		kill_fasync(&fiq->fasync, SIGIO, POLL_IN);
> diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
> index 7ac7f9a0b81b..ad8272c98c82 100644
> --- a/fs/fuse/fuse_i.h
> +++ b/fs/fuse/fuse_i.h
> @@ -972,6 +972,9 @@ void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget,
>  
>  struct fuse_forget_link *fuse_alloc_forget(void);
>  
> +struct fuse_forget_link *fuse_dequeue_forget(struct fuse_iqueue *fiq,
> +					     unsigned max, unsigned *countp);
> +
>  /* Used by READDIRPLUS */
>  void fuse_force_forget(struct file *file, u64 nodeid);
>  
> diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c
> index 18fc0dca0abc..cbda7ebd5bf9 100644
> --- a/fs/fuse/virtio_fs.c
> +++ b/fs/fuse/virtio_fs.c
> @@ -697,12 +697,7 @@ __releases(fiq->waitq.lock)
>  	u64 unique;
>  	int ret;
>  
> -	BUG_ON(!fiq->forget_list_head.next);
> -	link = fiq->forget_list_head.next;
> -	BUG_ON(link->next);
> -	fiq->forget_list_head.next = NULL;
> -	fiq->forget_list_tail = &fiq->forget_list_head;
> -
> +	link = fuse_dequeue_forget(fiq, 1, NULL);
>  	unique = fuse_get_unique(fiq);
>  
>  	fs = fiq->priv;
> -- 
> 2.20.1
> 
> _______________________________________________
> Virtio-fs mailing list
> Virtio-fs at redhat.com
> https://www.redhat.com/mailman/listinfo/virtio-fs




More information about the Virtio-fs mailing list