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 |
