f2fs: fix the use of XATTR_NODE_OFFSET
This patch fixes the use of XATTR_NODE_OFFSET. o The offset should not use several MSB bits which are used by marking node blocks. o IS_DNODE should handle XATTR_NODE_OFFSET to avoid potential abnormality during the fsync call. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This commit is contained in:
parent
c2d715d144
commit
dbe6a5ff4f
2 changed files with 11 additions and 5 deletions
|
@ -135,11 +135,13 @@ static inline int update_sits_in_cursum(struct f2fs_summary_block *rs, int i)
|
|||
/*
|
||||
* For INODE and NODE manager
|
||||
*/
|
||||
#define XATTR_NODE_OFFSET (-1) /*
|
||||
* store xattrs to one node block per
|
||||
* file keeping -1 as its node offset to
|
||||
* distinguish from index node blocks.
|
||||
*/
|
||||
/*
|
||||
* XATTR_NODE_OFFSET stores xattrs to one node block per file keeping -1
|
||||
* as its node offset to distinguish from index node blocks.
|
||||
* But some bits are used to mark the node block.
|
||||
*/
|
||||
#define XATTR_NODE_OFFSET ((((unsigned int)-1) << OFFSET_BIT_SHIFT) \
|
||||
>> OFFSET_BIT_SHIFT)
|
||||
enum {
|
||||
ALLOC_NODE, /* allocate a new node page if needed */
|
||||
LOOKUP_NODE, /* look up a node without readahead */
|
||||
|
|
|
@ -229,6 +229,10 @@ static inline block_t next_blkaddr_of_node(struct page *node_page)
|
|||
static inline bool IS_DNODE(struct page *node_page)
|
||||
{
|
||||
unsigned int ofs = ofs_of_node(node_page);
|
||||
|
||||
if (ofs == XATTR_NODE_OFFSET)
|
||||
return false;
|
||||
|
||||
if (ofs == 3 || ofs == 4 + NIDS_PER_BLOCK ||
|
||||
ofs == 5 + 2 * NIDS_PER_BLOCK)
|
||||
return false;
|
||||
|
|
Loading…
Reference in a new issue