lkml.org 
[lkml]   [2017]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] ubifs: Fix O_TMPFILE corner case in ubifs_link()
    From
    Date
    On 30/03/17 13:23, Richard Weinberger wrote:
    > Am 30.03.2017 um 11:49 schrieb Richard Weinberger:
    >> Am 30.03.2017 um 11:32 schrieb Adrian Hunter:
    >>>> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
    >>>> index 0858213a4e63..0139155045fe 100644
    >>>> --- a/fs/ubifs/dir.c
    >>>> +++ b/fs/ubifs/dir.c
    >>>> @@ -748,6 +748,11 @@ static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
    >>>> goto out_fname;
    >>>>
    >>>> lock_2_inodes(dir, inode);
    >>>> +
    >>>> + /* Handle O_TMPFILE corner case, it is allowed to link a O_TMPFILE. */
    >>>> + if (inode->i_nlink == 0)
    >>>> + ubifs_delete_orphan(c, inode->i_ino);
    >>>
    >>> Isn't there also a deletion inode in the journal? If the recovery sees that
    >>> won't it delete the file data?
    >>
    >> Yes, but ubifs_link() adds a new journal entry which revives the inode.
    >> This should cancel out the deletion, right?
    >> You know the UBIFS journal better than I do. :-)
    >
    > Reading deeper into the proved that I was wrong.
    > AFAIKT UBIFS' journal has currently no way to revive a deleted inode.
    > So, we have to think about a new solution.

    Deleting the orphan looks right. Just need to understand whether the
    recovery would do the right thing - actually it looks like O_TMPFILE might
    be OK and in other case we might be failing to remove nodes with sequence
    numbers greater than the deletion inode.

    \
     
     \ /
      Last update: 2017-03-30 14:04    [W:3.497 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site