Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull VFS fixes from Al Viro:
"Fixes for this cycle regression in overlayfs and a couple of
long-standing (== all the way back to 2.6.12, at least) bugs"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
freeing unlinked file indefinitely delayed
fix a braino in ovl_d_select_inode()
9p: don't leave a half-initialized inode sitting around

+10 -6
+1 -2
fs/9p/vfs_inode.c
··· 540 540 unlock_new_inode(inode); 541 541 return inode; 542 542 error: 543 - unlock_new_inode(inode); 544 - iput(inode); 543 + iget_failed(inode); 545 544 return ERR_PTR(retval); 546 545 547 546 }
+1 -2
fs/9p/vfs_inode_dotl.c
··· 149 149 unlock_new_inode(inode); 150 150 return inode; 151 151 error: 152 - unlock_new_inode(inode); 153 - iput(inode); 152 + iget_failed(inode); 154 153 return ERR_PTR(retval); 155 154 156 155 }
+5 -2
fs/dcache.c
··· 642 642 643 643 /* 644 644 * If we have a d_op->d_delete() operation, we sould not 645 - * let the dentry count go to zero, so use "put__or_lock". 645 + * let the dentry count go to zero, so use "put_or_lock". 646 646 */ 647 647 if (unlikely(dentry->d_flags & DCACHE_OP_DELETE)) 648 648 return lockref_put_or_lock(&dentry->d_lockref); ··· 697 697 */ 698 698 smp_rmb(); 699 699 d_flags = ACCESS_ONCE(dentry->d_flags); 700 - d_flags &= DCACHE_REFERENCED | DCACHE_LRU_LIST; 700 + d_flags &= DCACHE_REFERENCED | DCACHE_LRU_LIST | DCACHE_DISCONNECTED; 701 701 702 702 /* Nothing to do? Dropping the reference was all we needed? */ 703 703 if (d_flags == (DCACHE_REFERENCED | DCACHE_LRU_LIST) && !d_unhashed(dentry)) ··· 774 774 775 775 /* Unreachable? Get rid of it */ 776 776 if (unlikely(d_unhashed(dentry))) 777 + goto kill_it; 778 + 779 + if (unlikely(dentry->d_flags & DCACHE_DISCONNECTED)) 777 780 goto kill_it; 778 781 779 782 if (unlikely(dentry->d_flags & DCACHE_OP_DELETE)) {
+3
fs/overlayfs/inode.c
··· 343 343 struct path realpath; 344 344 enum ovl_path_type type; 345 345 346 + if (d_is_dir(dentry)) 347 + return d_backing_inode(dentry); 348 + 346 349 type = ovl_path_real(dentry, &realpath); 347 350 if (ovl_open_need_copy_up(file_flags, type, realpath.dentry)) { 348 351 err = ovl_want_write(dentry);