-----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEq1nRK9aeMoq1VSgcnJ2qBz9kQNkFAlssqQcACgkQnJ2qBz9k QNl2XwgAhtb2LvBhWKh3OkBVczICgc9eQho03KiHJkEcR1OCkgjOJhVBDrQmJbBa tAuMmUcnTpLJG8CI5TyR0G4hNbttE2LuTu+6RV67hXOjhiYAQ5P9wYLyUqfZf/01 myrPEewr9qqx3h2htqufiLQIyO1M4FeM37VqdH7vZhQOb+B+FUw7JB9a/HbCpNh/ 7NUDf2GbLtLjK+2Xh0ttXvfWjgbLjC4wMmaPaa5+Nabn+URtvX9aHgQ/dYrOjQ16 7oD5K5x3k3sOT6Ix7xRGLHgE6Xl6MlTtxpyt5ldb96RwWO/GAuMhSCBd14nS2hmx fEx5N2vbs3v8Ux+ZdMauzAKZI6Fz2g== =oFo+ -----END PGP SIGNATURE----- Merge tag 'for_v4.18-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs Pull udf, quota, ext2 fixes from Jan Kara: "UDF: - fix an oops due to corrupted disk image - two small cleanups quota: - a fixfor lru handling - cleanup ext2: - a warning about a deprecated mount option" * tag 'for_v4.18-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: udf: Drop unused arguments of udf_delete_aext() udf: Provide function for calculating dir entry length udf: Detect incorrect directory size ext2: add warning when specifying nocheck option quota: Cleanup list iteration in dqcache_shrink_scan() quota: reclaim least recently used dquots
This commit is contained in:
commit
894b8c000a
|
@ -748,7 +748,6 @@ extern void ext2_free_blocks (struct inode *, unsigned long,
|
|||
unsigned long);
|
||||
extern unsigned long ext2_count_free_blocks (struct super_block *);
|
||||
extern unsigned long ext2_count_dirs (struct super_block *);
|
||||
extern void ext2_check_blocks_bitmap (struct super_block *);
|
||||
extern struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
|
||||
unsigned int block_group,
|
||||
struct buffer_head ** bh);
|
||||
|
@ -771,7 +770,6 @@ extern void ext2_set_link(struct inode *, struct ext2_dir_entry_2 *, struct page
|
|||
extern struct inode * ext2_new_inode (struct inode *, umode_t, const struct qstr *);
|
||||
extern void ext2_free_inode (struct inode *);
|
||||
extern unsigned long ext2_count_free_inodes (struct super_block *);
|
||||
extern void ext2_check_inodes_bitmap (struct super_block *);
|
||||
extern unsigned long ext2_count_free (struct buffer_head *, unsigned);
|
||||
|
||||
/* inode.c */
|
||||
|
|
|
@ -557,6 +557,9 @@ static int parse_options(char *options, struct super_block *sb,
|
|||
set_opt (opts->s_mount_opt, NO_UID32);
|
||||
break;
|
||||
case Opt_nocheck:
|
||||
ext2_msg(sb, KERN_WARNING,
|
||||
"Option nocheck/check=none is deprecated and"
|
||||
" will be removed in June 2020.");
|
||||
clear_opt (opts->s_mount_opt, CHECK);
|
||||
break;
|
||||
case Opt_debug:
|
||||
|
@ -1335,9 +1338,6 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
|
|||
new_opts.s_resgid = sbi->s_resgid;
|
||||
spin_unlock(&sbi->s_lock);
|
||||
|
||||
/*
|
||||
* Allow the "check" option to be passed as a remount option.
|
||||
*/
|
||||
if (!parse_options(data, sb, &new_opts))
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -711,21 +711,18 @@ EXPORT_SYMBOL(dquot_quota_sync);
|
|||
static unsigned long
|
||||
dqcache_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
|
||||
{
|
||||
struct list_head *head;
|
||||
struct dquot *dquot;
|
||||
unsigned long freed = 0;
|
||||
|
||||
spin_lock(&dq_list_lock);
|
||||
head = free_dquots.prev;
|
||||
while (head != &free_dquots && sc->nr_to_scan) {
|
||||
dquot = list_entry(head, struct dquot, dq_free);
|
||||
while (!list_empty(&free_dquots) && sc->nr_to_scan) {
|
||||
dquot = list_first_entry(&free_dquots, struct dquot, dq_free);
|
||||
remove_dquot_hash(dquot);
|
||||
remove_free_dquot(dquot);
|
||||
remove_inuse(dquot);
|
||||
do_destroy_dquot(dquot);
|
||||
sc->nr_to_scan--;
|
||||
freed++;
|
||||
head = free_dquots.prev;
|
||||
}
|
||||
spin_unlock(&dq_list_lock);
|
||||
return freed;
|
||||
|
|
|
@ -533,8 +533,7 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
|
|||
udf_write_aext(table, &epos, &eloc,
|
||||
(etype << 30) | elen, 1);
|
||||
} else
|
||||
udf_delete_aext(table, epos, eloc,
|
||||
(etype << 30) | elen);
|
||||
udf_delete_aext(table, epos);
|
||||
} else {
|
||||
alloc_count = 0;
|
||||
}
|
||||
|
@ -630,7 +629,7 @@ static udf_pblk_t udf_table_new_block(struct super_block *sb,
|
|||
if (goal_elen)
|
||||
udf_write_aext(table, &goal_epos, &goal_eloc, goal_elen, 1);
|
||||
else
|
||||
udf_delete_aext(table, goal_epos, goal_eloc, goal_elen);
|
||||
udf_delete_aext(table, goal_epos);
|
||||
brelse(goal_epos.bh);
|
||||
|
||||
udf_add_free_space(sb, partition, -1);
|
||||
|
|
|
@ -141,10 +141,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
|
|||
fibh->ebh->b_data,
|
||||
sizeof(struct fileIdentDesc) + fibh->soffset);
|
||||
|
||||
fi_len = (sizeof(struct fileIdentDesc) +
|
||||
cfi->lengthFileIdent +
|
||||
le16_to_cpu(cfi->lengthOfImpUse) + 3) & ~3;
|
||||
|
||||
fi_len = udf_dir_entry_len(cfi);
|
||||
*nf_pos += fi_len - (fibh->eoffset - fibh->soffset);
|
||||
fibh->eoffset = fibh->soffset + fi_len;
|
||||
} else {
|
||||
|
@ -152,6 +149,9 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
|
|||
sizeof(struct fileIdentDesc));
|
||||
}
|
||||
}
|
||||
/* Got last entry outside of dir size - fs is corrupted! */
|
||||
if (*nf_pos > dir->i_size)
|
||||
return NULL;
|
||||
return fi;
|
||||
}
|
||||
|
||||
|
|
|
@ -1147,8 +1147,7 @@ static void udf_update_extents(struct inode *inode, struct kernel_long_ad *laarr
|
|||
|
||||
if (startnum > endnum) {
|
||||
for (i = 0; i < (startnum - endnum); i++)
|
||||
udf_delete_aext(inode, *epos, laarr[i].extLocation,
|
||||
laarr[i].extLength);
|
||||
udf_delete_aext(inode, *epos);
|
||||
} else if (startnum < endnum) {
|
||||
for (i = 0; i < (endnum - startnum); i++) {
|
||||
udf_insert_aext(inode, *epos, laarr[i].extLocation,
|
||||
|
@ -2176,14 +2175,15 @@ static int8_t udf_insert_aext(struct inode *inode, struct extent_position epos,
|
|||
return (nelen >> 30);
|
||||
}
|
||||
|
||||
int8_t udf_delete_aext(struct inode *inode, struct extent_position epos,
|
||||
struct kernel_lb_addr eloc, uint32_t elen)
|
||||
int8_t udf_delete_aext(struct inode *inode, struct extent_position epos)
|
||||
{
|
||||
struct extent_position oepos;
|
||||
int adsize;
|
||||
int8_t etype;
|
||||
struct allocExtDesc *aed;
|
||||
struct udf_inode_info *iinfo;
|
||||
struct kernel_lb_addr eloc;
|
||||
uint32_t elen;
|
||||
|
||||
if (epos.bh) {
|
||||
get_bh(epos.bh);
|
||||
|
|
|
@ -351,8 +351,6 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
|
|||
loff_t f_pos;
|
||||
loff_t size = udf_ext0_offset(dir) + dir->i_size;
|
||||
int nfidlen;
|
||||
uint8_t lfi;
|
||||
uint16_t liu;
|
||||
udf_pblk_t block;
|
||||
struct kernel_lb_addr eloc;
|
||||
uint32_t elen = 0;
|
||||
|
@ -383,7 +381,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
|
|||
namelen = 0;
|
||||
}
|
||||
|
||||
nfidlen = (sizeof(struct fileIdentDesc) + namelen + 3) & ~3;
|
||||
nfidlen = ALIGN(sizeof(struct fileIdentDesc) + namelen, UDF_NAME_PAD);
|
||||
|
||||
f_pos = udf_ext0_offset(dir);
|
||||
|
||||
|
@ -424,12 +422,8 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
|
|||
goto out_err;
|
||||
}
|
||||
|
||||
liu = le16_to_cpu(cfi->lengthOfImpUse);
|
||||
lfi = cfi->lengthFileIdent;
|
||||
|
||||
if ((cfi->fileCharacteristics & FID_FILE_CHAR_DELETED) != 0) {
|
||||
if (((sizeof(struct fileIdentDesc) +
|
||||
liu + lfi + 3) & ~3) == nfidlen) {
|
||||
if (udf_dir_entry_len(cfi) == nfidlen) {
|
||||
cfi->descTag.tagSerialNum = cpu_to_le16(1);
|
||||
cfi->fileVersionNum = cpu_to_le16(1);
|
||||
cfi->fileCharacteristics = 0;
|
||||
|
@ -1201,9 +1195,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
|
||||
if (dir_fi) {
|
||||
dir_fi->icb.extLocation = cpu_to_lelb(UDF_I(new_dir)->i_location);
|
||||
udf_update_tag((char *)dir_fi,
|
||||
(sizeof(struct fileIdentDesc) +
|
||||
le16_to_cpu(dir_fi->lengthOfImpUse) + 3) & ~3);
|
||||
udf_update_tag((char *)dir_fi, udf_dir_entry_len(dir_fi));
|
||||
if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
|
||||
mark_inode_dirty(old_inode);
|
||||
else
|
||||
|
|
|
@ -132,6 +132,12 @@ struct inode *udf_find_metadata_inode_efe(struct super_block *sb,
|
|||
extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *,
|
||||
struct fileIdentDesc *, struct udf_fileident_bh *,
|
||||
uint8_t *, uint8_t *);
|
||||
static inline unsigned int udf_dir_entry_len(struct fileIdentDesc *cfi)
|
||||
{
|
||||
return ALIGN(sizeof(struct fileIdentDesc) +
|
||||
le16_to_cpu(cfi->lengthOfImpUse) + cfi->lengthFileIdent,
|
||||
UDF_NAME_PAD);
|
||||
}
|
||||
|
||||
/* file.c */
|
||||
extern long udf_ioctl(struct file *, unsigned int, unsigned long);
|
||||
|
@ -167,8 +173,7 @@ extern int udf_add_aext(struct inode *, struct extent_position *,
|
|||
struct kernel_lb_addr *, uint32_t, int);
|
||||
extern void udf_write_aext(struct inode *, struct extent_position *,
|
||||
struct kernel_lb_addr *, uint32_t, int);
|
||||
extern int8_t udf_delete_aext(struct inode *, struct extent_position,
|
||||
struct kernel_lb_addr, uint32_t);
|
||||
extern int8_t udf_delete_aext(struct inode *, struct extent_position);
|
||||
extern int8_t udf_next_aext(struct inode *, struct extent_position *,
|
||||
struct kernel_lb_addr *, uint32_t *, int);
|
||||
extern int8_t udf_current_aext(struct inode *, struct extent_position *,
|
||||
|
|
Loading…
Reference in New Issue