Re: [PATCH 1/1] fuse: Make atomic_open use negative d_entry

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Bernd,

Thank you for taking time to review this issue.

I'm writing to inquire about any recent updates or plans for atomic
open threads?
It will help a lot if the negative d_entry issue could be solved.

Best,
Yuan

On Mon, Feb 19, 2024 at 8:37 PM Bernd Schubert
<bernd.schubert@xxxxxxxxxxx> wrote:
>
>
>
> On 2/9/24 08:46, Yuan Yao wrote:
> > Hi Bernd,
> >
> > Thank you for taking a look at this patch! I appreciate it a lot for
> > adding this patch to the next version. However, I just found that
> > there’s a bug with my patch. The *BUG_ON(!d_unhashed(dentry));* in
> > d_splice_alias() function will be triggered when doing the parallel
> > lookup on a non-exist file.
> >
> >> struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry)
> >> {
> >>    if (IS_ERR(inode))
> >>        return ERR_CAST(inode);
> >>
> >>    BUG_ON(!d_unhashed(dentry));
> >
> > This bug can be easily reproduced by adding 3 seconds sleep in fuse
> > server’s atomic_open handler, and execute the following commands in
> > fuse filesystem:
> > cat non-exist-file &
> > cat non-exist-file &
> >
> > I think this bug can be addressed by following two approaches:
> >
> > 1. adding check for d_in_lookup(entry)
> > -----------------------------------------------------------------------
> >        if (outentry.entry_valid) {
> > +            if (d_in_lookup(entry)) {
> >                 inode = NULL;
> >                 d_splice_alias(inode, entry);
> >                fuse_change_entry_timeout(entry, &outentry);
> > +          }
> >             goto free_and_no_open;
> >         }
> >
> > 2. adding d_drop(entry)
> > -----------------------------------------------------------------------
> >         if (outentry.entry_valid) {
> >              inode = NULL;
> > +           d_drop(entry)
> >              d_splice_alias(inode, entry);
> >              fuse_change_entry_timeout(entry, &outentry);
> >             goto free_and_no_open;
> >         }
> >
> > But I'm not so sure which one is preferable, or maybe the handling
> > should be elsewhere?
> >
>
> Sorry for my terribly late reply, will look into it in the evening.
>
>
> Thanks,
> Bernd





[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux