diff options
Diffstat (limited to 'fs/quota/dquot.c')
-rw-r--r-- | fs/quota/dquot.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 2eebf72d07c8..b171221000fa 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c | |||
@@ -132,6 +132,22 @@ static __cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_state_lock); | |||
132 | __cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_data_lock); | 132 | __cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_data_lock); |
133 | EXPORT_SYMBOL(dq_data_lock); | 133 | EXPORT_SYMBOL(dq_data_lock); |
134 | 134 | ||
135 | void __quota_error(struct super_block *sb, const char *func, | ||
136 | const char *fmt, ...) | ||
137 | { | ||
138 | va_list args; | ||
139 | |||
140 | if (printk_ratelimit()) { | ||
141 | va_start(args, fmt); | ||
142 | printk(KERN_ERR "Quota error (device %s): %s: ", | ||
143 | sb->s_id, func); | ||
144 | vprintk(fmt, args); | ||
145 | printk("\n"); | ||
146 | va_end(args); | ||
147 | } | ||
148 | } | ||
149 | EXPORT_SYMBOL(__quota_error); | ||
150 | |||
135 | #if defined(CONFIG_QUOTA_DEBUG) || defined(CONFIG_PRINT_QUOTA_WARNING) | 151 | #if defined(CONFIG_QUOTA_DEBUG) || defined(CONFIG_PRINT_QUOTA_WARNING) |
136 | static char *quotatypes[] = INITQFNAMES; | 152 | static char *quotatypes[] = INITQFNAMES; |
137 | #endif | 153 | #endif |
@@ -705,11 +721,8 @@ void dqput(struct dquot *dquot) | |||
705 | return; | 721 | return; |
706 | #ifdef CONFIG_QUOTA_DEBUG | 722 | #ifdef CONFIG_QUOTA_DEBUG |
707 | if (!atomic_read(&dquot->dq_count)) { | 723 | if (!atomic_read(&dquot->dq_count)) { |
708 | printk("VFS: dqput: trying to free free dquot\n"); | 724 | quota_error(dquot->dq_sb, "trying to free free dquot of %s %d", |
709 | printk("VFS: device %s, dquot of %s %d\n", | 725 | quotatypes[dquot->dq_type], dquot->dq_id); |
710 | dquot->dq_sb->s_id, | ||
711 | quotatypes[dquot->dq_type], | ||
712 | dquot->dq_id); | ||
713 | BUG(); | 726 | BUG(); |
714 | } | 727 | } |
715 | #endif | 728 | #endif |
@@ -732,9 +745,9 @@ we_slept: | |||
732 | /* Commit dquot before releasing */ | 745 | /* Commit dquot before releasing */ |
733 | ret = dquot->dq_sb->dq_op->write_dquot(dquot); | 746 | ret = dquot->dq_sb->dq_op->write_dquot(dquot); |
734 | if (ret < 0) { | 747 | if (ret < 0) { |
735 | printk(KERN_ERR "VFS: cannot write quota structure on " | 748 | quota_error(dquot->dq_sb, "Can't write quota structure" |
736 | "device %s (error %d). Quota may get out of " | 749 | " (error %d). Quota may get out of sync!", |
737 | "sync!\n", dquot->dq_sb->s_id, ret); | 750 | ret); |
738 | /* | 751 | /* |
739 | * We clear dirty bit anyway, so that we avoid | 752 | * We clear dirty bit anyway, so that we avoid |
740 | * infinite loop here | 753 | * infinite loop here |
@@ -914,9 +927,9 @@ static void add_dquot_ref(struct super_block *sb, int type) | |||
914 | 927 | ||
915 | #ifdef CONFIG_QUOTA_DEBUG | 928 | #ifdef CONFIG_QUOTA_DEBUG |
916 | if (reserved) { | 929 | if (reserved) { |
917 | printk(KERN_WARNING "VFS (%s): Writes happened before quota" | 930 | quota_error(sb, "Writes happened before quota was turned on " |
918 | " was turned on thus quota information is probably " | 931 | "thus quota information is probably inconsistent. " |
919 | "inconsistent. Please run quotacheck(8).\n", sb->s_id); | 932 | "Please run quotacheck(8)"); |
920 | } | 933 | } |
921 | #endif | 934 | #endif |
922 | } | 935 | } |
@@ -947,7 +960,9 @@ static int remove_inode_dquot_ref(struct inode *inode, int type, | |||
947 | if (dqput_blocks(dquot)) { | 960 | if (dqput_blocks(dquot)) { |
948 | #ifdef CONFIG_QUOTA_DEBUG | 961 | #ifdef CONFIG_QUOTA_DEBUG |
949 | if (atomic_read(&dquot->dq_count) != 1) | 962 | if (atomic_read(&dquot->dq_count) != 1) |
950 | printk(KERN_WARNING "VFS: Adding dquot with dq_count %d to dispose list.\n", atomic_read(&dquot->dq_count)); | 963 | quota_error(inode->i_sb, "Adding dquot with " |
964 | "dq_count %d to dispose list", | ||
965 | atomic_read(&dquot->dq_count)); | ||
951 | #endif | 966 | #endif |
952 | spin_lock(&dq_list_lock); | 967 | spin_lock(&dq_list_lock); |
953 | /* As dquot must have currently users it can't be on | 968 | /* As dquot must have currently users it can't be on |