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

Merge branch 'for-linus' into for-next

Al Viro 4ef51e8b b853a161

+85 -79
+4 -4
fs/dcache.c
··· 1239 1239 /* might go back up the wrong parent if we have had a rename. */ 1240 1240 if (need_seqretry(&rename_lock, seq)) 1241 1241 goto rename_retry; 1242 - next = child->d_child.next; 1243 - while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)) { 1242 + /* go into the first sibling still alive */ 1243 + do { 1244 + next = child->d_child.next; 1244 1245 if (next == &this_parent->d_subdirs) 1245 1246 goto ascend; 1246 1247 child = list_entry(next, struct dentry, d_child); 1247 - next = next->next; 1248 - } 1248 + } while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)); 1249 1249 rcu_read_unlock(); 1250 1250 goto resume; 1251 1251 }
+2
fs/ncpfs/dir.c
··· 1145 1145 case 0x00: 1146 1146 ncp_dbg(1, "renamed %pd -> %pd\n", 1147 1147 old_dentry, new_dentry); 1148 + ncp_d_prune(old_dentry); 1149 + ncp_d_prune(new_dentry); 1148 1150 break; 1149 1151 case 0x9E: 1150 1152 error = -ENAMETOOLONG;
+17 -17
fs/ufs/balloc.c
··· 51 51 52 52 if (ufs_fragnum(fragment) + count > uspi->s_fpg) 53 53 ufs_error (sb, "ufs_free_fragments", "internal error"); 54 - 55 - lock_ufs(sb); 54 + 55 + mutex_lock(&UFS_SB(sb)->s_lock); 56 56 57 57 cgno = ufs_dtog(uspi, fragment); 58 58 bit = ufs_dtogd(uspi, fragment); ··· 115 115 if (sb->s_flags & MS_SYNCHRONOUS) 116 116 ubh_sync_block(UCPI_UBH(ucpi)); 117 117 ufs_mark_sb_dirty(sb); 118 - 119 - unlock_ufs(sb); 118 + 119 + mutex_unlock(&UFS_SB(sb)->s_lock); 120 120 UFSD("EXIT\n"); 121 121 return; 122 122 123 123 failed: 124 - unlock_ufs(sb); 124 + mutex_unlock(&UFS_SB(sb)->s_lock); 125 125 UFSD("EXIT (FAILED)\n"); 126 126 return; 127 127 } ··· 151 151 goto failed; 152 152 } 153 153 154 - lock_ufs(sb); 154 + mutex_lock(&UFS_SB(sb)->s_lock); 155 155 156 156 do_more: 157 157 overflow = 0; ··· 211 211 } 212 212 213 213 ufs_mark_sb_dirty(sb); 214 - unlock_ufs(sb); 214 + mutex_unlock(&UFS_SB(sb)->s_lock); 215 215 UFSD("EXIT\n"); 216 216 return; 217 217 218 218 failed_unlock: 219 - unlock_ufs(sb); 219 + mutex_unlock(&UFS_SB(sb)->s_lock); 220 220 failed: 221 221 UFSD("EXIT (FAILED)\n"); 222 222 return; ··· 357 357 usb1 = ubh_get_usb_first(uspi); 358 358 *err = -ENOSPC; 359 359 360 - lock_ufs(sb); 360 + mutex_lock(&UFS_SB(sb)->s_lock); 361 361 tmp = ufs_data_ptr_to_cpu(sb, p); 362 362 363 363 if (count + ufs_fragnum(fragment) > uspi->s_fpb) { ··· 378 378 "fragment %llu, tmp %llu\n", 379 379 (unsigned long long)fragment, 380 380 (unsigned long long)tmp); 381 - unlock_ufs(sb); 381 + mutex_unlock(&UFS_SB(sb)->s_lock); 382 382 return INVBLOCK; 383 383 } 384 384 if (fragment < UFS_I(inode)->i_lastfrag) { 385 385 UFSD("EXIT (ALREADY ALLOCATED)\n"); 386 - unlock_ufs(sb); 386 + mutex_unlock(&UFS_SB(sb)->s_lock); 387 387 return 0; 388 388 } 389 389 } 390 390 else { 391 391 if (tmp) { 392 392 UFSD("EXIT (ALREADY ALLOCATED)\n"); 393 - unlock_ufs(sb); 393 + mutex_unlock(&UFS_SB(sb)->s_lock); 394 394 return 0; 395 395 } 396 396 } ··· 399 399 * There is not enough space for user on the device 400 400 */ 401 401 if (!capable(CAP_SYS_RESOURCE) && ufs_freespace(uspi, UFS_MINFREE) <= 0) { 402 - unlock_ufs(sb); 402 + mutex_unlock(&UFS_SB(sb)->s_lock); 403 403 UFSD("EXIT (FAILED)\n"); 404 404 return 0; 405 405 } ··· 424 424 ufs_clear_frags(inode, result + oldcount, 425 425 newcount - oldcount, locked_page != NULL); 426 426 } 427 - unlock_ufs(sb); 427 + mutex_unlock(&UFS_SB(sb)->s_lock); 428 428 UFSD("EXIT, result %llu\n", (unsigned long long)result); 429 429 return result; 430 430 } ··· 439 439 fragment + count); 440 440 ufs_clear_frags(inode, result + oldcount, newcount - oldcount, 441 441 locked_page != NULL); 442 - unlock_ufs(sb); 442 + mutex_unlock(&UFS_SB(sb)->s_lock); 443 443 UFSD("EXIT, result %llu\n", (unsigned long long)result); 444 444 return result; 445 445 } ··· 477 477 *err = 0; 478 478 UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag, 479 479 fragment + count); 480 - unlock_ufs(sb); 480 + mutex_unlock(&UFS_SB(sb)->s_lock); 481 481 if (newcount < request) 482 482 ufs_free_fragments (inode, result + newcount, request - newcount); 483 483 ufs_free_fragments (inode, tmp, oldcount); ··· 485 485 return result; 486 486 } 487 487 488 - unlock_ufs(sb); 488 + mutex_unlock(&UFS_SB(sb)->s_lock); 489 489 UFSD("EXIT (FAILED)\n"); 490 490 return 0; 491 491 }
+4 -2
fs/ufs/dir.c
··· 87 87 88 88 /* Releases the page */ 89 89 void ufs_set_link(struct inode *dir, struct ufs_dir_entry *de, 90 - struct page *page, struct inode *inode) 90 + struct page *page, struct inode *inode, 91 + bool update_times) 91 92 { 92 93 loff_t pos = page_offset(page) + 93 94 (char *) de - (char *) page_address(page); ··· 104 103 105 104 err = ufs_commit_chunk(page, pos, len); 106 105 ufs_put_page(page); 107 - dir->i_mtime = dir->i_ctime = CURRENT_TIME_SEC; 106 + if (update_times) 107 + dir->i_mtime = dir->i_ctime = CURRENT_TIME_SEC; 108 108 mark_inode_dirty(dir); 109 109 } 110 110
+8 -8
fs/ufs/ialloc.c
··· 69 69 70 70 ino = inode->i_ino; 71 71 72 - lock_ufs(sb); 72 + mutex_lock(&UFS_SB(sb)->s_lock); 73 73 74 74 if (!((ino > 1) && (ino < (uspi->s_ncg * uspi->s_ipg )))) { 75 75 ufs_warning(sb, "ufs_free_inode", "reserved inode or nonexistent inode %u\n", ino); 76 - unlock_ufs(sb); 76 + mutex_unlock(&UFS_SB(sb)->s_lock); 77 77 return; 78 78 } 79 79 ··· 81 81 bit = ufs_inotocgoff (ino); 82 82 ucpi = ufs_load_cylinder (sb, cg); 83 83 if (!ucpi) { 84 - unlock_ufs(sb); 84 + mutex_unlock(&UFS_SB(sb)->s_lock); 85 85 return; 86 86 } 87 87 ucg = ubh_get_ucg(UCPI_UBH(ucpi)); ··· 115 115 ubh_sync_block(UCPI_UBH(ucpi)); 116 116 117 117 ufs_mark_sb_dirty(sb); 118 - unlock_ufs(sb); 118 + mutex_unlock(&UFS_SB(sb)->s_lock); 119 119 UFSD("EXIT\n"); 120 120 } 121 121 ··· 193 193 sbi = UFS_SB(sb); 194 194 uspi = sbi->s_uspi; 195 195 196 - lock_ufs(sb); 196 + mutex_lock(&sbi->s_lock); 197 197 198 198 /* 199 199 * Try to place the inode in its parent directory ··· 331 331 sync_dirty_buffer(bh); 332 332 brelse(bh); 333 333 } 334 - unlock_ufs(sb); 334 + mutex_unlock(&sbi->s_lock); 335 335 336 336 UFSD("allocating inode %lu\n", inode->i_ino); 337 337 UFSD("EXIT\n"); 338 338 return inode; 339 339 340 340 fail_remove_inode: 341 - unlock_ufs(sb); 341 + mutex_unlock(&sbi->s_lock); 342 342 clear_nlink(inode); 343 343 unlock_new_inode(inode); 344 344 iput(inode); 345 345 UFSD("EXIT (FAILED): err %d\n", err); 346 346 return ERR_PTR(err); 347 347 failed: 348 - unlock_ufs(sb); 348 + mutex_unlock(&sbi->s_lock); 349 349 make_bad_inode(inode); 350 350 iput (inode); 351 351 UFSD("EXIT (FAILED): err %d\n", err);
+4 -1
fs/ufs/inode.c
··· 903 903 invalidate_inode_buffers(inode); 904 904 clear_inode(inode); 905 905 906 - if (want_delete) 906 + if (want_delete) { 907 + lock_ufs(inode->i_sb); 907 908 ufs_free_inode(inode); 909 + unlock_ufs(inode->i_sb); 910 + } 908 911 }
+33 -46
fs/ufs/namei.c
··· 56 56 if (dentry->d_name.len > UFS_MAXNAMLEN) 57 57 return ERR_PTR(-ENAMETOOLONG); 58 58 59 - lock_ufs(dir->i_sb); 60 59 ino = ufs_inode_by_name(dir, &dentry->d_name); 61 60 if (ino) 62 61 inode = ufs_iget(dir->i_sb, ino); 63 - unlock_ufs(dir->i_sb); 64 62 return d_splice_alias(inode, dentry); 65 63 } 66 64 ··· 74 76 bool excl) 75 77 { 76 78 struct inode *inode; 77 - int err; 78 - 79 - UFSD("BEGIN\n"); 80 79 81 80 inode = ufs_new_inode(dir, mode); 82 - err = PTR_ERR(inode); 81 + if (IS_ERR(inode)) 82 + return PTR_ERR(inode); 83 83 84 - if (!IS_ERR(inode)) { 85 - inode->i_op = &ufs_file_inode_operations; 86 - inode->i_fop = &ufs_file_operations; 87 - inode->i_mapping->a_ops = &ufs_aops; 88 - mark_inode_dirty(inode); 89 - lock_ufs(dir->i_sb); 90 - err = ufs_add_nondir(dentry, inode); 91 - unlock_ufs(dir->i_sb); 92 - } 93 - UFSD("END: err=%d\n", err); 94 - return err; 84 + inode->i_op = &ufs_file_inode_operations; 85 + inode->i_fop = &ufs_file_operations; 86 + inode->i_mapping->a_ops = &ufs_aops; 87 + mark_inode_dirty(inode); 88 + return ufs_add_nondir(dentry, inode); 95 89 } 96 90 97 91 static int ufs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev) ··· 100 110 init_special_inode(inode, mode, rdev); 101 111 ufs_set_inode_dev(inode->i_sb, UFS_I(inode), rdev); 102 112 mark_inode_dirty(inode); 103 - lock_ufs(dir->i_sb); 104 113 err = ufs_add_nondir(dentry, inode); 105 - unlock_ufs(dir->i_sb); 106 114 } 107 115 return err; 108 116 } ··· 109 121 const char * symname) 110 122 { 111 123 struct super_block * sb = dir->i_sb; 112 - int err = -ENAMETOOLONG; 124 + int err; 113 125 unsigned l = strlen(symname)+1; 114 126 struct inode * inode; 115 127 116 128 if (l > sb->s_blocksize) 117 - goto out_notlocked; 129 + return -ENAMETOOLONG; 118 130 119 131 inode = ufs_new_inode(dir, S_IFLNK | S_IRWXUGO); 120 132 err = PTR_ERR(inode); 121 133 if (IS_ERR(inode)) 122 - goto out_notlocked; 134 + return err; 123 135 124 - lock_ufs(dir->i_sb); 125 136 if (l > UFS_SB(sb)->s_uspi->s_maxsymlinklen) { 126 137 /* slow symlink */ 127 138 inode->i_op = &ufs_symlink_inode_operations; ··· 137 150 } 138 151 mark_inode_dirty(inode); 139 152 140 - err = ufs_add_nondir(dentry, inode); 141 - out: 142 - unlock_ufs(dir->i_sb); 143 - out_notlocked: 144 - return err; 153 + return ufs_add_nondir(dentry, inode); 145 154 146 155 out_fail: 147 156 inode_dec_link_count(inode); 148 157 unlock_new_inode(inode); 149 158 iput(inode); 150 - goto out; 159 + return err; 151 160 } 152 161 153 162 static int ufs_link (struct dentry * old_dentry, struct inode * dir, ··· 152 169 struct inode *inode = d_inode(old_dentry); 153 170 int error; 154 171 155 - lock_ufs(dir->i_sb); 156 - 157 172 inode->i_ctime = CURRENT_TIME_SEC; 158 173 inode_inc_link_count(inode); 159 174 ihold(inode); 160 175 161 - error = ufs_add_nondir(dentry, inode); 162 - unlock_ufs(dir->i_sb); 176 + error = ufs_add_link(dentry, inode); 177 + if (error) { 178 + inode_dec_link_count(inode); 179 + iput(inode); 180 + } else 181 + d_instantiate(dentry, inode); 163 182 return error; 164 183 } 165 184 ··· 170 185 struct inode * inode; 171 186 int err; 172 187 188 + inode_inc_link_count(dir); 189 + 173 190 inode = ufs_new_inode(dir, S_IFDIR|mode); 191 + err = PTR_ERR(inode); 174 192 if (IS_ERR(inode)) 175 - return PTR_ERR(inode); 193 + goto out_dir; 176 194 177 195 inode->i_op = &ufs_dir_inode_operations; 178 196 inode->i_fop = &ufs_dir_operations; 179 197 inode->i_mapping->a_ops = &ufs_aops; 180 198 181 199 inode_inc_link_count(inode); 182 - 183 - lock_ufs(dir->i_sb); 184 - inode_inc_link_count(dir); 185 200 186 201 err = ufs_make_empty(inode, dir); 187 202 if (err) ··· 190 205 err = ufs_add_link(dentry, inode); 191 206 if (err) 192 207 goto out_fail; 193 - unlock_ufs(dir->i_sb); 194 208 209 + unlock_new_inode(inode); 195 210 d_instantiate(dentry, inode); 196 - out: 197 - return err; 211 + return 0; 198 212 199 213 out_fail: 200 214 inode_dec_link_count(inode); 201 215 inode_dec_link_count(inode); 202 216 unlock_new_inode(inode); 203 217 iput (inode); 218 + out_dir: 204 219 inode_dec_link_count(dir); 205 - unlock_ufs(dir->i_sb); 206 - goto out; 220 + return err; 207 221 } 208 222 209 223 static int ufs_unlink(struct inode *dir, struct dentry *dentry) ··· 232 248 struct inode * inode = d_inode(dentry); 233 249 int err= -ENOTEMPTY; 234 250 235 - lock_ufs(dir->i_sb); 236 251 if (ufs_empty_dir (inode)) { 237 252 err = ufs_unlink(dir, dentry); 238 253 if (!err) { ··· 240 257 inode_dec_link_count(dir); 241 258 } 242 259 } 243 - unlock_ufs(dir->i_sb); 244 260 return err; 245 261 } 246 262 ··· 277 295 new_de = ufs_find_entry(new_dir, &new_dentry->d_name, &new_page); 278 296 if (!new_de) 279 297 goto out_dir; 280 - ufs_set_link(new_dir, new_de, new_page, old_inode); 298 + ufs_set_link(new_dir, new_de, new_page, old_inode, 1); 281 299 new_inode->i_ctime = CURRENT_TIME_SEC; 282 300 if (dir_de) 283 301 drop_nlink(new_inode); ··· 300 318 mark_inode_dirty(old_inode); 301 319 302 320 if (dir_de) { 303 - ufs_set_link(old_inode, dir_de, dir_page, new_dir); 321 + if (old_dir != new_dir) 322 + ufs_set_link(old_inode, dir_de, dir_page, new_dir, 0); 323 + else { 324 + kunmap(dir_page); 325 + page_cache_release(dir_page); 326 + } 304 327 inode_dec_link_count(old_dir); 305 328 } 306 329 return 0;
+11
fs/ufs/super.c
··· 694 694 unsigned flags; 695 695 696 696 lock_ufs(sb); 697 + mutex_lock(&UFS_SB(sb)->s_lock); 697 698 698 699 UFSD("ENTER\n"); 699 700 ··· 712 711 ufs_put_cstotal(sb); 713 712 714 713 UFSD("EXIT\n"); 714 + mutex_unlock(&UFS_SB(sb)->s_lock); 715 715 unlock_ufs(sb); 716 716 717 717 return 0; ··· 801 799 UFSD("flag %u\n", (int)(sb->s_flags & MS_RDONLY)); 802 800 803 801 mutex_init(&sbi->mutex); 802 + mutex_init(&sbi->s_lock); 804 803 spin_lock_init(&sbi->work_lock); 805 804 INIT_DELAYED_WORK(&sbi->sync_work, delayed_sync_fs); 806 805 /* ··· 1280 1277 1281 1278 sync_filesystem(sb); 1282 1279 lock_ufs(sb); 1280 + mutex_lock(&UFS_SB(sb)->s_lock); 1283 1281 uspi = UFS_SB(sb)->s_uspi; 1284 1282 flags = UFS_SB(sb)->s_flags; 1285 1283 usb1 = ubh_get_usb_first(uspi); ··· 1294 1290 new_mount_opt = 0; 1295 1291 ufs_set_opt (new_mount_opt, ONERROR_LOCK); 1296 1292 if (!ufs_parse_options (data, &new_mount_opt)) { 1293 + mutex_unlock(&UFS_SB(sb)->s_lock); 1297 1294 unlock_ufs(sb); 1298 1295 return -EINVAL; 1299 1296 } ··· 1302 1297 new_mount_opt |= ufstype; 1303 1298 } else if ((new_mount_opt & UFS_MOUNT_UFSTYPE) != ufstype) { 1304 1299 pr_err("ufstype can't be changed during remount\n"); 1300 + mutex_unlock(&UFS_SB(sb)->s_lock); 1305 1301 unlock_ufs(sb); 1306 1302 return -EINVAL; 1307 1303 } 1308 1304 1309 1305 if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { 1310 1306 UFS_SB(sb)->s_mount_opt = new_mount_opt; 1307 + mutex_unlock(&UFS_SB(sb)->s_lock); 1311 1308 unlock_ufs(sb); 1312 1309 return 0; 1313 1310 } ··· 1333 1326 */ 1334 1327 #ifndef CONFIG_UFS_FS_WRITE 1335 1328 pr_err("ufs was compiled with read-only support, can't be mounted as read-write\n"); 1329 + mutex_unlock(&UFS_SB(sb)->s_lock); 1336 1330 unlock_ufs(sb); 1337 1331 return -EINVAL; 1338 1332 #else ··· 1343 1335 ufstype != UFS_MOUNT_UFSTYPE_SUNx86 && 1344 1336 ufstype != UFS_MOUNT_UFSTYPE_UFS2) { 1345 1337 pr_err("this ufstype is read-only supported\n"); 1338 + mutex_unlock(&UFS_SB(sb)->s_lock); 1346 1339 unlock_ufs(sb); 1347 1340 return -EINVAL; 1348 1341 } 1349 1342 if (!ufs_read_cylinder_structures(sb)) { 1350 1343 pr_err("failed during remounting\n"); 1344 + mutex_unlock(&UFS_SB(sb)->s_lock); 1351 1345 unlock_ufs(sb); 1352 1346 return -EPERM; 1353 1347 } ··· 1357 1347 #endif 1358 1348 } 1359 1349 UFS_SB(sb)->s_mount_opt = new_mount_opt; 1350 + mutex_unlock(&UFS_SB(sb)->s_lock); 1360 1351 unlock_ufs(sb); 1361 1352 return 0; 1362 1353 }
+2 -1
fs/ufs/ufs.h
··· 30 30 int work_queued; /* non-zero if the delayed work is queued */ 31 31 struct delayed_work sync_work; /* FS sync delayed work */ 32 32 spinlock_t work_lock; /* protects sync_work and work_queued */ 33 + struct mutex s_lock; 33 34 }; 34 35 35 36 struct ufs_inode_info { ··· 106 105 extern int ufs_empty_dir (struct inode *); 107 106 extern struct ufs_dir_entry *ufs_dotdot(struct inode *, struct page **); 108 107 extern void ufs_set_link(struct inode *dir, struct ufs_dir_entry *de, 109 - struct page *page, struct inode *inode); 108 + struct page *page, struct inode *inode, bool update_times); 110 109 111 110 /* file.c */ 112 111 extern const struct inode_operations ufs_file_inode_operations;