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:
+2
-1
@@ -151,7 +151,8 @@ void jfs_evict_inode(struct inode *inode)
|
||||
if (test_cflag(COMMIT_Freewmap, inode))
|
||||
jfs_free_zero_link(inode);
|
||||
|
||||
diFree(inode);
|
||||
if (JFS_SBI(inode->i_sb)->ipimap)
|
||||
diFree(inode);
|
||||
|
||||
/*
|
||||
* Free the inode from the quota allocation.
|
||||
|
||||
+10
-4
@@ -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).
|
||||
*/
|
||||
u8 _fastsymlink[128];
|
||||
} _u;
|
||||
u8 _inlineea[128];
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -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); /* ??? */
|
||||
|
||||
+3
-5
@@ -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
|
||||
|
||||
+10
-2
@@ -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);
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
|
||||
+2
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user