diff options
Diffstat (limited to 'fs/ocfs2/namei.c')
-rw-r--r-- | fs/ocfs2/namei.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index bfe4571a4fa1..b0fa6b650751 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c | |||
@@ -239,6 +239,8 @@ static int ocfs2_mknod(struct inode *dir, | |||
239 | }; | 239 | }; |
240 | int did_quota_inode = 0; | 240 | int did_quota_inode = 0; |
241 | struct ocfs2_dir_lookup_result lookup = { NULL, }; | 241 | struct ocfs2_dir_lookup_result lookup = { NULL, }; |
242 | sigset_t oldset; | ||
243 | int did_block_signals = 0; | ||
242 | 244 | ||
243 | mlog_entry("(0x%p, 0x%p, %d, %lu, '%.*s')\n", dir, dentry, mode, | 245 | mlog_entry("(0x%p, 0x%p, %d, %lu, '%.*s')\n", dir, dentry, mode, |
244 | (unsigned long)dev, dentry->d_name.len, | 246 | (unsigned long)dev, dentry->d_name.len, |
@@ -350,6 +352,10 @@ static int ocfs2_mknod(struct inode *dir, | |||
350 | goto leave; | 352 | goto leave; |
351 | } | 353 | } |
352 | 354 | ||
355 | /* Starting to change things, restart is no longer possible. */ | ||
356 | ocfs2_block_signals(&oldset); | ||
357 | did_block_signals = 1; | ||
358 | |||
353 | status = dquot_alloc_inode(inode); | 359 | status = dquot_alloc_inode(inode); |
354 | if (status) | 360 | if (status) |
355 | goto leave; | 361 | goto leave; |
@@ -430,6 +436,8 @@ leave: | |||
430 | ocfs2_commit_trans(osb, handle); | 436 | ocfs2_commit_trans(osb, handle); |
431 | 437 | ||
432 | ocfs2_inode_unlock(dir, 1); | 438 | ocfs2_inode_unlock(dir, 1); |
439 | if (did_block_signals) | ||
440 | ocfs2_unblock_signals(&oldset); | ||
433 | 441 | ||
434 | if (status == -ENOSPC) | 442 | if (status == -ENOSPC) |
435 | mlog(0, "Disk is full\n"); | 443 | mlog(0, "Disk is full\n"); |
@@ -620,6 +628,7 @@ static int ocfs2_link(struct dentry *old_dentry, | |||
620 | struct ocfs2_dinode *fe = NULL; | 628 | struct ocfs2_dinode *fe = NULL; |
621 | struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); | 629 | struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); |
622 | struct ocfs2_dir_lookup_result lookup = { NULL, }; | 630 | struct ocfs2_dir_lookup_result lookup = { NULL, }; |
631 | sigset_t oldset; | ||
623 | 632 | ||
624 | mlog_entry("(inode=%lu, old='%.*s' new='%.*s')\n", inode->i_ino, | 633 | mlog_entry("(inode=%lu, old='%.*s' new='%.*s')\n", inode->i_ino, |
625 | old_dentry->d_name.len, old_dentry->d_name.name, | 634 | old_dentry->d_name.len, old_dentry->d_name.name, |
@@ -676,6 +685,9 @@ static int ocfs2_link(struct dentry *old_dentry, | |||
676 | goto out_unlock_inode; | 685 | goto out_unlock_inode; |
677 | } | 686 | } |
678 | 687 | ||
688 | /* Starting to change things, restart is no longer possible. */ | ||
689 | ocfs2_block_signals(&oldset); | ||
690 | |||
679 | err = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh, | 691 | err = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh, |
680 | OCFS2_JOURNAL_ACCESS_WRITE); | 692 | OCFS2_JOURNAL_ACCESS_WRITE); |
681 | if (err < 0) { | 693 | if (err < 0) { |
@@ -712,6 +724,7 @@ static int ocfs2_link(struct dentry *old_dentry, | |||
712 | 724 | ||
713 | out_commit: | 725 | out_commit: |
714 | ocfs2_commit_trans(osb, handle); | 726 | ocfs2_commit_trans(osb, handle); |
727 | ocfs2_unblock_signals(&oldset); | ||
715 | out_unlock_inode: | 728 | out_unlock_inode: |
716 | ocfs2_inode_unlock(inode, 1); | 729 | ocfs2_inode_unlock(inode, 1); |
717 | 730 | ||
@@ -1570,6 +1583,8 @@ static int ocfs2_symlink(struct inode *dir, | |||
1570 | }; | 1583 | }; |
1571 | int did_quota = 0, did_quota_inode = 0; | 1584 | int did_quota = 0, did_quota_inode = 0; |
1572 | struct ocfs2_dir_lookup_result lookup = { NULL, }; | 1585 | struct ocfs2_dir_lookup_result lookup = { NULL, }; |
1586 | sigset_t oldset; | ||
1587 | int did_block_signals = 0; | ||
1573 | 1588 | ||
1574 | mlog_entry("(0x%p, 0x%p, symname='%s' actual='%.*s')\n", dir, | 1589 | mlog_entry("(0x%p, 0x%p, symname='%s' actual='%.*s')\n", dir, |
1575 | dentry, symname, dentry->d_name.len, dentry->d_name.name); | 1590 | dentry, symname, dentry->d_name.len, dentry->d_name.name); |
@@ -1665,6 +1680,10 @@ static int ocfs2_symlink(struct inode *dir, | |||
1665 | goto bail; | 1680 | goto bail; |
1666 | } | 1681 | } |
1667 | 1682 | ||
1683 | /* Starting to change things, restart is no longer possible. */ | ||
1684 | ocfs2_block_signals(&oldset); | ||
1685 | did_block_signals = 1; | ||
1686 | |||
1668 | status = dquot_alloc_inode(inode); | 1687 | status = dquot_alloc_inode(inode); |
1669 | if (status) | 1688 | if (status) |
1670 | goto bail; | 1689 | goto bail; |
@@ -1768,6 +1787,8 @@ bail: | |||
1768 | ocfs2_commit_trans(osb, handle); | 1787 | ocfs2_commit_trans(osb, handle); |
1769 | 1788 | ||
1770 | ocfs2_inode_unlock(dir, 1); | 1789 | ocfs2_inode_unlock(dir, 1); |
1790 | if (did_block_signals) | ||
1791 | ocfs2_unblock_signals(&oldset); | ||
1771 | 1792 | ||
1772 | brelse(new_fe_bh); | 1793 | brelse(new_fe_bh); |
1773 | brelse(parent_fe_bh); | 1794 | brelse(parent_fe_bh); |