On Tue 29-12-20 17:02:08, yangerkun wrote: > ext4_rename will create a special inode for whiteout and use this 'ino' > to replace the source file's dir entry 'ino'. Once error happens > latter(small ext4 img, and consume all space, so the rename with dst > path not exist will fail due to the ENOSPC return from ext4_add_entry in > ext4_rename), the cleanup do drop the nlink for whiteout, but forget to > restore 'ino' with source file. This will lead to "deleted inode > referenced". > > Signed-off-by: yangerkun <yangerkun@xxxxxxxxxx> Thanks for the patch! It looks mostly good, just one comment below: > end_rename: > - brelse(old.dir_bh); > - brelse(old.bh); > - brelse(new.bh); > if (whiteout) { > + ext4_setent(handle, &old, > + old.inode->i_ino, old_file_type); I'm wondering here - how is it correct to reset the 'old' entry whenever whiteout != NULL? I'd expect this to be guarded by the if (retval) check... Honza > if (retval) > drop_nlink(whiteout); > unlock_new_inode(whiteout); > iput(whiteout); > } > + brelse(old.dir_bh); > + brelse(old.bh); > + brelse(new.bh); > if (handle) > ext4_journal_stop(handle); > return retval; > -- > 2.25.4 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR