namei.c (9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e) | namei.c (8f1dca19b1e11785f42e70da796942154f63aef9) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ext2/namei.c 4 * 5 * Rewrite to pagecache. Almost all code had been changed, so blame me 6 * if the things go wrong. Please, send bug reports to 7 * viro@parcelfarce.linux.theplanet.co.uk 8 * --- 321 unchanged lines hidden (view full) --- 330 struct ext2_dir_entry_2 * old_de; 331 int err; 332 333 if (flags & ~RENAME_NOREPLACE) 334 return -EINVAL; 335 336 err = dquot_initialize(old_dir); 337 if (err) | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ext2/namei.c 4 * 5 * Rewrite to pagecache. Almost all code had been changed, so blame me 6 * if the things go wrong. Please, send bug reports to 7 * viro@parcelfarce.linux.theplanet.co.uk 8 * --- 321 unchanged lines hidden (view full) --- 330 struct ext2_dir_entry_2 * old_de; 331 int err; 332 333 if (flags & ~RENAME_NOREPLACE) 334 return -EINVAL; 335 336 err = dquot_initialize(old_dir); 337 if (err) |
338 goto out; | 338 return err; |
339 340 err = dquot_initialize(new_dir); 341 if (err) | 339 340 err = dquot_initialize(new_dir); 341 if (err) |
342 goto out; | 342 return err; |
343 344 old_de = ext2_find_entry(old_dir, &old_dentry->d_name, &old_page, 345 &old_page_addr); | 343 344 old_de = ext2_find_entry(old_dir, &old_dentry->d_name, &old_page, 345 &old_page_addr); |
346 if (IS_ERR(old_de)) { 347 err = PTR_ERR(old_de); 348 goto out; 349 } | 346 if (IS_ERR(old_de)) 347 return PTR_ERR(old_de); |
350 351 if (S_ISDIR(old_inode->i_mode)) { 352 err = -EIO; 353 dir_de = ext2_dotdot(old_inode, &dir_page, &dir_page_addr); 354 if (!dir_de) 355 goto out_old; 356 } 357 --- 31 unchanged lines hidden (view full) --- 389 390 /* 391 * Like most other Unix systems, set the ctime for inodes on a 392 * rename. 393 */ 394 old_inode->i_ctime = current_time(old_inode); 395 mark_inode_dirty(old_inode); 396 | 348 349 if (S_ISDIR(old_inode->i_mode)) { 350 err = -EIO; 351 dir_de = ext2_dotdot(old_inode, &dir_page, &dir_page_addr); 352 if (!dir_de) 353 goto out_old; 354 } 355 --- 31 unchanged lines hidden (view full) --- 387 388 /* 389 * Like most other Unix systems, set the ctime for inodes on a 390 * rename. 391 */ 392 old_inode->i_ctime = current_time(old_inode); 393 mark_inode_dirty(old_inode); 394 |
397 ext2_delete_entry(old_de, old_page, old_page_addr); 398 399 if (dir_de) { 400 if (old_dir != new_dir) { | 395 err = ext2_delete_entry(old_de, old_page, old_page_addr); 396 if (!err && dir_de) { 397 if (old_dir != new_dir) |
401 err = ext2_set_link(old_inode, dir_de, dir_page, 402 dir_page_addr, new_dir, false); 403 | 398 err = ext2_set_link(old_inode, dir_de, dir_page, 399 dir_page_addr, new_dir, false); 400 |
404 } 405 ext2_put_page(dir_page, dir_page_addr); | |
406 inode_dec_link_count(old_dir); 407 } | 401 inode_dec_link_count(old_dir); 402 } |
408 409out_old: 410 ext2_put_page(old_page, old_page_addr); 411out: 412 return err; 413 | |
414out_dir: 415 if (dir_de) 416 ext2_put_page(dir_page, dir_page_addr); | 403out_dir: 404 if (dir_de) 405 ext2_put_page(dir_page, dir_page_addr); |
417 goto out_old; | 406out_old: 407 ext2_put_page(old_page, old_page_addr); 408 return err; |
418} 419 420const struct inode_operations ext2_dir_inode_operations = { 421 .create = ext2_create, 422 .lookup = ext2_lookup, 423 .link = ext2_link, 424 .unlink = ext2_unlink, 425 .symlink = ext2_symlink, --- 21 unchanged lines hidden --- | 409} 410 411const struct inode_operations ext2_dir_inode_operations = { 412 .create = ext2_create, 413 .lookup = ext2_lookup, 414 .link = ext2_link, 415 .unlink = ext2_unlink, 416 .symlink = ext2_symlink, --- 21 unchanged lines hidden --- |