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 ---