Merge tag 'upstream-4.11-rc7' of git://git.infradead.org/linux-ubifs

Pull UBI/UBIFS fixes from Richard Weinberger:
"This contains fixes for issues in both UBI and UBIFS:

- more O_TMPFILE fallout

- RENAME_WHITEOUT regression due to a mis-merge

- memory leak in ubifs_mknod()

- power-cut problem in UBI's update volume feature"

* tag 'upstream-4.11-rc7' of git://git.infradead.org/linux-ubifs:
ubifs: Fix O_TMPFILE corner case in ubifs_link()
ubifs: Fix RENAME_WHITEOUT support
ubifs: Fix debug messages for an invalid filename in ubifs_dump_inode
ubifs: Fix debug messages for an invalid filename in ubifs_dump_node
ubifs: Remove filename from debug messages in ubifs_readdir
ubifs: Fix memory leak in error path in ubifs_mknod
ubi/upd: Always flush after prepared for an update

Changed files
+23 -13
drivers
mtd
ubi
fs
ubifs
+4 -4
drivers/mtd/ubi/upd.c
··· 148 148 return err; 149 149 } 150 150 151 - if (bytes == 0) { 152 - err = ubi_wl_flush(ubi, UBI_ALL, UBI_ALL); 153 - if (err) 154 - return err; 151 + err = ubi_wl_flush(ubi, UBI_ALL, UBI_ALL); 152 + if (err) 153 + return err; 155 154 155 + if (bytes == 0) { 156 156 err = clear_update_marker(ubi, vol, 0); 157 157 if (err) 158 158 return err;
+7 -3
fs/ubifs/debug.c
··· 32 32 #include <linux/math64.h> 33 33 #include <linux/uaccess.h> 34 34 #include <linux/random.h> 35 + #include <linux/ctype.h> 35 36 #include "ubifs.h" 36 37 37 38 static DEFINE_SPINLOCK(dbg_lock); ··· 287 286 break; 288 287 } 289 288 290 - pr_err("\t%d: %s (%s)\n", 291 - count++, dent->name, get_dent_type(dent->type)); 289 + pr_err("\t%d: inode %llu, type %s, len %d\n", 290 + count++, (unsigned long long) le64_to_cpu(dent->inum), 291 + get_dent_type(dent->type), 292 + le16_to_cpu(dent->nlen)); 292 293 293 294 fname_name(&nm) = dent->name; 294 295 fname_len(&nm) = le16_to_cpu(dent->nlen); ··· 467 464 pr_err("(bad name length, not printing, bad or corrupted node)"); 468 465 else { 469 466 for (i = 0; i < nlen && dent->name[i]; i++) 470 - pr_cont("%c", dent->name[i]); 467 + pr_cont("%c", isprint(dent->name[i]) ? 468 + dent->name[i] : '?'); 471 469 } 472 470 pr_cont("\n"); 473 471
+12 -6
fs/ubifs/dir.c
··· 606 606 } 607 607 608 608 while (1) { 609 - dbg_gen("feed '%s', ino %llu, new f_pos %#x", 610 - dent->name, (unsigned long long)le64_to_cpu(dent->inum), 609 + dbg_gen("ino %llu, new f_pos %#x", 610 + (unsigned long long)le64_to_cpu(dent->inum), 611 611 key_hash_flash(c, &dent->key)); 612 612 ubifs_assert(le64_to_cpu(dent->ch.sqnum) > 613 613 ubifs_inode(dir)->creat_sqnum); ··· 748 748 goto out_fname; 749 749 750 750 lock_2_inodes(dir, inode); 751 + 752 + /* Handle O_TMPFILE corner case, it is allowed to link a O_TMPFILE. */ 753 + if (inode->i_nlink == 0) 754 + ubifs_delete_orphan(c, inode->i_ino); 755 + 751 756 inc_nlink(inode); 752 757 ihold(inode); 753 758 inode->i_ctime = ubifs_current_time(inode); ··· 773 768 dir->i_size -= sz_change; 774 769 dir_ui->ui_size = dir->i_size; 775 770 drop_nlink(inode); 771 + if (inode->i_nlink == 0) 772 + ubifs_add_orphan(c, inode->i_ino); 776 773 unlock_2_inodes(dir, inode); 777 774 ubifs_release_budget(c, &req); 778 775 iput(inode); ··· 1075 1068 } 1076 1069 1077 1070 err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm); 1078 - if (err) 1071 + if (err) { 1072 + kfree(dev); 1079 1073 goto out_budg; 1074 + } 1080 1075 1081 1076 sz_change = CALC_DENT_SIZE(fname_len(&nm)); 1082 1077 ··· 1324 1315 struct timespec time; 1325 1316 unsigned int uninitialized_var(saved_nlink); 1326 1317 struct fscrypt_name old_nm, new_nm; 1327 - 1328 - if (flags & ~RENAME_NOREPLACE) 1329 - return -EINVAL; 1330 1318 1331 1319 /* 1332 1320 * Budget request settings: deletion direntry, new direntry, removing