FAILED: patch "[PATCH] staging: erofs: fix race of initializing xattrs of a inode at" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 62dc45979f3f8cb0ea67302a93bff686f0c46c5a Mon Sep 17 00:00:00 2001
From: Gao Xiang <[email protected]>
Date: Mon, 18 Feb 2019 15:19:04 +0800
Subject: [PATCH] staging: erofs: fix race of initializing xattrs of a inode at
the same time
In real scenario, there could be several threads accessing xattrs of the same xattr-uninitialized inode, and init_inode_xattrs() almost at the same time.
That's actually an unexpected behavior, this patch closes the race.
drivers/staging/erofs/internal.h +8 -3
@@ -327,12 +327,17 @@ static inline erofs_off_t iloc(struct erofs_sb_info *sbi, erofs_nid_t nid)return blknr_to_addr (sbi->meta_blkaddr) + (nid << sbi->islotbits); } -#define inode_set_inited_xattr (inode) (EROFS_V(inode)->flags |= 1) -#define inode_has_inited_xattr (inode) (EROFS_V(inode)->flags & 1) +/* atomic flag definitions */ +#define EROFS_V_EA_INITED_BIT 0 + +/* bitlock definitions (arranged in reverse order) */ +#define EROFS_V_BL_XATTR_BIT (BITS_PER_LONG - 1)struct erofs_vnode {erofs_nid_t nid; -unsigned int flags; + +/* atomic flags (including bitlocks) */ +unsigned long flags;unsigned char data_mapping_mode;/* inline size in bytes */
drivers/staging/erofs/xattr.c +29 -12
90 lines not on this page · raw message