JFS fixes for 5.14
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEIodevzQLVs53l6BhNqiEXrVAjGQFAmDeGXwACgkQNqiEXrVA jGTONw/+J9mdqQW4zrrIotoO49wKpPv0Ub/XJqT+cDrae91w/lrOct2g0U12aG/e zkVeGDhWF4iqsVhyAPx1U6Dh0/rg3JlCSr3l2NYk7WKGwQSOFINtrXPMUfz1P9h1 M/Cvz9XIkIzATeEd6yrGdQyw5bcSQu3uF8o71ufdKJfeNkAxlhigw690vePMXPFp YSmBgLVM1ntp2apJyJiFYVNJqfbDL2bVWG3a+ENGXjD+b/8IsShTKM6VyEXRWGKa M1RjEW7i5kvoPtmbV5tLkySete+Bumv8ZRGoAv306tgABjWRkAZN31EzdZfBe5Io 8pK5USGaSVauP9E0wXV4irfaAuYPp1uAsZqzhxbRXLtTsLKJKrZKxjq9kZON3FPd tGY1v462zBrj79oN++Z7/bDxwbcfJ+OPid2Fev6SlsYfTndTp1cseLDsef574/vo 1P6DgCHNabHWZcjeI2ubMIM+W3+pAwjWUeeLOedCa7IZ6VKTwx+8RPEDNAxMq7lO 6fs+NUtbEd/veaTmicJnllvld1HcqS+H/sPSS7tHhTtoMTVG2bdpzyvvxGzKOxq+ IQNnNOLwg6LsH3z+uenU+fhnm5Z/b+iZsMG3LgXALu6JCDaZf/ygvyQfhhJS5n5r MJfWP2ZSpEf3yYcsoKvgFafVXv6p2fnibfB/2ecmyQ6Lz54U6hc= =li00 -----END PGP SIGNATURE----- Merge tag 'jfs-5.14' of git://github.com/kleikamp/linux-shaggy Pull jfs updates from David Kleikamp: "JFS fixes for 5.14" * tag 'jfs-5.14' of git://github.com/kleikamp/linux-shaggy: jfs: Avoid field-overflowing memcpy() jfs: remove unnecessary oom message jfs: fix GPF in diFree fs/jfs: Fix missing error code in lmLogInit() jfs: Remove trailing semicolon in macros fs: Fix typo issue
This commit is contained in:
commit
e4aa67b023
|
@ -151,7 +151,8 @@ void jfs_evict_inode(struct inode *inode)
|
||||||
if (test_cflag(COMMIT_Freewmap, inode))
|
if (test_cflag(COMMIT_Freewmap, inode))
|
||||||
jfs_free_zero_link(inode);
|
jfs_free_zero_link(inode);
|
||||||
|
|
||||||
diFree(inode);
|
if (JFS_SBI(inode->i_sb)->ipimap)
|
||||||
|
diFree(inode);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free the inode from the quota allocation.
|
* Free the inode from the quota allocation.
|
||||||
|
|
|
@ -101,7 +101,6 @@ struct dinode {
|
||||||
u8 unused[16]; /* 16: */
|
u8 unused[16]; /* 16: */
|
||||||
dxd_t _dxd; /* 16: */
|
dxd_t _dxd; /* 16: */
|
||||||
union {
|
union {
|
||||||
__le32 _rdev; /* 4: */
|
|
||||||
/*
|
/*
|
||||||
* The fast symlink area
|
* The fast symlink area
|
||||||
* is expected to overflow
|
* is expected to overflow
|
||||||
|
@ -109,9 +108,15 @@ struct dinode {
|
||||||
* needed (which will clear
|
* needed (which will clear
|
||||||
* INLINEEA).
|
* INLINEEA).
|
||||||
*/
|
*/
|
||||||
u8 _fastsymlink[128];
|
struct {
|
||||||
} _u;
|
union {
|
||||||
u8 _inlineea[128];
|
__le32 _rdev; /* 4: */
|
||||||
|
u8 _fastsymlink[128];
|
||||||
|
} _u;
|
||||||
|
u8 _inlineea[128];
|
||||||
|
};
|
||||||
|
u8 _inline_all[256];
|
||||||
|
};
|
||||||
} _special;
|
} _special;
|
||||||
} _u2;
|
} _u2;
|
||||||
} _file;
|
} _file;
|
||||||
|
@ -122,6 +127,7 @@ struct dinode {
|
||||||
#define di_rdev u._file._u2._special._u._rdev
|
#define di_rdev u._file._u2._special._u._rdev
|
||||||
#define di_fastsymlink u._file._u2._special._u._fastsymlink
|
#define di_fastsymlink u._file._u2._special._u._fastsymlink
|
||||||
#define di_inlineea u._file._u2._special._inlineea
|
#define di_inlineea u._file._u2._special._inlineea
|
||||||
|
#define di_inline_all u._file._u2._special._inline_all
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3660,7 +3660,7 @@ void dbFinalizeBmap(struct inode *ipbmap)
|
||||||
* (the leftmost ag with average free space in it);
|
* (the leftmost ag with average free space in it);
|
||||||
*/
|
*/
|
||||||
//agpref:
|
//agpref:
|
||||||
/* get the number of active ags and inacitve ags */
|
/* get the number of active ags and inactive ags */
|
||||||
actags = bmp->db_maxag + 1;
|
actags = bmp->db_maxag + 1;
|
||||||
inactags = bmp->db_numag - actags;
|
inactags = bmp->db_numag - actags;
|
||||||
ag_rem = bmp->db_mapsize & (bmp->db_agsize - 1); /* ??? */
|
ag_rem = bmp->db_mapsize & (bmp->db_agsize - 1); /* ??? */
|
||||||
|
|
|
@ -103,10 +103,8 @@ int diMount(struct inode *ipimap)
|
||||||
*/
|
*/
|
||||||
/* allocate the in-memory inode map control structure. */
|
/* allocate the in-memory inode map control structure. */
|
||||||
imap = kmalloc(sizeof(struct inomap), GFP_KERNEL);
|
imap = kmalloc(sizeof(struct inomap), GFP_KERNEL);
|
||||||
if (imap == NULL) {
|
if (imap == NULL)
|
||||||
jfs_err("diMount: kmalloc returned NULL!");
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
|
||||||
|
|
||||||
/* read the on-disk inode map control structure. */
|
/* read the on-disk inode map control structure. */
|
||||||
|
|
||||||
|
@ -763,7 +761,7 @@ int diWrite(tid_t tid, struct inode *ip)
|
||||||
lv = & dilinelock->lv[dilinelock->index];
|
lv = & dilinelock->lv[dilinelock->index];
|
||||||
lv->offset = (dioffset + 2 * 128) >> L2INODESLOTSIZE;
|
lv->offset = (dioffset + 2 * 128) >> L2INODESLOTSIZE;
|
||||||
lv->length = 2;
|
lv->length = 2;
|
||||||
memcpy(&dp->di_fastsymlink, jfs_ip->i_inline, IDATASIZE);
|
memcpy(&dp->di_inline_all, jfs_ip->i_inline_all, IDATASIZE);
|
||||||
dilinelock->index++;
|
dilinelock->index++;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -3084,7 +3082,7 @@ static int copy_from_dinode(struct dinode * dip, struct inode *ip)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (S_ISDIR(ip->i_mode)) {
|
if (S_ISDIR(ip->i_mode)) {
|
||||||
memcpy(&jfs_ip->i_dirtable, &dip->di_dirtable, 384);
|
memcpy(&jfs_ip->u.dir, &dip->u._dir, 384);
|
||||||
} else if (S_ISREG(ip->i_mode) || S_ISLNK(ip->i_mode)) {
|
} else if (S_ISREG(ip->i_mode) || S_ISLNK(ip->i_mode)) {
|
||||||
memcpy(&jfs_ip->i_xtroot, &dip->di_xtroot, 288);
|
memcpy(&jfs_ip->i_xtroot, &dip->di_xtroot, 288);
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -77,11 +77,18 @@ struct jfs_inode_info {
|
||||||
unchar _unused[16]; /* 16: */
|
unchar _unused[16]; /* 16: */
|
||||||
dxd_t _dxd; /* 16: */
|
dxd_t _dxd; /* 16: */
|
||||||
/* _inline may overflow into _inline_ea when needed */
|
/* _inline may overflow into _inline_ea when needed */
|
||||||
unchar _inline[128]; /* 128: inline symlink */
|
|
||||||
/* _inline_ea may overlay the last part of
|
/* _inline_ea may overlay the last part of
|
||||||
* file._xtroot if maxentry = XTROOTINITSLOT
|
* file._xtroot if maxentry = XTROOTINITSLOT
|
||||||
*/
|
*/
|
||||||
unchar _inline_ea[128]; /* 128: inline extended attr */
|
union {
|
||||||
|
struct {
|
||||||
|
/* 128: inline symlink */
|
||||||
|
unchar _inline[128];
|
||||||
|
/* 128: inline extended attr */
|
||||||
|
unchar _inline_ea[128];
|
||||||
|
};
|
||||||
|
unchar _inline_all[256];
|
||||||
|
};
|
||||||
} link;
|
} link;
|
||||||
} u;
|
} u;
|
||||||
#ifdef CONFIG_QUOTA
|
#ifdef CONFIG_QUOTA
|
||||||
|
@ -96,6 +103,7 @@ struct jfs_inode_info {
|
||||||
#define i_dtroot u.dir._dtroot
|
#define i_dtroot u.dir._dtroot
|
||||||
#define i_inline u.link._inline
|
#define i_inline u.link._inline
|
||||||
#define i_inline_ea u.link._inline_ea
|
#define i_inline_ea u.link._inline_ea
|
||||||
|
#define i_inline_all u.link._inline_all
|
||||||
|
|
||||||
#define IREAD_LOCK(ip, subclass) \
|
#define IREAD_LOCK(ip, subclass) \
|
||||||
down_read_nested(&JFS_IP(ip)->rdwrlock, subclass)
|
down_read_nested(&JFS_IP(ip)->rdwrlock, subclass)
|
||||||
|
|
|
@ -1324,6 +1324,7 @@ int lmLogInit(struct jfs_log * log)
|
||||||
} else {
|
} else {
|
||||||
if (!uuid_equal(&logsuper->uuid, &log->uuid)) {
|
if (!uuid_equal(&logsuper->uuid, &log->uuid)) {
|
||||||
jfs_warn("wrong uuid on JFS log device");
|
jfs_warn("wrong uuid on JFS log device");
|
||||||
|
rc = -EINVAL;
|
||||||
goto errout20;
|
goto errout20;
|
||||||
}
|
}
|
||||||
log->size = le32_to_cpu(logsuper->size);
|
log->size = le32_to_cpu(logsuper->size);
|
||||||
|
|
|
@ -105,7 +105,7 @@ static DEFINE_SPINLOCK(jfsTxnLock);
|
||||||
#define TXN_LOCK() spin_lock(&jfsTxnLock)
|
#define TXN_LOCK() spin_lock(&jfsTxnLock)
|
||||||
#define TXN_UNLOCK() spin_unlock(&jfsTxnLock)
|
#define TXN_UNLOCK() spin_unlock(&jfsTxnLock)
|
||||||
|
|
||||||
#define LAZY_LOCK_INIT() spin_lock_init(&TxAnchor.LazyLock);
|
#define LAZY_LOCK_INIT() spin_lock_init(&TxAnchor.LazyLock)
|
||||||
#define LAZY_LOCK(flags) spin_lock_irqsave(&TxAnchor.LazyLock, flags)
|
#define LAZY_LOCK(flags) spin_lock_irqsave(&TxAnchor.LazyLock, flags)
|
||||||
#define LAZY_UNLOCK(flags) spin_unlock_irqrestore(&TxAnchor.LazyLock, flags)
|
#define LAZY_UNLOCK(flags) spin_unlock_irqrestore(&TxAnchor.LazyLock, flags)
|
||||||
|
|
||||||
|
|
|
@ -939,7 +939,8 @@ static int __init init_jfs_fs(void)
|
||||||
jfs_inode_cachep =
|
jfs_inode_cachep =
|
||||||
kmem_cache_create_usercopy("jfs_ip", sizeof(struct jfs_inode_info),
|
kmem_cache_create_usercopy("jfs_ip", sizeof(struct jfs_inode_info),
|
||||||
0, SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|SLAB_ACCOUNT,
|
0, SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|SLAB_ACCOUNT,
|
||||||
offsetof(struct jfs_inode_info, i_inline), IDATASIZE,
|
offsetof(struct jfs_inode_info, i_inline_all),
|
||||||
|
sizeof_field(struct jfs_inode_info, i_inline_all),
|
||||||
init_once);
|
init_once);
|
||||||
if (jfs_inode_cachep == NULL)
|
if (jfs_inode_cachep == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
Loading…
Reference in New Issue