Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7bf2fbcd authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ext4 regression fix from Theodore Ts'o:
 "This fixes a real brown paper bag bug which causes ext4 to choke on
  file systems larger than 512GB."

* tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
  ext4: fix extent status tree regression for file systems > 512GB
parents adf96e6f 8e919d13
Loading
Loading
Loading
Loading
+11 −8
Original line number Original line Diff line number Diff line
@@ -20,10 +20,13 @@
#define es_debug(fmt, ...)	no_printk(fmt, ##__VA_ARGS__)
#define es_debug(fmt, ...)	no_printk(fmt, ##__VA_ARGS__)
#endif
#endif


#define EXTENT_STATUS_WRITTEN	0x80000000	/* written extent */
/*
#define EXTENT_STATUS_UNWRITTEN	0x40000000	/* unwritten extent */
 * These flags live in the high bits of extent_status.es_pblk
#define EXTENT_STATUS_DELAYED	0x20000000	/* delayed extent */
 */
#define EXTENT_STATUS_HOLE	0x10000000	/* hole */
#define EXTENT_STATUS_WRITTEN	(1ULL << 63)
#define EXTENT_STATUS_UNWRITTEN (1ULL << 62)
#define EXTENT_STATUS_DELAYED	(1ULL << 61)
#define EXTENT_STATUS_HOLE	(1ULL << 60)


#define EXTENT_STATUS_FLAGS	(EXTENT_STATUS_WRITTEN | \
#define EXTENT_STATUS_FLAGS	(EXTENT_STATUS_WRITTEN | \
				 EXTENT_STATUS_UNWRITTEN | \
				 EXTENT_STATUS_UNWRITTEN | \
@@ -58,22 +61,22 @@ extern int ext4_es_lookup_extent(struct inode *inode, ext4_lblk_t lblk,


static inline int ext4_es_is_written(struct extent_status *es)
static inline int ext4_es_is_written(struct extent_status *es)
{
{
	return (es->es_pblk & EXTENT_STATUS_WRITTEN);
	return (es->es_pblk & EXTENT_STATUS_WRITTEN) != 0;
}
}


static inline int ext4_es_is_unwritten(struct extent_status *es)
static inline int ext4_es_is_unwritten(struct extent_status *es)
{
{
	return (es->es_pblk & EXTENT_STATUS_UNWRITTEN);
	return (es->es_pblk & EXTENT_STATUS_UNWRITTEN) != 0;
}
}


static inline int ext4_es_is_delayed(struct extent_status *es)
static inline int ext4_es_is_delayed(struct extent_status *es)
{
{
	return (es->es_pblk & EXTENT_STATUS_DELAYED);
	return (es->es_pblk & EXTENT_STATUS_DELAYED) != 0;
}
}


static inline int ext4_es_is_hole(struct extent_status *es)
static inline int ext4_es_is_hole(struct extent_status *es)
{
{
	return (es->es_pblk & EXTENT_STATUS_HOLE);
	return (es->es_pblk & EXTENT_STATUS_HOLE) != 0;
}
}


static inline ext4_fsblk_t ext4_es_status(struct extent_status *es)
static inline ext4_fsblk_t ext4_es_status(struct extent_status *es)