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
