forked from Minki/linux
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,6 +151,7 @@ void jfs_evict_inode(struct inode *inode)
|
||||
if (test_cflag(COMMIT_Freewmap, inode))
|
||||
jfs_free_zero_link(inode);
|
||||
|
||||
if (JFS_SBI(inode->i_sb)->ipimap)
|
||||
diFree(inode);
|
||||
|
||||
/*
|
||||
|
@ -101,7 +101,6 @@ struct dinode {
|
||||
u8 unused[16]; /* 16: */
|
||||
dxd_t _dxd; /* 16: */
|
||||
union {
|
||||
__le32 _rdev; /* 4: */
|
||||
/*
|
||||
* The fast symlink area
|
||||
* is expected to overflow
|
||||
@ -109,9 +108,15 @@ struct dinode {
|
||||
* needed (which will clear
|
||||
* INLINEEA).
|
||||
*/
|
||||
struct {
|
||||
union {
|
||||
__le32 _rdev; /* 4: */
|
||||
u8 _fastsymlink[128];
|
||||
} _u;
|
||||
u8 _inlineea[128];
|
||||
};
|
||||
u8 _inline_all[256];
|
||||
};
|
||||
} _special;
|
||||
} _u2;
|
||||
} _file;
|
||||
@ -122,6 +127,7 @@ struct dinode {
|
||||
#define di_rdev u._file._u2._special._u._rdev
|
||||
#define di_fastsymlink u._file._u2._special._u._fastsymlink
|
||||
#define di_inlineea u._file._u2._special._inlineea
|
||||
#define di_inline_all u._file._u2._special._inline_all
|
||||
} u;
|
||||
};
|
||||
|
||||
|
@ -3660,7 +3660,7 @@ void dbFinalizeBmap(struct inode *ipbmap)
|
||||
* (the leftmost ag with average free space in it);
|
||||
*/
|
||||
//agpref:
|
||||
/* get the number of active ags and inacitve ags */
|
||||
/* get the number of active ags and inactive ags */
|
||||
actags = bmp->db_maxag + 1;
|
||||
inactags = bmp->db_numag - actags;
|
||||
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. */
|
||||
imap = kmalloc(sizeof(struct inomap), GFP_KERNEL);
|
||||
if (imap == NULL) {
|
||||
jfs_err("diMount: kmalloc returned NULL!");
|
||||
if (imap == NULL)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* 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->offset = (dioffset + 2 * 128) >> L2INODESLOTSIZE;
|
||||
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++;
|
||||
}
|
||||
/*
|
||||
@ -3084,7 +3082,7 @@ static int copy_from_dinode(struct dinode * dip, struct inode *ip)
|
||||
}
|
||||
|
||||
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)) {
|
||||
memcpy(&jfs_ip->i_xtroot, &dip->di_xtroot, 288);
|
||||
} else
|
||||
|
@ -77,11 +77,18 @@ struct jfs_inode_info {
|
||||
unchar _unused[16]; /* 16: */
|
||||
dxd_t _dxd; /* 16: */
|
||||
/* _inline may overflow into _inline_ea when needed */
|
||||
unchar _inline[128]; /* 128: inline symlink */
|
||||
/* _inline_ea may overlay the last part of
|
||||
* 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;
|
||||
} u;
|
||||
#ifdef CONFIG_QUOTA
|
||||
@ -96,6 +103,7 @@ struct jfs_inode_info {
|
||||
#define i_dtroot u.dir._dtroot
|
||||
#define i_inline u.link._inline
|
||||
#define i_inline_ea u.link._inline_ea
|
||||
#define i_inline_all u.link._inline_all
|
||||
|
||||
#define IREAD_LOCK(ip, subclass) \
|
||||
down_read_nested(&JFS_IP(ip)->rdwrlock, subclass)
|
||||
|
@ -1324,6 +1324,7 @@ int lmLogInit(struct jfs_log * log)
|
||||
} else {
|
||||
if (!uuid_equal(&logsuper->uuid, &log->uuid)) {
|
||||
jfs_warn("wrong uuid on JFS log device");
|
||||
rc = -EINVAL;
|
||||
goto errout20;
|
||||
}
|
||||
log->size = le32_to_cpu(logsuper->size);
|
||||
|
@ -105,7 +105,7 @@ static DEFINE_SPINLOCK(jfsTxnLock);
|
||||
#define TXN_LOCK() spin_lock(&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_UNLOCK(flags) spin_unlock_irqrestore(&TxAnchor.LazyLock, flags)
|
||||
|
||||
|
@ -939,7 +939,8 @@ static int __init init_jfs_fs(void)
|
||||
jfs_inode_cachep =
|
||||
kmem_cache_create_usercopy("jfs_ip", sizeof(struct jfs_inode_info),
|
||||
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);
|
||||
if (jfs_inode_cachep == NULL)
|
||||
return -ENOMEM;
|
||||
|
Loading…
Reference in New Issue
Block a user