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

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

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2:
nilfs2: fix regression of garbage collection ioctl

+12 -9
-9
fs/nilfs2/gcinode.c
··· 176 176 int nilfs_init_gcinode(struct inode *inode) 177 177 { 178 178 struct nilfs_inode_info *ii = NILFS_I(inode); 179 - struct the_nilfs *nilfs = NILFS_SB(inode->i_sb)->s_nilfs; 180 179 181 180 inode->i_mode = S_IFREG; 182 181 mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS); ··· 184 185 185 186 ii->i_flags = 0; 186 187 nilfs_bmap_init_gc(ii->i_bmap); 187 - 188 - /* 189 - * Add the inode to GC inode list. Garbage Collection 190 - * is serialized and no two processes manipulate the 191 - * list simultaneously. 192 - */ 193 - igrab(inode); 194 - list_add(&NILFS_I(inode)->i_dirty, &nilfs->ns_gc_inodes); 195 188 196 189 return 0; 197 190 }
+12
fs/nilfs2/ioctl.c
··· 337 337 struct nilfs_argv *argv, void *buf) 338 338 { 339 339 size_t nmembs = argv->v_nmembs; 340 + struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 340 341 struct inode *inode; 341 342 struct nilfs_vdesc *vdesc; 342 343 struct buffer_head *bh, *n; ··· 354 353 ret = PTR_ERR(inode); 355 354 goto failed; 356 355 } 356 + if (list_empty(&NILFS_I(inode)->i_dirty)) { 357 + /* 358 + * Add the inode to GC inode list. Garbage Collection 359 + * is serialized and no two processes manipulate the 360 + * list simultaneously. 361 + */ 362 + igrab(inode); 363 + list_add(&NILFS_I(inode)->i_dirty, 364 + &nilfs->ns_gc_inodes); 365 + } 366 + 357 367 do { 358 368 ret = nilfs_ioctl_move_inode_block(inode, vdesc, 359 369 &buffers);