All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][exofs] locking for sbi->s_nextid?
@ 2015-12-05 23:56 Al Viro
  2015-12-06 16:07 ` Boaz Harrosh
  0 siblings, 1 reply; 2+ messages in thread
From: Al Viro @ 2015-12-05 23:56 UTC (permalink / raw)
  To: Boaz Harrosh; +Cc: osd-dev, linux-fsdevel

	Looks like exofs_new_inode() does this

        inode->i_ino = sbi->s_nextid++;

without any locking; sure, the parent directory is locked, but that's not
worth much on a filesystem that supports mkdir()...  Am I missing something
subtle here?  Another question in the code nearby:

        ret = ore_get_io_state(&sbi->layout, &oi->oc, &ios);
        if (unlikely(ret)) {
                EXOFS_ERR("exofs_new_inode: ore_get_io_state failed\n");
                return ERR_PTR(ret);
        }

aren't we leaking a struct inode here?  Path around ore_create() is
also interesting - looks like its failure causes a leak (at least if
it happens early on)...

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [RFC][exofs] locking for sbi->s_nextid?
  2015-12-05 23:56 [RFC][exofs] locking for sbi->s_nextid? Al Viro
@ 2015-12-06 16:07 ` Boaz Harrosh
  0 siblings, 0 replies; 2+ messages in thread
From: Boaz Harrosh @ 2015-12-06 16:07 UTC (permalink / raw)
  To: Al Viro; +Cc: osd-dev, linux-fsdevel

On 12/06/2015 01:56 AM, Al Viro wrote:
> 	Looks like exofs_new_inode() does this
> 
>         inode->i_ino = sbi->s_nextid++;
> 
> without any locking; sure, the parent directory is locked, but that's not
> worth much on a filesystem that supports mkdir()...  Am I missing something
> subtle here?  

Yes I guess you are right. What bugs me is why this never failed. I mean
on a 64 bit system, why I never get a duplicate ino?

But I guess I should change this to an atomic.

> Another question in the code nearby:
> 
>         ret = ore_get_io_state(&sbi->layout, &oi->oc, &ios);
>         if (unlikely(ret)) {
>                 EXOFS_ERR("exofs_new_inode: ore_get_io_state failed\n");
>                 return ERR_PTR(ret);
>         }
> 
> aren't we leaking a struct inode here?  Path around ore_create() is
> also interesting - looks like its failure causes a leak (at least if
> it happens early on)...
> 

Yes I'm afraid you are absolutely right. Just to show how much attention
this toy lab FS ever got. All ore_get_io_state needs to to fail is an OOM.
So this was never heavily tested right?

I'll see if I have some time to fix both. Just for the fun

Thanks Al
Boaz


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-12-06 16:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-05 23:56 [RFC][exofs] locking for sbi->s_nextid? Al Viro
2015-12-06 16:07 ` Boaz Harrosh

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.