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 <[email protected]>

thanks,
-liubo
> 
> Signed-off-by: Vivek Goyal <[email protected]>
> ---
>  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
> [email protected]
> https://www.redhat.com/mailman/listinfo/virtio-fs

Reply via email to