mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: ext3: Fix dirtying of journalled buffers in data=journal mode ext3: default to ordered mode quota: Use mark_inode_dirty_sync instead of mark_inode_dirty quota: Change quota error message to print out disk and function name MAINTAINERS: Update entries of ext2 and ext3 MAINTAINERS: Update address of Andreas Dilger ext3: Avoid filesystem corruption after a crash under heavy delete load ext3: remove vestiges of nobh support ext3: Fix set but unused variables quota: clean up quota active checks quota: Clean up the namespace in dqblk_xfs.h quota: check quota reservation on remove_dquot_ref
This commit is contained in:
commit
90e0c22596
19 changed files with 208 additions and 206 deletions
|
|
@ -132,6 +132,22 @@ static __cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_state_lock);
|
|||
__cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_data_lock);
|
||||
EXPORT_SYMBOL(dq_data_lock);
|
||||
|
||||
void __quota_error(struct super_block *sb, const char *func,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
if (printk_ratelimit()) {
|
||||
va_start(args, fmt);
|
||||
printk(KERN_ERR "Quota error (device %s): %s: ",
|
||||
sb->s_id, func);
|
||||
vprintk(fmt, args);
|
||||
printk("\n");
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(__quota_error);
|
||||
|
||||
#if defined(CONFIG_QUOTA_DEBUG) || defined(CONFIG_PRINT_QUOTA_WARNING)
|
||||
static char *quotatypes[] = INITQFNAMES;
|
||||
#endif
|
||||
|
|
@ -705,11 +721,8 @@ void dqput(struct dquot *dquot)
|
|||
return;
|
||||
#ifdef CONFIG_QUOTA_DEBUG
|
||||
if (!atomic_read(&dquot->dq_count)) {
|
||||
printk("VFS: dqput: trying to free free dquot\n");
|
||||
printk("VFS: device %s, dquot of %s %d\n",
|
||||
dquot->dq_sb->s_id,
|
||||
quotatypes[dquot->dq_type],
|
||||
dquot->dq_id);
|
||||
quota_error(dquot->dq_sb, "trying to free free dquot of %s %d",
|
||||
quotatypes[dquot->dq_type], dquot->dq_id);
|
||||
BUG();
|
||||
}
|
||||
#endif
|
||||
|
|
@ -732,9 +745,9 @@ we_slept:
|
|||
/* Commit dquot before releasing */
|
||||
ret = dquot->dq_sb->dq_op->write_dquot(dquot);
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "VFS: cannot write quota structure on "
|
||||
"device %s (error %d). Quota may get out of "
|
||||
"sync!\n", dquot->dq_sb->s_id, ret);
|
||||
quota_error(dquot->dq_sb, "Can't write quota structure"
|
||||
" (error %d). Quota may get out of sync!",
|
||||
ret);
|
||||
/*
|
||||
* We clear dirty bit anyway, so that we avoid
|
||||
* infinite loop here
|
||||
|
|
@ -914,9 +927,9 @@ static void add_dquot_ref(struct super_block *sb, int type)
|
|||
|
||||
#ifdef CONFIG_QUOTA_DEBUG
|
||||
if (reserved) {
|
||||
printk(KERN_WARNING "VFS (%s): Writes happened before quota"
|
||||
" was turned on thus quota information is probably "
|
||||
"inconsistent. Please run quotacheck(8).\n", sb->s_id);
|
||||
quota_error(sb, "Writes happened before quota was turned on "
|
||||
"thus quota information is probably inconsistent. "
|
||||
"Please run quotacheck(8)");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
@ -947,7 +960,9 @@ static int remove_inode_dquot_ref(struct inode *inode, int type,
|
|||
if (dqput_blocks(dquot)) {
|
||||
#ifdef CONFIG_QUOTA_DEBUG
|
||||
if (atomic_read(&dquot->dq_count) != 1)
|
||||
printk(KERN_WARNING "VFS: Adding dquot with dq_count %d to dispose list.\n", atomic_read(&dquot->dq_count));
|
||||
quota_error(inode->i_sb, "Adding dquot with "
|
||||
"dq_count %d to dispose list",
|
||||
atomic_read(&dquot->dq_count));
|
||||
#endif
|
||||
spin_lock(&dq_list_lock);
|
||||
/* As dquot must have currently users it can't be on
|
||||
|
|
@ -986,6 +1001,7 @@ static void remove_dquot_ref(struct super_block *sb, int type,
|
|||
struct list_head *tofree_head)
|
||||
{
|
||||
struct inode *inode;
|
||||
int reserved = 0;
|
||||
|
||||
spin_lock(&inode_lock);
|
||||
list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
|
||||
|
|
@ -995,10 +1011,20 @@ static void remove_dquot_ref(struct super_block *sb, int type,
|
|||
* only quota pointers and these have separate locking
|
||||
* (dqptr_sem).
|
||||
*/
|
||||
if (!IS_NOQUOTA(inode))
|
||||
if (!IS_NOQUOTA(inode)) {
|
||||
if (unlikely(inode_get_rsv_space(inode) > 0))
|
||||
reserved = 1;
|
||||
remove_inode_dquot_ref(inode, type, tofree_head);
|
||||
}
|
||||
}
|
||||
spin_unlock(&inode_lock);
|
||||
#ifdef CONFIG_QUOTA_DEBUG
|
||||
if (reserved) {
|
||||
printk(KERN_WARNING "VFS (%s): Writes happened after quota"
|
||||
" was disabled thus quota information is probably "
|
||||
"inconsistent. Please run quotacheck(8).\n", sb->s_id);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Gather all references from inodes and drop them */
|
||||
|
|
@ -1304,6 +1330,15 @@ static int info_bdq_free(struct dquot *dquot, qsize_t space)
|
|||
return QUOTA_NL_NOWARN;
|
||||
}
|
||||
|
||||
static int dquot_active(const struct inode *inode)
|
||||
{
|
||||
struct super_block *sb = inode->i_sb;
|
||||
|
||||
if (IS_NOQUOTA(inode))
|
||||
return 0;
|
||||
return sb_any_quota_loaded(sb) & ~sb_any_quota_suspended(sb);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize quota pointers in inode
|
||||
*
|
||||
|
|
@ -1323,7 +1358,7 @@ static void __dquot_initialize(struct inode *inode, int type)
|
|||
|
||||
/* First test before acquiring mutex - solves deadlocks when we
|
||||
* re-enter the quota code and are already holding the mutex */
|
||||
if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode))
|
||||
if (!dquot_active(inode))
|
||||
return;
|
||||
|
||||
/* First get references to structures we might need. */
|
||||
|
|
@ -1507,7 +1542,7 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags)
|
|||
* First test before acquiring mutex - solves deadlocks when we
|
||||
* re-enter the quota code and are already holding the mutex
|
||||
*/
|
||||
if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode)) {
|
||||
if (!dquot_active(inode)) {
|
||||
inode_incr_space(inode, number, reserve);
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -1559,7 +1594,7 @@ int dquot_alloc_inode(const struct inode *inode)
|
|||
|
||||
/* First test before acquiring mutex - solves deadlocks when we
|
||||
* re-enter the quota code and are already holding the mutex */
|
||||
if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode))
|
||||
if (!dquot_active(inode))
|
||||
return 0;
|
||||
for (cnt = 0; cnt < MAXQUOTAS; cnt++)
|
||||
warntype[cnt] = QUOTA_NL_NOWARN;
|
||||
|
|
@ -1596,7 +1631,7 @@ int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
|
|||
{
|
||||
int cnt;
|
||||
|
||||
if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode)) {
|
||||
if (!dquot_active(inode)) {
|
||||
inode_claim_rsv_space(inode, number);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1629,7 +1664,7 @@ void __dquot_free_space(struct inode *inode, qsize_t number, int flags)
|
|||
|
||||
/* First test before acquiring mutex - solves deadlocks when we
|
||||
* re-enter the quota code and are already holding the mutex */
|
||||
if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode)) {
|
||||
if (!dquot_active(inode)) {
|
||||
inode_decr_space(inode, number, reserve);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1667,7 +1702,7 @@ void dquot_free_inode(const struct inode *inode)
|
|||
|
||||
/* First test before acquiring mutex - solves deadlocks when we
|
||||
* re-enter the quota code and are already holding the mutex */
|
||||
if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode))
|
||||
if (!dquot_active(inode))
|
||||
return;
|
||||
|
||||
down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
|
||||
|
|
@ -1790,7 +1825,7 @@ int dquot_transfer(struct inode *inode, struct iattr *iattr)
|
|||
struct super_block *sb = inode->i_sb;
|
||||
int ret;
|
||||
|
||||
if (!sb_any_quota_active(sb) || IS_NOQUOTA(inode))
|
||||
if (!dquot_active(inode))
|
||||
return 0;
|
||||
|
||||
if (iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid)
|
||||
|
|
@ -1957,7 +1992,7 @@ int dquot_disable(struct super_block *sb, int type, unsigned int flags)
|
|||
truncate_inode_pages(&toputinode[cnt]->i_data,
|
||||
0);
|
||||
mutex_unlock(&toputinode[cnt]->i_mutex);
|
||||
mark_inode_dirty(toputinode[cnt]);
|
||||
mark_inode_dirty_sync(toputinode[cnt]);
|
||||
}
|
||||
mutex_unlock(&dqopt->dqonoff_mutex);
|
||||
}
|
||||
|
|
@ -2270,7 +2305,7 @@ static void do_get_dqblk(struct dquot *dquot, struct fs_disk_quota *di)
|
|||
memset(di, 0, sizeof(*di));
|
||||
di->d_version = FS_DQUOT_VERSION;
|
||||
di->d_flags = dquot->dq_type == USRQUOTA ?
|
||||
XFS_USER_QUOTA : XFS_GROUP_QUOTA;
|
||||
FS_USER_QUOTA : FS_GROUP_QUOTA;
|
||||
di->d_id = dquot->dq_id;
|
||||
|
||||
spin_lock(&dq_data_lock);
|
||||
|
|
|
|||
|
|
@ -65,8 +65,7 @@ static ssize_t write_blk(struct qtree_mem_dqinfo *info, uint blk, char *buf)
|
|||
ret = sb->s_op->quota_write(sb, info->dqi_type, buf,
|
||||
info->dqi_usable_bs, blk << info->dqi_blocksize_bits);
|
||||
if (ret != info->dqi_usable_bs) {
|
||||
q_warn(KERN_WARNING "VFS: dquota write failed on "
|
||||
"dev %s\n", sb->s_id);
|
||||
quota_error(sb, "dquota write failed");
|
||||
if (ret >= 0)
|
||||
ret = -EIO;
|
||||
}
|
||||
|
|
@ -160,9 +159,8 @@ static int remove_free_dqentry(struct qtree_mem_dqinfo *info, char *buf,
|
|||
dh->dqdh_next_free = dh->dqdh_prev_free = cpu_to_le32(0);
|
||||
/* No matter whether write succeeds block is out of list */
|
||||
if (write_blk(info, blk, buf) < 0)
|
||||
q_warn(KERN_ERR
|
||||
"VFS: Can't write block (%u) with free entries.\n",
|
||||
blk);
|
||||
quota_error(info->dqi_sb, "Can't write block (%u) "
|
||||
"with free entries", blk);
|
||||
return 0;
|
||||
out_buf:
|
||||
kfree(tmpbuf);
|
||||
|
|
@ -252,9 +250,8 @@ static uint find_free_dqentry(struct qtree_mem_dqinfo *info,
|
|||
if (le16_to_cpu(dh->dqdh_entries) + 1 >= qtree_dqstr_in_blk(info)) {
|
||||
*err = remove_free_dqentry(info, buf, blk);
|
||||
if (*err < 0) {
|
||||
q_warn(KERN_ERR "VFS: find_free_dqentry(): Can't "
|
||||
"remove block (%u) from entry free list.\n",
|
||||
blk);
|
||||
quota_error(dquot->dq_sb, "Can't remove block (%u) "
|
||||
"from entry free list", blk);
|
||||
goto out_buf;
|
||||
}
|
||||
}
|
||||
|
|
@ -268,16 +265,15 @@ static uint find_free_dqentry(struct qtree_mem_dqinfo *info,
|
|||
}
|
||||
#ifdef __QUOTA_QT_PARANOIA
|
||||
if (i == qtree_dqstr_in_blk(info)) {
|
||||
printk(KERN_ERR "VFS: find_free_dqentry(): Data block full "
|
||||
"but it shouldn't.\n");
|
||||
quota_error(dquot->dq_sb, "Data block full but it shouldn't");
|
||||
*err = -EIO;
|
||||
goto out_buf;
|
||||
}
|
||||
#endif
|
||||
*err = write_blk(info, blk, buf);
|
||||
if (*err < 0) {
|
||||
q_warn(KERN_ERR "VFS: find_free_dqentry(): Can't write quota "
|
||||
"data block %u.\n", blk);
|
||||
quota_error(dquot->dq_sb, "Can't write quota data block %u",
|
||||
blk);
|
||||
goto out_buf;
|
||||
}
|
||||
dquot->dq_off = (blk << info->dqi_blocksize_bits) +
|
||||
|
|
@ -311,8 +307,8 @@ static int do_insert_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot,
|
|||
} else {
|
||||
ret = read_blk(info, *treeblk, buf);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't read tree quota block "
|
||||
"%u.\n", *treeblk);
|
||||
quota_error(dquot->dq_sb, "Can't read tree quota "
|
||||
"block %u", *treeblk);
|
||||
goto out_buf;
|
||||
}
|
||||
}
|
||||
|
|
@ -323,9 +319,9 @@ static int do_insert_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot,
|
|||
if (depth == info->dqi_qtree_depth - 1) {
|
||||
#ifdef __QUOTA_QT_PARANOIA
|
||||
if (newblk) {
|
||||
printk(KERN_ERR "VFS: Inserting already present quota "
|
||||
"entry (block %u).\n",
|
||||
le32_to_cpu(ref[get_index(info,
|
||||
quota_error(dquot->dq_sb, "Inserting already present "
|
||||
"quota entry (block %u)",
|
||||
le32_to_cpu(ref[get_index(info,
|
||||
dquot->dq_id, depth)]));
|
||||
ret = -EIO;
|
||||
goto out_buf;
|
||||
|
|
@ -373,8 +369,8 @@ int qtree_write_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
|
|||
if (!dquot->dq_off) {
|
||||
ret = dq_insert_tree(info, dquot);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Error %zd occurred while "
|
||||
"creating quota.\n", ret);
|
||||
quota_error(sb, "Error %zd occurred while creating "
|
||||
"quota", ret);
|
||||
kfree(ddquot);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -385,8 +381,7 @@ int qtree_write_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
|
|||
ret = sb->s_op->quota_write(sb, type, ddquot, info->dqi_entry_size,
|
||||
dquot->dq_off);
|
||||
if (ret != info->dqi_entry_size) {
|
||||
q_warn(KERN_WARNING "VFS: dquota write failed on dev %s\n",
|
||||
sb->s_id);
|
||||
quota_error(sb, "dquota write failed");
|
||||
if (ret >= 0)
|
||||
ret = -ENOSPC;
|
||||
} else {
|
||||
|
|
@ -410,14 +405,15 @@ static int free_dqentry(struct qtree_mem_dqinfo *info, struct dquot *dquot,
|
|||
if (!buf)
|
||||
return -ENOMEM;
|
||||
if (dquot->dq_off >> info->dqi_blocksize_bits != blk) {
|
||||
q_warn(KERN_ERR "VFS: Quota structure has offset to other "
|
||||
"block (%u) than it should (%u).\n", blk,
|
||||
(uint)(dquot->dq_off >> info->dqi_blocksize_bits));
|
||||
quota_error(dquot->dq_sb, "Quota structure has offset to "
|
||||
"other block (%u) than it should (%u)", blk,
|
||||
(uint)(dquot->dq_off >> info->dqi_blocksize_bits));
|
||||
goto out_buf;
|
||||
}
|
||||
ret = read_blk(info, blk, buf);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't read quota data block %u\n", blk);
|
||||
quota_error(dquot->dq_sb, "Can't read quota data block %u",
|
||||
blk);
|
||||
goto out_buf;
|
||||
}
|
||||
dh = (struct qt_disk_dqdbheader *)buf;
|
||||
|
|
@ -427,8 +423,8 @@ static int free_dqentry(struct qtree_mem_dqinfo *info, struct dquot *dquot,
|
|||
if (ret >= 0)
|
||||
ret = put_free_dqblk(info, buf, blk);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't move quota data block (%u) "
|
||||
"to free list.\n", blk);
|
||||
quota_error(dquot->dq_sb, "Can't move quota data block "
|
||||
"(%u) to free list", blk);
|
||||
goto out_buf;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -440,15 +436,15 @@ static int free_dqentry(struct qtree_mem_dqinfo *info, struct dquot *dquot,
|
|||
/* Insert will write block itself */
|
||||
ret = insert_free_dqentry(info, buf, blk);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't insert quota data "
|
||||
"block (%u) to free entry list.\n", blk);
|
||||
quota_error(dquot->dq_sb, "Can't insert quota "
|
||||
"data block (%u) to free entry list", blk);
|
||||
goto out_buf;
|
||||
}
|
||||
} else {
|
||||
ret = write_blk(info, blk, buf);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't write quota data "
|
||||
"block %u\n", blk);
|
||||
quota_error(dquot->dq_sb, "Can't write quota "
|
||||
"data block %u", blk);
|
||||
goto out_buf;
|
||||
}
|
||||
}
|
||||
|
|
@ -472,7 +468,8 @@ static int remove_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot,
|
|||
return -ENOMEM;
|
||||
ret = read_blk(info, *blk, buf);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't read quota data block %u\n", *blk);
|
||||
quota_error(dquot->dq_sb, "Can't read quota data "
|
||||
"block %u", blk);
|
||||
goto out_buf;
|
||||
}
|
||||
newblk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]);
|
||||
|
|
@ -496,8 +493,8 @@ static int remove_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot,
|
|||
} else {
|
||||
ret = write_blk(info, *blk, buf);
|
||||
if (ret < 0)
|
||||
q_warn(KERN_ERR "VFS: Can't write quota tree "
|
||||
"block %u.\n", *blk);
|
||||
quota_error(dquot->dq_sb, "Can't write quota "
|
||||
"tree block %u", blk);
|
||||
}
|
||||
}
|
||||
out_buf:
|
||||
|
|
@ -529,7 +526,8 @@ static loff_t find_block_dqentry(struct qtree_mem_dqinfo *info,
|
|||
return -ENOMEM;
|
||||
ret = read_blk(info, blk, buf);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't read quota tree block %u.\n", blk);
|
||||
quota_error(dquot->dq_sb, "Can't read quota tree "
|
||||
"block %u", blk);
|
||||
goto out_buf;
|
||||
}
|
||||
ddquot = buf + sizeof(struct qt_disk_dqdbheader);
|
||||
|
|
@ -539,8 +537,8 @@ static loff_t find_block_dqentry(struct qtree_mem_dqinfo *info,
|
|||
ddquot += info->dqi_entry_size;
|
||||
}
|
||||
if (i == qtree_dqstr_in_blk(info)) {
|
||||
q_warn(KERN_ERR "VFS: Quota for id %u referenced "
|
||||
"but not present.\n", dquot->dq_id);
|
||||
quota_error(dquot->dq_sb, "Quota for id %u referenced "
|
||||
"but not present", dquot->dq_id);
|
||||
ret = -EIO;
|
||||
goto out_buf;
|
||||
} else {
|
||||
|
|
@ -564,7 +562,8 @@ static loff_t find_tree_dqentry(struct qtree_mem_dqinfo *info,
|
|||
return -ENOMEM;
|
||||
ret = read_blk(info, blk, buf);
|
||||
if (ret < 0) {
|
||||
q_warn(KERN_ERR "VFS: Can't read quota tree block %u.\n", blk);
|
||||
quota_error(dquot->dq_sb, "Can't read quota tree block %u",
|
||||
blk);
|
||||
goto out_buf;
|
||||
}
|
||||
ret = 0;
|
||||
|
|
@ -598,7 +597,7 @@ int qtree_read_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
|
|||
#ifdef __QUOTA_QT_PARANOIA
|
||||
/* Invalidated quota? */
|
||||
if (!sb_dqopt(dquot->dq_sb)->files[type]) {
|
||||
printk(KERN_ERR "VFS: Quota invalidated while reading!\n");
|
||||
quota_error(sb, "Quota invalidated while reading!");
|
||||
return -EIO;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -607,8 +606,8 @@ int qtree_read_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
|
|||
offset = find_dqentry(info, dquot);
|
||||
if (offset <= 0) { /* Entry not present? */
|
||||
if (offset < 0)
|
||||
q_warn(KERN_ERR "VFS: Can't read quota "
|
||||
"structure for id %u.\n", dquot->dq_id);
|
||||
quota_error(sb, "Can't read quota structure "
|
||||
"for id %u", dquot->dq_id);
|
||||
dquot->dq_off = 0;
|
||||
set_bit(DQ_FAKE_B, &dquot->dq_flags);
|
||||
memset(&dquot->dq_dqb, 0, sizeof(struct mem_dqblk));
|
||||
|
|
@ -625,8 +624,8 @@ int qtree_read_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
|
|||
if (ret != info->dqi_entry_size) {
|
||||
if (ret >= 0)
|
||||
ret = -EIO;
|
||||
q_warn(KERN_ERR "VFS: Error while reading quota "
|
||||
"structure for id %u.\n", dquot->dq_id);
|
||||
quota_error(sb, "Error while reading quota structure for id %u",
|
||||
dquot->dq_id);
|
||||
set_bit(DQ_FAKE_B, &dquot->dq_flags);
|
||||
memset(&dquot->dq_dqb, 0, sizeof(struct mem_dqblk));
|
||||
kfree(ddquot);
|
||||
|
|
|
|||
|
|
@ -22,10 +22,4 @@ struct qt_disk_dqdbheader {
|
|||
|
||||
#define QT_TREEOFF 1 /* Offset of tree in file in blocks */
|
||||
|
||||
#define q_warn(fmt, args...) \
|
||||
do { \
|
||||
if (printk_ratelimit()) \
|
||||
printk(fmt, ## args); \
|
||||
} while(0)
|
||||
|
||||
#endif /* _LINUX_QUOTAIO_TREE_H */
|
||||
|
|
|
|||
|
|
@ -95,8 +95,7 @@ static int v1_commit_dqblk(struct dquot *dquot)
|
|||
(char *)&dqblk, sizeof(struct v1_disk_dqblk),
|
||||
v1_dqoff(dquot->dq_id));
|
||||
if (ret != sizeof(struct v1_disk_dqblk)) {
|
||||
printk(KERN_WARNING "VFS: dquota write failed on dev %s\n",
|
||||
dquot->dq_sb->s_id);
|
||||
quota_error(dquot->dq_sb, "dquota write failed");
|
||||
if (ret >= 0)
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
|
|
|
|||
|
|
@ -63,9 +63,8 @@ static int v2_read_header(struct super_block *sb, int type,
|
|||
size = sb->s_op->quota_read(sb, type, (char *)dqhead,
|
||||
sizeof(struct v2_disk_dqheader), 0);
|
||||
if (size != sizeof(struct v2_disk_dqheader)) {
|
||||
q_warn(KERN_WARNING "quota_v2: Failed header read:"
|
||||
" expected=%zd got=%zd\n",
|
||||
sizeof(struct v2_disk_dqheader), size);
|
||||
quota_error(sb, "Failed header read: expected=%zd got=%zd",
|
||||
sizeof(struct v2_disk_dqheader), size);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
|
|
@ -106,8 +105,7 @@ static int v2_read_file_info(struct super_block *sb, int type)
|
|||
size = sb->s_op->quota_read(sb, type, (char *)&dinfo,
|
||||
sizeof(struct v2_disk_dqinfo), V2_DQINFOOFF);
|
||||
if (size != sizeof(struct v2_disk_dqinfo)) {
|
||||
q_warn(KERN_WARNING "quota_v2: Can't read info structure on device %s.\n",
|
||||
sb->s_id);
|
||||
quota_error(sb, "Can't read info structure");
|
||||
return -1;
|
||||
}
|
||||
info->dqi_priv = kmalloc(sizeof(struct qtree_mem_dqinfo), GFP_NOFS);
|
||||
|
|
@ -167,8 +165,7 @@ static int v2_write_file_info(struct super_block *sb, int type)
|
|||
size = sb->s_op->quota_write(sb, type, (char *)&dinfo,
|
||||
sizeof(struct v2_disk_dqinfo), V2_DQINFOOFF);
|
||||
if (size != sizeof(struct v2_disk_dqinfo)) {
|
||||
q_warn(KERN_WARNING "Can't write info structure on device %s.\n",
|
||||
sb->s_id);
|
||||
quota_error(sb, "Can't write info structure");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue