aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ocfs2/namei.c')
-rw-r--r--fs/ocfs2/namei.c21
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
713out_commit: 725out_commit:
714 ocfs2_commit_trans(osb, handle); 726 ocfs2_commit_trans(osb, handle);
727 ocfs2_unblock_signals(&oldset);
715out_unlock_inode: 728out_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);