* [PATCH 0/2] btrfs: btrfs_super_block::log_root_transid related enhancement @ 2018-10-04 5:49 Qu Wenruo 2018-10-04 5:49 ` [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid Qu Wenruo 2018-10-04 5:49 ` [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid Qu Wenruo 0 siblings, 2 replies; 12+ messages in thread From: Qu Wenruo @ 2018-10-04 5:49 UTC (permalink / raw) To: linux-btrfs Even we have btrfs_super_block::log_root_transid, it's never really populated. This patchset will populate that member and use it to detect corrupted log tree early. Qu Wenruo (2): btrfs: Populate btrfs_super_block::log_root_transid btrfs: Validate btrfs_super_block::log_root_transid fs/btrfs/disk-io.c | 28 ++++++++++++++++++++++------ fs/btrfs/transaction.c | 1 + fs/btrfs/tree-log.c | 2 ++ 3 files changed, 25 insertions(+), 6 deletions(-) -- 2.19.0 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid 2018-10-04 5:49 [PATCH 0/2] btrfs: btrfs_super_block::log_root_transid related enhancement Qu Wenruo @ 2018-10-04 5:49 ` Qu Wenruo 2018-10-04 8:07 ` Anand Jain 2018-10-11 12:31 ` David Sterba 2018-10-04 5:49 ` [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid Qu Wenruo 1 sibling, 2 replies; 12+ messages in thread From: Qu Wenruo @ 2018-10-04 5:49 UTC (permalink / raw) To: linux-btrfs We have btrfs_super_block::log_root_transid to record the transid of log tree root. However it's never populated and it's always 0, just as the following dump-super: log_root 30572544 log_root_transid 0 log_root_level 0 This patch will populate it with log tree root correctly, so the result will be: log_root 30572544 log_root_transid 6 log_root_level 0 This won't affect current kernel behavior or btrfs check result as we already expect log tree root generation always to be super block genration + 1. But it could be later used to detect log tree corruption early. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/transaction.c | 1 + fs/btrfs/tree-log.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 3b84f5015029..9d4947079aa3 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -2211,6 +2211,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) btrfs_set_super_log_root(fs_info->super_copy, 0); btrfs_set_super_log_root_level(fs_info->super_copy, 0); + btrfs_set_super_log_root_transid(fs_info->super_copy, 0); memcpy(fs_info->super_for_commit, fs_info->super_copy, sizeof(*fs_info->super_copy)); diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 1650dc44a5e3..3e16e7b54922 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3131,6 +3131,8 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, log_root_tree->node->start); btrfs_set_super_log_root_level(fs_info->super_for_commit, btrfs_header_level(log_root_tree->node)); + btrfs_set_super_log_root_transid(fs_info->super_for_commit, + btrfs_header_generation(log_root_tree->node)); log_root_tree->log_transid++; mutex_unlock(&log_root_tree->log_mutex); -- 2.19.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid 2018-10-04 5:49 ` [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid Qu Wenruo @ 2018-10-04 8:07 ` Anand Jain 2018-10-04 8:28 ` Qu Wenruo 2018-10-11 12:31 ` David Sterba 1 sibling, 1 reply; 12+ messages in thread From: Anand Jain @ 2018-10-04 8:07 UTC (permalink / raw) To: Qu Wenruo, linux-btrfs > we > already expect log tree root generation always to be super block > genration + 1. This is close to what I was looking for by reading the cover-letter, basically what is the impact/bug by not populating it? but can you explain more, I wonder how was check working so long then? > But it could be later used to detect log tree corruption early. If there is no impact/bug its rather a good idea to change this when the early log tree corruption detection part is ready. So that there is absolute clarity. The reason why I am grossly wary is - we have incomplete business about how do we handle the write-hole, say raid1 to begin with. Thanks, Anand ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid 2018-10-04 8:07 ` Anand Jain @ 2018-10-04 8:28 ` Qu Wenruo 0 siblings, 0 replies; 12+ messages in thread From: Qu Wenruo @ 2018-10-04 8:28 UTC (permalink / raw) To: Anand Jain, Qu Wenruo, linux-btrfs [-- Attachment #1.1: Type: text/plain, Size: 1484 bytes --] On 2018/10/4 下午4:07, Anand Jain wrote: > >> we >> already expect log tree root generation always to be super block >> genration + 1. > > This is close to what I was looking for by reading the cover-letter, > basically what is the impact/bug by not populating it? Nothing really. Both kernel and btrfs-progs completely ignore it. > but can you > explain more, I wonder how was check working so long then? For btrfs-progs, the behavior will not change at all. It still assume log tree root's generation is super geneartion + 1. And if doesn't match reports a transid mismatch error. For kernel, super validation checker will do such generation check earlier. So instead of reporting transid mismatch and then btrfs_log_recover error, it will report log tree is bad. > >> But it could be later used to detect log tree corruption early. > > If there is no impact/bug its rather a good idea to change this when > the early log tree corruption detection part is ready. So that there > is absolute clarity. > > The reason why I am grossly wary is - we have incomplete business > about how do we handle the write-hole, say raid1 to begin with. If the solution is going to rely on log tree, then the patch shouldn't affect anyone. The main purpose here is to make the log_root_transid to follow all other generation behavior (root, chunk). Nothing to really affect users. Thanks, Qu > > Thanks, Anand [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid 2018-10-04 5:49 ` [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid Qu Wenruo 2018-10-04 8:07 ` Anand Jain @ 2018-10-11 12:31 ` David Sterba 2018-10-11 12:45 ` Qu Wenruo 1 sibling, 1 reply; 12+ messages in thread From: David Sterba @ 2018-10-11 12:31 UTC (permalink / raw) To: Qu Wenruo; +Cc: linux-btrfs On Thu, Oct 04, 2018 at 01:49:49PM +0800, Qu Wenruo wrote: > We have btrfs_super_block::log_root_transid to record the transid of log > tree root. > > However it's never populated and it's always 0, just as the following > dump-super: > log_root 30572544 > log_root_transid 0 > log_root_level 0 > > This patch will populate it with log tree root correctly, so the result > will be: > log_root 30572544 > log_root_transid 6 > log_root_level 0 > > This won't affect current kernel behavior or btrfs check result as we > already expect log tree root generation always to be super block > genration + 1. > > But it could be later used to detect log tree corruption early. The backward compatibility seems to be ok in general, I found one scenario where the check will fail: * mount with unpatched kernel, log_root_transid = 0 * mount with patched kernel, log_root_transid 100, generation 101 * mount with unpatched kernel, log_root_transid 100 (unchanged), generation 201 * mount with patched kernel -> check fails So the problem is when log_root_transid is not 0 and changes out of sync with the generation. The above sequence of kernels can simply happen when switching between old stable and current releases. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid 2018-10-11 12:31 ` David Sterba @ 2018-10-11 12:45 ` Qu Wenruo 2018-10-11 13:11 ` Nikolay Borisov 0 siblings, 1 reply; 12+ messages in thread From: Qu Wenruo @ 2018-10-11 12:45 UTC (permalink / raw) To: dsterba, Qu Wenruo, linux-btrfs [-- Attachment #1.1: Type: text/plain, Size: 1663 bytes --] On 2018/10/11 下午8:31, David Sterba wrote: > On Thu, Oct 04, 2018 at 01:49:49PM +0800, Qu Wenruo wrote: >> We have btrfs_super_block::log_root_transid to record the transid of log >> tree root. >> >> However it's never populated and it's always 0, just as the following >> dump-super: >> log_root 30572544 >> log_root_transid 0 >> log_root_level 0 >> >> This patch will populate it with log tree root correctly, so the result >> will be: >> log_root 30572544 >> log_root_transid 6 >> log_root_level 0 >> >> This won't affect current kernel behavior or btrfs check result as we >> already expect log tree root generation always to be super block >> genration + 1. >> >> But it could be later used to detect log tree corruption early. > > The backward compatibility seems to be ok in general, I found one > scenario where the check will fail: > > * mount with unpatched kernel, log_root_transid = 0 > * mount with patched kernel, log_root_transid 100, generation 101 > * mount with unpatched kernel, log_root_transid 100 (unchanged), generation 201 > * mount with patched kernel -> check fails Indeed, this is a problem I missed. It provides the old principle, if we're going to change how kernel use/interprete a on-disk memeber, we have to introduce a new incompatible flag. Please just drop the series of patch. Thanks, Qu > > So the problem is when log_root_transid is not 0 and changes out of sync > with the generation. The above sequence of kernels can simply happen > when switching between old stable and current releases. > [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid 2018-10-11 12:45 ` Qu Wenruo @ 2018-10-11 13:11 ` Nikolay Borisov 2018-10-11 13:13 ` Qu Wenruo 0 siblings, 1 reply; 12+ messages in thread From: Nikolay Borisov @ 2018-10-11 13:11 UTC (permalink / raw) To: Qu Wenruo, dsterba, Qu Wenruo, linux-btrfs On 11.10.2018 15:45, Qu Wenruo wrote: > > > On 2018/10/11 下午8:31, David Sterba wrote: >> On Thu, Oct 04, 2018 at 01:49:49PM +0800, Qu Wenruo wrote: >>> We have btrfs_super_block::log_root_transid to record the transid of log >>> tree root. >>> >>> However it's never populated and it's always 0, just as the following >>> dump-super: >>> log_root 30572544 >>> log_root_transid 0 >>> log_root_level 0 >>> >>> This patch will populate it with log tree root correctly, so the result >>> will be: >>> log_root 30572544 >>> log_root_transid 6 >>> log_root_level 0 >>> >>> This won't affect current kernel behavior or btrfs check result as we >>> already expect log tree root generation always to be super block >>> genration + 1. >>> >>> But it could be later used to detect log tree corruption early. >> >> The backward compatibility seems to be ok in general, I found one >> scenario where the check will fail: >> >> * mount with unpatched kernel, log_root_transid = 0 >> * mount with patched kernel, log_root_transid 100, generation 101 >> * mount with unpatched kernel, log_root_transid 100 (unchanged), generation 201 >> * mount with patched kernel -> check fails > > Indeed, this is a problem I missed. > > It provides the old principle, if we're going to change how kernel > use/interprete a on-disk memeber, we have to introduce a new > incompatible flag. > > Please just drop the series of patch. Since this member really doesn't have any purpose now I think the prudent thing to do is to rename it to "reserved1" or "padding" or whatever but basically signal that it's no longer in used. In the future when a new incompaat bit will be required for some feature it can be re-used. > > Thanks, > Qu >> >> So the problem is when log_root_transid is not 0 and changes out of sync >> with the generation. The above sequence of kernels can simply happen >> when switching between old stable and current releases. >> > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid 2018-10-11 13:11 ` Nikolay Borisov @ 2018-10-11 13:13 ` Qu Wenruo 0 siblings, 0 replies; 12+ messages in thread From: Qu Wenruo @ 2018-10-11 13:13 UTC (permalink / raw) To: Nikolay Borisov, dsterba, Qu Wenruo, linux-btrfs On 2018/10/11 下午9:11, Nikolay Borisov wrote: > > > On 11.10.2018 15:45, Qu Wenruo wrote: >> >> >> On 2018/10/11 下午8:31, David Sterba wrote: >>> On Thu, Oct 04, 2018 at 01:49:49PM +0800, Qu Wenruo wrote: >>>> We have btrfs_super_block::log_root_transid to record the transid of log >>>> tree root. >>>> >>>> However it's never populated and it's always 0, just as the following >>>> dump-super: >>>> log_root 30572544 >>>> log_root_transid 0 >>>> log_root_level 0 >>>> >>>> This patch will populate it with log tree root correctly, so the result >>>> will be: >>>> log_root 30572544 >>>> log_root_transid 6 >>>> log_root_level 0 >>>> >>>> This won't affect current kernel behavior or btrfs check result as we >>>> already expect log tree root generation always to be super block >>>> genration + 1. >>>> >>>> But it could be later used to detect log tree corruption early. >>> >>> The backward compatibility seems to be ok in general, I found one >>> scenario where the check will fail: >>> >>> * mount with unpatched kernel, log_root_transid = 0 >>> * mount with patched kernel, log_root_transid 100, generation 101 >>> * mount with unpatched kernel, log_root_transid 100 (unchanged), generation 201 >>> * mount with patched kernel -> check fails >> >> Indeed, this is a problem I missed. >> >> It provides the old principle, if we're going to change how kernel >> use/interprete a on-disk memeber, we have to introduce a new >> incompatible flag. >> >> Please just drop the series of patch. > > Since this member really doesn't have any purpose now I think the > prudent thing to do is to rename it to "reserved1" or "padding" or > whatever but basically signal that it's no longer in used. In the future > when a new incompaat bit will be required for some feature it can be > re-used. Makes sense. I'll craft a patch for that. Thanks, Qu > >> >> Thanks, >> Qu >>> >>> So the problem is when log_root_transid is not 0 and changes out of sync >>> with the generation. The above sequence of kernels can simply happen >>> when switching between old stable and current releases. >>> >> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid 2018-10-04 5:49 [PATCH 0/2] btrfs: btrfs_super_block::log_root_transid related enhancement Qu Wenruo 2018-10-04 5:49 ` [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid Qu Wenruo @ 2018-10-04 5:49 ` Qu Wenruo 2018-10-04 6:57 ` Nikolay Borisov 1 sibling, 1 reply; 12+ messages in thread From: Qu Wenruo @ 2018-10-04 5:49 UTC (permalink / raw) To: linux-btrfs So we can detect log root related problem early and report the error more meaningfully other than hitting it log root read time. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/disk-io.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 5124c15705ce..34c68401c6bc 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2408,6 +2408,7 @@ static int validate_super(struct btrfs_fs_info *fs_info, { u64 nodesize = btrfs_super_nodesize(sb); u64 sectorsize = btrfs_super_sectorsize(sb); + u64 generation; int ret = 0; if (btrfs_super_magic(sb) != BTRFS_MAGIC) { @@ -2534,21 +2535,36 @@ static int validate_super(struct btrfs_fs_info *fs_info, ret = -EINVAL; } + generation = btrfs_super_generation(sb); /* * The generation is a global counter, we'll trust it more than the others * but it's still possible that it's the one that's wrong. */ - if (btrfs_super_generation(sb) < btrfs_super_chunk_root_generation(sb)) + if (generation < btrfs_super_chunk_root_generation(sb)) btrfs_warn(fs_info, "suspicious: generation < chunk_root_generation: %llu < %llu", - btrfs_super_generation(sb), - btrfs_super_chunk_root_generation(sb)); - if (btrfs_super_generation(sb) < btrfs_super_cache_generation(sb) + generation, btrfs_super_chunk_root_generation(sb)); + if (generation < btrfs_super_cache_generation(sb) && btrfs_super_cache_generation(sb) != (u64)-1) btrfs_warn(fs_info, "suspicious: generation < cache_generation: %llu < %llu", - btrfs_super_generation(sb), - btrfs_super_cache_generation(sb)); + generation, btrfs_super_cache_generation(sb)); + + /* + * Check log root transid against super block generation. + * + * Older kernel doesn't populate log_root_transid, only need to check + * it when it's not zero. + * Since replaying suspicious log tree can cause serious problem, refuse + * to mount if it doesn't match. + */ + if (btrfs_super_log_root_transid(sb) && + btrfs_super_log_root_transid(sb) != generation + 1) { + btrfs_err(fs_info, + "bad log tree, log_root_transid != generation + 1: %llu != %llu + 1", + btrfs_super_log_root_transid(sb), generation); + ret = -EINVAL; + } return ret; } -- 2.19.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid 2018-10-04 5:49 ` [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid Qu Wenruo @ 2018-10-04 6:57 ` Nikolay Borisov 2018-10-04 7:30 ` Qu Wenruo 2018-10-11 12:19 ` David Sterba 0 siblings, 2 replies; 12+ messages in thread From: Nikolay Borisov @ 2018-10-04 6:57 UTC (permalink / raw) To: Qu Wenruo, linux-btrfs On 4.10.2018 08:49, Qu Wenruo wrote: > So we can detect log root related problem early and report the error > more meaningfully other than hitting it log root read time. > > Signed-off-by: Qu Wenruo <wqu@suse.com> > --- > fs/btrfs/disk-io.c | 28 ++++++++++++++++++++++------ > 1 file changed, 22 insertions(+), 6 deletions(-) > > diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c > index 5124c15705ce..34c68401c6bc 100644 > --- a/fs/btrfs/disk-io.c > +++ b/fs/btrfs/disk-io.c > @@ -2408,6 +2408,7 @@ static int validate_super(struct btrfs_fs_info *fs_info, > { > u64 nodesize = btrfs_super_nodesize(sb); > u64 sectorsize = btrfs_super_sectorsize(sb); > + u64 generation; > int ret = 0; > > if (btrfs_super_magic(sb) != BTRFS_MAGIC) { > @@ -2534,21 +2535,36 @@ static int validate_super(struct btrfs_fs_info *fs_info, > ret = -EINVAL; > } > > + generation = btrfs_super_generation(sb); > /* > * The generation is a global counter, we'll trust it more than the others > * but it's still possible that it's the one that's wrong. > */ > - if (btrfs_super_generation(sb) < btrfs_super_chunk_root_generation(sb)) > + if (generation < btrfs_super_chunk_root_generation(sb)) > btrfs_warn(fs_info, > "suspicious: generation < chunk_root_generation: %llu < %llu", > - btrfs_super_generation(sb), > - btrfs_super_chunk_root_generation(sb)); > - if (btrfs_super_generation(sb) < btrfs_super_cache_generation(sb) > + generation, btrfs_super_chunk_root_generation(sb)); > + if (generation < btrfs_super_cache_generation(sb) > && btrfs_super_cache_generation(sb) != (u64)-1) > btrfs_warn(fs_info, > "suspicious: generation < cache_generation: %llu < %llu", > - btrfs_super_generation(sb), > - btrfs_super_cache_generation(sb)); > + generation, btrfs_super_cache_generation(sb)); > + > + /* > + * Check log root transid against super block generation. > + * > + * Older kernel doesn't populate log_root_transid, only need to check > + * it when it's not zero. > + * Since replaying suspicious log tree can cause serious problem, refuse > + * to mount if it doesn't match. > + */ > + if (btrfs_super_log_root_transid(sb) && > + btrfs_super_log_root_transid(sb) != generation + 1) { nit: in the same vein as you do for btrfs_super_generation just assign super_log_root_Transid to a local var and use that. IMO it's more consistent with what's happening in this function. > + btrfs_err(fs_info, > + "bad log tree, log_root_transid != generation + 1: %llu != %llu + 1", > + btrfs_super_log_root_transid(sb), generation); > + ret = -EINVAL; > + } > > return ret; > } > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid 2018-10-04 6:57 ` Nikolay Borisov @ 2018-10-04 7:30 ` Qu Wenruo 2018-10-11 12:19 ` David Sterba 1 sibling, 0 replies; 12+ messages in thread From: Qu Wenruo @ 2018-10-04 7:30 UTC (permalink / raw) To: Nikolay Borisov, Qu Wenruo, linux-btrfs On 2018/10/4 下午2:57, Nikolay Borisov wrote: > > > On 4.10.2018 08:49, Qu Wenruo wrote: >> So we can detect log root related problem early and report the error >> more meaningfully other than hitting it log root read time. >> >> Signed-off-by: Qu Wenruo <wqu@suse.com> >> --- >> fs/btrfs/disk-io.c | 28 ++++++++++++++++++++++------ >> 1 file changed, 22 insertions(+), 6 deletions(-) >> >> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c >> index 5124c15705ce..34c68401c6bc 100644 >> --- a/fs/btrfs/disk-io.c >> +++ b/fs/btrfs/disk-io.c >> @@ -2408,6 +2408,7 @@ static int validate_super(struct btrfs_fs_info *fs_info, >> { >> u64 nodesize = btrfs_super_nodesize(sb); >> u64 sectorsize = btrfs_super_sectorsize(sb); >> + u64 generation; >> int ret = 0; >> >> if (btrfs_super_magic(sb) != BTRFS_MAGIC) { >> @@ -2534,21 +2535,36 @@ static int validate_super(struct btrfs_fs_info *fs_info, >> ret = -EINVAL; >> } >> >> + generation = btrfs_super_generation(sb); >> /* >> * The generation is a global counter, we'll trust it more than the others >> * but it's still possible that it's the one that's wrong. >> */ >> - if (btrfs_super_generation(sb) < btrfs_super_chunk_root_generation(sb)) >> + if (generation < btrfs_super_chunk_root_generation(sb)) >> btrfs_warn(fs_info, >> "suspicious: generation < chunk_root_generation: %llu < %llu", >> - btrfs_super_generation(sb), >> - btrfs_super_chunk_root_generation(sb)); >> - if (btrfs_super_generation(sb) < btrfs_super_cache_generation(sb) >> + generation, btrfs_super_chunk_root_generation(sb)); >> + if (generation < btrfs_super_cache_generation(sb) >> && btrfs_super_cache_generation(sb) != (u64)-1) >> btrfs_warn(fs_info, >> "suspicious: generation < cache_generation: %llu < %llu", >> - btrfs_super_generation(sb), >> - btrfs_super_cache_generation(sb)); >> + generation, btrfs_super_cache_generation(sb)); >> + >> + /* >> + * Check log root transid against super block generation. >> + * >> + * Older kernel doesn't populate log_root_transid, only need to check >> + * it when it's not zero. >> + * Since replaying suspicious log tree can cause serious problem, refuse >> + * to mount if it doesn't match. >> + */ >> + if (btrfs_super_log_root_transid(sb) && >> + btrfs_super_log_root_transid(sb) != generation + 1) { > > nit: in the same vein as you do for btrfs_super_generation just assign > super_log_root_Transid to a local var and use that. IMO it's more > consistent with what's happening in this function. @generation is used for more than one location (chunk generation and cache generation), while log root transid (along with chunk generation and cache generation) isn't used more than twice. Thus I only assign generation to @generation. Thanks, Qu > >> + btrfs_err(fs_info, >> + "bad log tree, log_root_transid != generation + 1: %llu != %llu + 1", >> + btrfs_super_log_root_transid(sb), generation); >> + ret = -EINVAL; >> + } >> >> return ret; >> } >> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid 2018-10-04 6:57 ` Nikolay Borisov 2018-10-04 7:30 ` Qu Wenruo @ 2018-10-11 12:19 ` David Sterba 1 sibling, 0 replies; 12+ messages in thread From: David Sterba @ 2018-10-11 12:19 UTC (permalink / raw) To: Nikolay Borisov; +Cc: Qu Wenruo, linux-btrfs On Thu, Oct 04, 2018 at 09:57:22AM +0300, Nikolay Borisov wrote: > > + /* > > + * Check log root transid against super block generation. > > + * > > + * Older kernel doesn't populate log_root_transid, only need to check > > + * it when it's not zero. > > + * Since replaying suspicious log tree can cause serious problem, refuse > > + * to mount if it doesn't match. > > + */ > > + if (btrfs_super_log_root_transid(sb) && > > + btrfs_super_log_root_transid(sb) != generation + 1) { > > nit: in the same vein as you do for btrfs_super_generation just assign > super_log_root_Transid to a local var and use that. IMO it's more > consistent with what's happening in this function. While I see your point I think the way Qu did it is also fine, there's not much duplication and I find it readable. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-10-11 13:13 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-10-04 5:49 [PATCH 0/2] btrfs: btrfs_super_block::log_root_transid related enhancement Qu Wenruo 2018-10-04 5:49 ` [PATCH 1/2] btrfs: Populate btrfs_super_block::log_root_transid Qu Wenruo 2018-10-04 8:07 ` Anand Jain 2018-10-04 8:28 ` Qu Wenruo 2018-10-11 12:31 ` David Sterba 2018-10-11 12:45 ` Qu Wenruo 2018-10-11 13:11 ` Nikolay Borisov 2018-10-11 13:13 ` Qu Wenruo 2018-10-04 5:49 ` [PATCH 2/2] btrfs: Validate btrfs_super_block::log_root_transid Qu Wenruo 2018-10-04 6:57 ` Nikolay Borisov 2018-10-04 7:30 ` Qu Wenruo 2018-10-11 12:19 ` David Sterba
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).