How to fix BTRFS the safest way

Ive started to get btrfs errors in dmesg which led to various parts of the router to stop working. Ive read the topic How to fix BTRFS error (device mmcblk0p1)? - SW help - Turris forum but Im getting different errors and I wonder if anyone could advise a fix approach without the need for tftp and DHCP servers.
I can restart router and it works for a little time.
In this little time I managed to do tar --one-filesystem on the root and store it on different FS

I tried also:

root@schvab-m2:/tmp# btrfs check -p --force /dev/mmcblk0p1 2>&1 | tee btrfs-check.log
WARNING: filesystem mounted, continuing because of --force
Checking filesystem on /dev/mmcblk0p1
UUID: dbcd30db-987b-4620-9cc6-d97291cfd82b
checksum verify failed on 415240192 found D17BC5B4 wanted 096C6C61
checksum verify failed on 415240192 found D17BC5B4 wanted 096C6C61
bytenr mismatch, want=415240192, have=3473974523842360435
owner ref check failed [415240192 4096]

ERROR: errors found in extent allocation tree or chunk allocation
block group 12582912 has wrong amount of free space, free space cache has 162611200 block group has 162328576
ERROR: free space cache has more free space than block group item, this could leads to serious corruption, please contact btrfs developers
failed to load free space cache for block group 12582912

ERROR: errors found in free space cache
found 629313536 bytes used, error(s) found
total csum bytes: 410980
total tree bytes: 213549056
total fs tree bytes: 203620352
total extent tree bytes: 9138176
btree space waste bytes: 55397495
file data blocks allocated: 2628276224
 referenced 2626478080

Now Im logged-in via SSH but the root is mounted ro after the following:

[  529.430291] BTRFS warning (device mmcblk0p1): csum failed ino 7471 off 241664 csum 2597073468 expected csum 1540861990
[  529.442133] BTRFS warning (device mmcblk0p1): csum failed ino 7471 off 241664 csum 2597073468 expected csum 1540861990
[ 3911.791553] ------------[ cut here ]------------
[ 3911.791577] WARNING: CPU: 0 PID: 26278 at fs/btrfs/extent-tree.c:2930 btrfs_run_delayed_refs+0x298/0x2d0()
[ 3911.791584] BTRFS: Transaction aborted (error -17)
[ 3911.791589] Modules linked in: qcserial option iptable_nat dvb_usb_rtl28xxu ath9k uvcvideo usb_wwan rndis_host qmi_wwan pppoe pl2303 nf_nat_pptp nf_nat_ipv4 nf_nat_a
manda nf_conntrack_pptp nf_conntrack_netlink nf_conntrack_ipv6 nf_conntrack_ipv4 nf_conntrack_amanda ipt_REJECT ipt_MASQUERADE ftdi_sio ebtable_nat ebtable_filter ebtab
le_broute dvb_usb_v2 cdc_ether ath9k_common armada_thermal xt_time xt_tcpudp xt_tcpmss xt_statistic xt_state xt_recent xt_nat xt_multiport xt_mark xt_mac xt_limit xt_le
ngth xt_id xt_hl xt_helper xt_ecn xt_dscp xt_conntrack xt_connmark xt_connlimit xt_connbytes xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_HL xt_DSCP xt_CT xt_CLASSIFY vid
eobuf2_v4l2 usbserial usbnet ums_usbat ums_sddr55 ums_sddr09 ums_karma ums_jumpshot ums_isd200 ums_freecom ums_datafab ums_cypress ums_alauda ts_kmp ts_fsm ts_bm therma
l_sys rtl2832 rtl2830 rc_core r820t pppox ppp_mppe ppp_async nfnetlink nf_reject_ipv4 nf_nat_tftp nf_nat_snmp_basic nf_nat_sip nf_nat_redirect nf_nat_proto_gre nf_nat_m
asquerade_ipv4 nf_nat_irc nf_nat_h323 nf_nat_ftp nf_nat nf_log_ipv4 nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack_tftp nf_conntrack_snmp nf_conntrack_sip nf_conntrack_rtca
che nf_conntrack_proto_gre nf_conntrack_irc nf_conntrack_h323 nf_conntrack_ftp nf_conntrack_broadcast nf_conntrack mvsdio iptable_raw iptable_mangle iptable_filter ipt_
ECN ip_tables hwmon gspca_zc3xx gspca_main ebtables ebt_vlan ebt_stp ebt_redirect ebt_pkttype ebt_mark_m ebt_mark ebt_limit ebt_among ebt_802_3 dvb_core crc_ccitt cdc_w
dm ath9k_hw fuse sch_teql sch_tbf sch_sfq sch_red sch_prio sch_pie sch_netem sch_htb sch_gred sch_fq sch_dsmark sch_codel em_text em_nbyte em_meta em_cmp cls_basic act_
vlan act_police act_pedit act_nat act_ipt act_gact act_csum act_bpf act_skbedit act_mirred em_u32 cls_u32 cls_tcindex cls_flow cls_route cls_fw sch_hfsc sch_ingress vid
eobuf2_vmalloc videobuf2_memops videobuf2_core v4l2_common videodev ath10k_pci ath10k_core ath mac80211 cfg80211 compat ledtrig_usbdev ledtrig_oneshot xt_LED ledtrig_mo
rse ledtrig_heartbeat ledtrig_gpio cryptodev ip6t_REJECT nf_reject_ipv6 nf_log_ipv6 nf_log_common ip6table_raw ip6table_mangle ip6table_filter ip6_tables x_tables pppoa
tm ppp_generic slhc nfsd nfsv3 msdos ip_gre gre ifb sit ip6_tunnel tunnel6 tunnel4 ip_tunnel veth tun snd_compress snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_rawmi
di snd_seq_device snd_hwdep snd input_core soundcore rxkad vfat fat udf crc_itu_t ntfs nfs_layout_nfsv41_files nfsv4 nfs auth_rpcgss oid_registry lockd sunrpc grace min
ix isofs hfsplus hfs cramfs configfs cifs autofs4 kafs af_rxrpc dns_resolver dm_crypt dm_mirror dm_region_hash dm_log dm_mod br2684 atm multipath fscache raid456 async_
raid6_recov async_pq async_xor async_memcpy async_tx raid10 raid1 raid0 linear md_mod nls_utf8 nls_koi8_r nls_cp1255 nls_iso8859_6 nls_iso8859_2 nls_iso8859_15 nls_iso8
859_13 nls_iso8859_1 nls_cp932 nls_cp866 nls_cp864 nls_cp862 nls_cp852 nls_cp850 nls_cp775 nls_cp437 nls_cp1251 nls_cp1250 regmap_spi regmap_mmio regmap_i2c dma_shared_
buffer xts algif_skcipher algif_hash af_alg sha512_generic sha256_generic sha1_generic seqiv jitterentropy_rng drbg pcbc md5 md4 marvell_cesa hmac gf128mul fcrypt ecb d
es_generic ctr cmac ccm cbc authenc xhci_plat_hcd xhci_pci xhci_hcd uhci_hcd ledtrig_transient ehci_orion ehci_platform ehci_hcd ahci_platform uas usb_storage xfs libcr
c32c jfs f2fs exfat usbcore nls_base usb_common mii aead crypto_null
[ 3911.792290] CPU: 0 PID: 26278 Comm: pkgupdate Not tainted 4.4.138-1e8e1b4c23f383e990eb3c4f490f5f2e-1 #1
[ 3911.792297] Hardware name: Marvell Armada 380/385 (Device Tree)
[ 3911.792303] Backtrace:
[ 3911.792319] [<c001c444>] (dump_backtrace) from [<c001c684>] (show_stack+0x18/0x1c)
[ 3911.792325]  r6:00000000 r5:60070013 r4:c0734528 r3:00000000
[ 3911.792347] [<c001c66c>] (show_stack) from [<c02f99f0>] (dump_stack+0x98/0xac)
[ 3911.792360] [<c02f9958>] (dump_stack) from [<c0029124>] (warn_slowpath_common+0x8c/0xbc)
[ 3911.792366]  r6:00000b72 r5:c021c2c0 r4:cb217e60 r3:00000006
[ 3911.792384] [<c0029098>] (warn_slowpath_common) from [<c002918c>] (warn_slowpath_fmt+0x38/0x40)
[ 3911.792389]  r8:eeb5ac00 r7:ee603110 r6:ee4088f0 r5:ee46a148 r4:ffffffef
[ 3911.792411] [<c0029158>] (warn_slowpath_fmt) from [<c021c2c0>] (btrfs_run_delayed_refs+0x298/0x2d0)
[ 3911.792416]  r3:ffffffef r2:c063ef64
[ 3911.792432] [<c021c028>] (btrfs_run_delayed_refs) from [<c0231b90>] (btrfs_commit_transaction+0x88/0xbd8)
[ 3911.792438]  r10:cb217f8c r9:c011c660 r8:00000000 r7:eeb5ac00 r6:ee4088f0 r5:ee46a148
[ 3911.792454]  r4:ee603110
[ 3911.792467] [<c0231b08>] (btrfs_commit_transaction) from [<c02013b0>] (btrfs_sync_fs+0x44/0xb4)
[ 3911.792472]  r10:cb217f8c r9:c011c660 r8:c0730e98 r7:00000001 r6:eeb5a800 r5:eeb5ac00
[ 3911.792488]  r4:ee9de000
[ 3911.792502] [<c020136c>] (btrfs_sync_fs) from [<c011c690>] (sync_fs_one_sb+0x30/0x34)
[ 3911.792507]  r7:c076e91c r6:eeb5a844 r5:eeb69000 r4:eeb5a800
[ 3911.792527] [<c011c660>] (sync_fs_one_sb) from [<c00f22b4>] (iterate_supers+0xe8/0x148)
[ 3911.792538] [<c00f21cc>] (iterate_supers) from [<c011c7a4>] (sys_sync+0x5c/0xa4)
[ 3911.792543]  r10:00000000 r9:cb216000 r8:c0009ec4 r7:00000024 r6:b6eac198 r5:033761c0
[ 3911.792559]  r4:00000000 r3:00000020
[ 3911.792573] [<c011c748>] (sys_sync) from [<c0009d00>] (ret_fast_syscall+0x0/0x48)
[ 3911.792578]  r4:b6b05970
[ 3911.792607] ---[ end trace 98e9251e974d8172 ]---
[ 3911.792619] BTRFS: error (device mmcblk0p1) in btrfs_run_delayed_refs:2930: errno=-17 Object already exists
[ 3911.802582] BTRFS info (device mmcblk0p1): forced readonly
[ 3911.808937] pending csums is 4096
[ 4157.400059] BTRFS info (device mmcblk0p1): disk space caching is enabled
[ 4157.400074] BTRFS error (device mmcblk0p1): Remounting read-write after error is not allowed

Target is of course working system with all the custom configurations and tweaks I made.
Any ideas please?

Hi there, did you find a simpler solution that the one you linked to?

Hi, to summarize: I followed just the how-to on turris site and booted into service console connecting over UART to console. From there I have executed btrfs check and repair on mmcblk0p1 and I also stored an image of it using dd on a USB stick just to be sure. Turris works OK, Im just getting follow warning from kernel about 2x a day:
BTRFS warning (device mmcblk0p1): mismatching generation and generation_v2 found in root item. This root was probably mounted with an older kernel. Resetting all new fields.