diff --git a/.gitignore b/.gitignore
index c8a54ce..e877b82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,3 +68,4 @@
 /btrfs-progs-v5.6.1.tar.xz
 /btrfs-progs-v5.7-rc1.tar.xz
 /btrfs-progs-v5.7.tar.xz
+/btrfs-progs-v5.9.tar.xz
diff --git a/0001-btrfs-progs-convert-prevent-32bit-overflow-for-cctx-.patch b/0001-btrfs-progs-convert-prevent-32bit-overflow-for-cctx-.patch
deleted file mode 100644
index 6fc0f3f..0000000
--- a/0001-btrfs-progs-convert-prevent-32bit-overflow-for-cctx-.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From fe8715e1337a1bad5c49e165ab77c033c334efbc Mon Sep 17 00:00:00 2001
-From: Qu Wenruo <wqu@suse.com>
-Date: Mon, 20 Jul 2020 20:51:08 +0800
-Subject: [PATCH 1/2] btrfs-progs: convert: prevent 32bit overflow for
- cctx->total_bytes
-
-[BUG]
-When convert is called on a 64GiB ext4 fs, it fails like this:
-
-  $ btrfs-convert  /dev/loop0p1
-  create btrfs filesystem:
-          blocksize: 4096
-          nodesize:  16384
-          features:  extref, skinny-metadata (default)
-          checksum:  crc32c
-  creating ext2 image file
-  ERROR: missing data block for bytenr 1048576
-  ERROR: failed to create ext2_saved/image: -2
-  WARNING: an error occurred during conversion, filesystem is partially created but not finalized and not mountable
-
-Btrfs-convert also corrupts the source fs:
-
-  $ LANG=C e2fsck /dev/loop0p1 -f
-  e2fsck 1.45.6 (20-Mar-2020)
-  Resize inode not valid.  Recreate<y>? yes
-  Pass 1: Checking inodes, blocks, and sizes
-  Deleted inode 3681 has zero dtime.  Fix<y>? yes
-  Inodes that were part of a corrupted orphan linked list found.  Fix<y>? yes
-  Inode 3744 was part of the orphaned inode list.  FIXED.
-  Deleted inode 3745 has zero dtime.  Fix<y>? yes
-  Inode 3747 has INLINE_DATA_FL flag on filesystem without inline data support.
-  Clear<y>? yes
-  ...
-
-[CAUSE]
-After some debugging, the first strange behavior is, the value of
-cctx->total_bytes is 0 in ext2_open_fs().
-
-It turns out that, the value assign for cctx->total_bytes could lead to
-bit overflow for the unsigned int value.
-
-And that 0 cctx->total_bytes leads to various problems for later free
-space calculation.
-For example, in calculate_available_space(), we use cctx->total_bytes to
-ensure we won't create a data chunk beyond device end:
-
-		cue_len = min(cctx->total_bytes - cur_off, cur_len);
-
-If that cur_offset is also 0, we will create a cache_extent with 0 size,
-which could cause a lot of problems for cache tree search.
-
-[FIX]
-Do manual casting for the multiply operation, so we could got a real u64
-result.  The fix will be applied to all supported fses (ext* and
-reiserfs).
-
-Reported-by: Christian Zangl <coralllama@gmail.com>
-Reviewed-by: Nikolay Borisov <nborisov@suse.com>
-Signed-off-by: Qu Wenruo <wqu@suse.com>
-Signed-off-by: David Sterba <dsterba@suse.com>
-(cherry picked from commit 670a19828ad40004d05ad70cdd45d58008d3fb51)
----
- convert/main.c            | 1 +
- convert/source-ext2.c     | 2 +-
- convert/source-reiserfs.c | 2 +-
- 3 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/convert/main.c b/convert/main.c
-index 7709e9a6..df6a2ae3 100644
---- a/convert/main.c
-+++ b/convert/main.c
-@@ -1136,6 +1136,7 @@ static int do_convert(const char *devname, u32 convert_flags, u32 nodesize,
- 	if (ret)
- 		goto fail;
- 
-+	ASSERT(cctx.total_bytes);
- 	blocksize = cctx.blocksize;
- 	total_bytes = (u64)blocksize * (u64)cctx.block_count;
- 	if (blocksize < 4096) {
-diff --git a/convert/source-ext2.c b/convert/source-ext2.c
-index f11ef651..d73684ef 100644
---- a/convert/source-ext2.c
-+++ b/convert/source-ext2.c
-@@ -87,7 +87,7 @@ static int ext2_open_fs(struct btrfs_convert_context *cctx, const char *name)
- 	cctx->fs_data = ext2_fs;
- 	cctx->blocksize = ext2_fs->blocksize;
- 	cctx->block_count = ext2_fs->super->s_blocks_count;
--	cctx->total_bytes = ext2_fs->blocksize * ext2_fs->super->s_blocks_count;
-+	cctx->total_bytes = (u64)ext2_fs->super->s_blocks_count * ext2_fs->blocksize;
- 	cctx->volume_name = strndup((char *)ext2_fs->super->s_volume_name, 16);
- 	cctx->first_data_block = ext2_fs->super->s_first_data_block;
- 	cctx->inodes_count = ext2_fs->super->s_inodes_count;
-diff --git a/convert/source-reiserfs.c b/convert/source-reiserfs.c
-index 9fd6b9ab..3b4cb5ad 100644
---- a/convert/source-reiserfs.c
-+++ b/convert/source-reiserfs.c
-@@ -82,7 +82,7 @@ static int reiserfs_open_fs(struct btrfs_convert_context *cxt, const char *name)
- 	cxt->fs_data = fs;
- 	cxt->blocksize = fs->fs_blocksize;
- 	cxt->block_count = get_sb_block_count(fs->fs_ondisk_sb);
--	cxt->total_bytes = cxt->blocksize * cxt->block_count;
-+	cxt->total_bytes = (u64)cxt->block_count * cxt->blocksize;
- 	cxt->volume_name = strndup(fs->fs_ondisk_sb->s_label, 16);
- 	cxt->first_data_block = 0;
- 	cxt->inodes_count = reiserfs_count_objectids(fs);
--- 
-2.26.2
-
diff --git a/0001-btrfs-progs-mkfs-clean-up-default-profile-settings.patch b/0001-btrfs-progs-mkfs-clean-up-default-profile-settings.patch
deleted file mode 100644
index f72d0e3..0000000
--- a/0001-btrfs-progs-mkfs-clean-up-default-profile-settings.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From fcd0fd043749cd2623a918cf9862d10e2a227ae4 Mon Sep 17 00:00:00 2001
-From: David Sterba <dsterba@suse.com>
-Date: Tue, 21 Jul 2020 12:13:27 +0200
-Subject: [PATCH 1/2] btrfs-progs: mkfs: clean up default profile settings
-
-Extract the defaults for data and metadata profiles to a header and
-use the symbolic names instead of hardcoding the profiles.
-
-Signed-off-by: David Sterba <dsterba@suse.com>
-(cherry picked from commit 071cb030a41fde2cab07217b52ba7c86b72fb8d8)
----
- mkfs/common.h | 10 ++++++++++
- mkfs/main.c   | 21 ++++++++++++++++-----
- 2 files changed, 26 insertions(+), 5 deletions(-)
-
-diff --git a/mkfs/common.h b/mkfs/common.h
-index 426852be..61969dcc 100644
---- a/mkfs/common.h
-+++ b/mkfs/common.h
-@@ -28,6 +28,16 @@
- #define BTRFS_MKFS_SYSTEM_GROUP_SIZE SZ_4M
- #define BTRFS_MKFS_SMALL_VOLUME_SIZE SZ_1G
- 
-+/*
-+ * Default settings for block group types
-+ */
-+#define BTRFS_MKFS_DEFAULT_DATA_ONE_DEVICE	0	/* SINGLE */
-+#define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE	BTRFS_BLOCK_GROUP_DUP
-+#define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE_SSD	0	/* SINGLE */
-+
-+#define BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE	BTRFS_BLOCK_GROUP_RAID0
-+#define BTRFS_MKFS_DEFAULT_META_MULTI_DEVICE	BTRFS_BLOCK_GROUP_RAID1
-+
- /*
-  * Tree root blocks created during mkfs
-  */
-diff --git a/mkfs/main.c b/mkfs/main.c
-index 0a4de617..6c9a24a4 100644
---- a/mkfs/main.c
-+++ b/mkfs/main.c
-@@ -1144,19 +1144,30 @@ int BOX_MAIN(mkfs)(int argc, char **argv)
- 	* For mixed groups defaults are single/single.
- 	*/
- 	if (!mixed) {
-+		u64 tmp;
-+
- 		if (!metadata_profile_opt) {
- 			if (dev_cnt == 1 && ssd && verbose)
- 				printf("Detected a SSD, turning off metadata "
- 				"duplication.  Mkfs with -m dup if you want to "
- 				"force metadata duplication.\n");
- 
--			metadata_profile = (dev_cnt > 1) ?
--					BTRFS_BLOCK_GROUP_RAID1 : (ssd) ?
--					0: BTRFS_BLOCK_GROUP_DUP;
-+			if (dev_cnt > 1) {
-+				tmp = BTRFS_MKFS_DEFAULT_META_MULTI_DEVICE;
-+			} else {
-+				if (ssd)
-+					tmp = BTRFS_MKFS_DEFAULT_META_ONE_DEVICE_SSD;
-+				else
-+					tmp = BTRFS_MKFS_DEFAULT_META_ONE_DEVICE;
-+			}
-+			metadata_profile = tmp;
- 		}
- 		if (!data_profile_opt) {
--			data_profile = (dev_cnt > 1) ?
--				BTRFS_BLOCK_GROUP_RAID0 : 0; /* raid0 or single */
-+			if (dev_cnt > 1)
-+				tmp = BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE;
-+			else
-+				tmp = BTRFS_MKFS_DEFAULT_DATA_ONE_DEVICE;
-+			data_profile = tmp;
- 		}
- 	} else {
- 		u32 best_nodesize = max_t(u32, sysconf(_SC_PAGESIZE), sectorsize);
--- 
-2.26.2
-
diff --git a/0002-btrfs-progs-mkfs-switch-to-single-as-default-profile.patch b/0002-btrfs-progs-mkfs-switch-to-single-as-default-profile.patch
deleted file mode 100644
index aecef39..0000000
--- a/0002-btrfs-progs-mkfs-switch-to-single-as-default-profile.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 5e76619fcda3d792b2cb188fc2d950c61d7ebf09 Mon Sep 17 00:00:00 2001
-From: David Sterba <dsterba@suse.com>
-Date: Tue, 21 Jul 2020 12:28:05 +0200
-Subject: [PATCH 2/2] btrfs-progs: mkfs: switch to single as default profile
- for multiple-devices
-
-The single profile is better suited as default for data on multiple
-devices. Switch from RAID0 because:
-
-- it's easier to convert to other profiles, as single consumes some
-  chunks per device, but RAID0 has chunks on all devices regardless of
-  the used space
-
-- RAID0 has no redundancy and compared one disk failure affects many
-  files due to striping, while with single the chances are a bit higher
-  that complete files are stored on one device
-
-- when the device sizes are not equal and not even close to equal, the
-  maximum achievable size with RAID0 is size of the smallest device due
-  to striping, with single it's the sum of all device sizes
-
-The changed defaults could affect scripts and deployments that rely on
-the old values, but given the number of possible profiles for multiple
-devices let's hope that they're specified explicitly in majority of
-cases.
-
-Issue: #270
-Signed-off-by: David Sterba <dsterba@suse.com>
-(cherry picked from commit f1507716c67e2d6012f1e7a0f1538d4f669faa23)
----
- mkfs/common.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/mkfs/common.h b/mkfs/common.h
-index 61969dcc..cc88db71 100644
---- a/mkfs/common.h
-+++ b/mkfs/common.h
-@@ -35,7 +35,7 @@
- #define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE	BTRFS_BLOCK_GROUP_DUP
- #define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE_SSD	0	/* SINGLE */
- 
--#define BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE	BTRFS_BLOCK_GROUP_RAID0
-+#define BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE	0	/* SINGLE */
- #define BTRFS_MKFS_DEFAULT_META_MULTI_DEVICE	BTRFS_BLOCK_GROUP_RAID1
- 
- /*
--- 
-2.26.2
-
diff --git a/0002-btrfs-progs-tests-add-convert-test-case-for-multiply.patch b/0002-btrfs-progs-tests-add-convert-test-case-for-multiply.patch
deleted file mode 100644
index ab5d642..0000000
--- a/0002-btrfs-progs-tests-add-convert-test-case-for-multiply.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 11c4a7b38a6aeef51b075d70e5aca36c42398842 Mon Sep 17 00:00:00 2001
-From: Qu Wenruo <wqu@suse.com>
-Date: Mon, 20 Jul 2020 20:51:09 +0800
-Subject: [PATCH 2/2] btrfs-progs: tests: add convert test case for multiply
- overflow
-
-The new test case will test whether btrfs-convert can handle 64G ext*
-fs.
-
-This exercise the cctx->total_bytes calculation where multiplying 4K
-(unsigned int) and 16777216 (u32) could lead to bit overflow for
-unsigned int and got 0, and screw up later free space calculation.
-
-Signed-off-by: Qu Wenruo <wqu@suse.com>
-Signed-off-by: David Sterba <dsterba@suse.com>
-(cherry picked from commit 61f41474469b0b0fba9ec1978dfa91d9cbc6c914)
----
- .../018-fs-size-overflow/test.sh              | 19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
- create mode 100755 tests/convert-tests/018-fs-size-overflow/test.sh
-
-diff --git a/tests/convert-tests/018-fs-size-overflow/test.sh b/tests/convert-tests/018-fs-size-overflow/test.sh
-new file mode 100755
-index 00000000..d819f695
---- /dev/null
-+++ b/tests/convert-tests/018-fs-size-overflow/test.sh
-@@ -0,0 +1,19 @@
-+#!/bin/bash
-+# Check if btrfs-convert can handle an ext4 fs whose size is 64G.
-+# That fs size could trigger a multiply overflow and screw up free space
-+# calculation
-+
-+source "$TEST_TOP/common"
-+source "$TEST_TOP/common.convert"
-+
-+setup_root_helper
-+prepare_test_dev 64g
-+check_prereq btrfs-convert
-+check_global_prereq mke2fs
-+
-+convert_test_prep_fs ext4 mke2fs -t ext4 -b 4096
-+run_check_umount_test_dev
-+
-+# Unpatched btrfs-convert would fail half way due to corrupted free space
-+# cache tree
-+convert_test_do_convert
--- 
-2.26.2
-
diff --git a/btrfs-progs.spec b/btrfs-progs.spec
index 2a8aecd..108df8b 100644
--- a/btrfs-progs.spec
+++ b/btrfs-progs.spec
@@ -1,12 +1,9 @@
 # Local definition of version_no_tilde when it doesn't exist
 %{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}}
 
-# Disable for now until version handling question is dealt with
-%bcond_with python
-
 Name:           btrfs-progs
-Version:        5.7
-Release:        5%{?dist}
+Version:        5.9
+Release:        1%{?dist}
 Summary:        Userspace programs for btrfs
 
 License:        GPLv2
@@ -14,22 +11,13 @@ URL:            https://btrfs.wiki.kernel.org/index.php/Main_Page
 Source0:        https://www.kernel.org/pub/linux/kernel/people/kdave/%{name}/%{name}-v%{version_no_tilde}.tar.xz
 
 # Backports from upstream
-## Do not use raid0 by default for mkfs multi-disk (#1855174)
-Patch0001:      0001-btrfs-progs-mkfs-clean-up-default-profile-settings.patch
-Patch0002:      0002-btrfs-progs-mkfs-switch-to-single-as-default-profile.patch
-## Fix convert for 64-bit ext4 filesystems (#1851674)
-Patch0003:      0001-btrfs-progs-convert-prevent-32bit-overflow-for-cctx-.patch
-Patch0004:      0002-btrfs-progs-tests-add-convert-test-case-for-multiply.patch
 
 BuildRequires:  gcc, autoconf, automake
 BuildRequires:  e2fsprogs-devel, libuuid-devel, zlib-devel, libzstd-devel
 BuildRequires:  libacl-devel, libblkid-devel, lzo-devel
 BuildRequires:  asciidoc, xmlto
 BuildRequires:  systemd
-
-%if %{with python}
 BuildRequires:  python3-devel >= 3.4
-%endif
 
 %description
 The btrfs-progs package provides all the userspace programs needed to create,
@@ -74,7 +62,6 @@ It includes development files for two libraries:
 You should install btrfs-progs-devel if you want to develop
 btrfs filesystem-specific programs.
 
-%if %{with python}
 %package -n python3-btrfsutil
 Summary:        Python 3 bindings for libbtrfsutil
 License:        LGPLv3
@@ -87,7 +74,6 @@ which can be used for btrfs filesystem-specific programs in Python.
 
 You should install python3-btrfsutil if you want to use or develop
 btrfs filesystem-specific programs in Python.
-%endif
 
 %prep
 %autosetup -n %{name}-v%{version_no_tilde} -p1
@@ -97,11 +83,9 @@ btrfs filesystem-specific programs in Python.
 %configure CFLAGS="%{optflags} -fno-strict-aliasing" %{!?with_python:--disable-python}
 %make_build
 
-%if %{with python}
 pushd libbtrfsutil/python
 %py3_build
 popd
-%endif
 
 %install
 %make_install mandir=%{_mandir} bindir=%{_sbindir} libdir=%{_libdir} incdir=%{_includedir}
@@ -109,11 +93,9 @@ install -Dpm0644 btrfs-completion %{buildroot}%{_datadir}/bash-completion/comple
 # Nuke the static lib
 rm -v %{buildroot}%{_libdir}/*.a
 
-%if %{with python}
 pushd libbtrfsutil/python
 %py3_install
 popd
-%endif
 
 %files
 %license COPYING
@@ -127,8 +109,8 @@ popd
 %{_sbindir}/btrfs
 %{_sbindir}/btrfs-map-logical
 %{_sbindir}/btrfs-find-root
-%{_mandir}/man5/*.gz
-%{_mandir}/man8/*.gz
+%{_mandir}/man5/*
+%{_mandir}/man8/*
 %{_udevrulesdir}/64-btrfs-dm.rules
 %{_datadir}/bash-completion/completions/btrfs
 
@@ -144,15 +126,19 @@ popd
 %{_includedir}/*
 %{_libdir}/libbtrfs.so
 %{_libdir}/libbtrfsutil.so
+%{_libdir}/pkgconfig/libbtrfsutil.pc
 
-%if %{with python}
 %files -n python3-btrfsutil
 %license libbtrfsutil/COPYING*
 %{python3_sitearch}/btrfsutil.*.so
-%{python3_sitearch}/btrfsutil-*.egg-info
-%endif
+%{python3_sitearch}/btrfsutil-*.egg-info/
 
 %changelog
+* Fri Oct 23 2020 Neal Gompa <ngompa13@gmail.com> - 5.9-1
+- New upstream release
+- Build Python bindings
+- Drop patches incorporated into this release
+
 * Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.7-5
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
 
diff --git a/sources b/sources
index 7a5c799..42b8d47 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (btrfs-progs-v5.7.tar.xz) = 72c3af13ca589f2e0b96cb7602319035ef8aab6ee224fff3544a5d0bfc013a66552dde4533ec5e64696d404b8905431cd0f25367c40fd34ea39be7c0ed8c2d16
+SHA512 (btrfs-progs-v5.9.tar.xz) = 38db047198ab0467d3fe235f7e8e1fd14ade00dd0b182588220c5f5e4b598efbdcd30a3d5d56cf0a0ed8a902d2374af0927eb7f3720cd761172c7291a2a65c94