Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull UDF, ext3 & reiserfs fixes from Jan Kara: "A couple of fixes (udf, reiserfs, ext3) that accumulated over my vacation." * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: udf: fix retun value on error path in udf_load_logicalvol jbd: don't write superblock when unmounting an ro filesystem reiserfs: fix deadlocks with quotas quota: Move down dqptr_sem read after initializing default warn[] type at __dquot_alloc_space(). UDF: During mount free lvid_bh before rescanning with different blocksize udf: fix udf_setsize() for file data in ICB
This commit is contained in:
Коммит
62688e5b64
|
@ -1113,6 +1113,11 @@ static void mark_journal_empty(journal_t *journal)
|
|||
|
||||
BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
|
||||
spin_lock(&journal->j_state_lock);
|
||||
/* Is it already empty? */
|
||||
if (sb->s_start == 0) {
|
||||
spin_unlock(&journal->j_state_lock);
|
||||
return;
|
||||
}
|
||||
jbd_debug(1, "JBD: Marking journal as empty (seq %d)\n",
|
||||
journal->j_tail_sequence);
|
||||
|
||||
|
|
|
@ -1589,10 +1589,10 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags)
|
|||
goto out;
|
||||
}
|
||||
|
||||
down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
|
||||
for (cnt = 0; cnt < MAXQUOTAS; cnt++)
|
||||
warn[cnt].w_type = QUOTA_NL_NOWARN;
|
||||
|
||||
down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
|
||||
spin_lock(&dq_data_lock);
|
||||
for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
|
||||
if (!dquots[cnt])
|
||||
|
|
|
@ -1334,9 +1334,7 @@ struct buffer_head *reiserfs_read_bitmap_block(struct super_block *sb,
|
|||
else if (bitmap == 0)
|
||||
block = (REISERFS_DISK_OFFSET_IN_BYTES >> sb->s_blocksize_bits) + 1;
|
||||
|
||||
reiserfs_write_unlock(sb);
|
||||
bh = sb_bread(sb, block);
|
||||
reiserfs_write_lock(sb);
|
||||
if (bh == NULL)
|
||||
reiserfs_warning(sb, "sh-2029: %s: bitmap block (#%u) "
|
||||
"reading failed", __func__, block);
|
||||
|
|
|
@ -76,10 +76,10 @@ void reiserfs_evict_inode(struct inode *inode)
|
|||
;
|
||||
}
|
||||
out:
|
||||
reiserfs_write_unlock_once(inode->i_sb, depth);
|
||||
clear_inode(inode); /* note this must go after the journal_end to prevent deadlock */
|
||||
dquot_drop(inode);
|
||||
inode->i_blocks = 0;
|
||||
reiserfs_write_unlock_once(inode->i_sb, depth);
|
||||
return;
|
||||
|
||||
no_delete:
|
||||
|
|
|
@ -1124,14 +1124,17 @@ int udf_setsize(struct inode *inode, loff_t newsize)
|
|||
if (err)
|
||||
return err;
|
||||
down_write(&iinfo->i_data_sem);
|
||||
} else
|
||||
} else {
|
||||
iinfo->i_lenAlloc = newsize;
|
||||
goto set_size;
|
||||
}
|
||||
}
|
||||
err = udf_extend_file(inode, newsize);
|
||||
if (err) {
|
||||
up_write(&iinfo->i_data_sem);
|
||||
return err;
|
||||
}
|
||||
set_size:
|
||||
truncate_setsize(inode, newsize);
|
||||
up_write(&iinfo->i_data_sem);
|
||||
} else {
|
||||
|
|
|
@ -1344,6 +1344,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
|
|||
udf_err(sb, "error loading logical volume descriptor: "
|
||||
"Partition table too long (%u > %lu)\n", table_len,
|
||||
sb->s_blocksize - sizeof(*lvd));
|
||||
ret = 1;
|
||||
goto out_bh;
|
||||
}
|
||||
|
||||
|
@ -1388,8 +1389,10 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
|
|||
UDF_ID_SPARABLE,
|
||||
strlen(UDF_ID_SPARABLE))) {
|
||||
if (udf_load_sparable_map(sb, map,
|
||||
(struct sparablePartitionMap *)gpm) < 0)
|
||||
(struct sparablePartitionMap *)gpm) < 0) {
|
||||
ret = 1;
|
||||
goto out_bh;
|
||||
}
|
||||
} else if (!strncmp(upm2->partIdent.ident,
|
||||
UDF_ID_METADATA,
|
||||
strlen(UDF_ID_METADATA))) {
|
||||
|
@ -2000,6 +2003,8 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
|
|||
if (!silent)
|
||||
pr_notice("Rescanning with blocksize %d\n",
|
||||
UDF_DEFAULT_BLOCKSIZE);
|
||||
brelse(sbi->s_lvid_bh);
|
||||
sbi->s_lvid_bh = NULL;
|
||||
uopt.blocksize = UDF_DEFAULT_BLOCKSIZE;
|
||||
ret = udf_load_vrs(sb, &uopt, silent, &fileset);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче