Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

jbd2: move escape handle to futher improve jbd2_journal_write_metadata_buffer

Move escape handle to futher improve code readability and remove some
repeat check.

Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://patch.msgid.link/20240801013815.2393869-7-shikemeng@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>

authored by

Kemeng Shi and committed by
Theodore Ts'o
f47aa3eb 7c48e7d5

+24 -25
+24 -25
fs/jbd2/journal.c
··· 281 281 write_unlock(&journal->j_state_lock); 282 282 } 283 283 284 + static inline bool jbd2_data_needs_escaping(char *data) 285 + { 286 + return *((__be32 *)data) == cpu_to_be32(JBD2_MAGIC_NUMBER); 287 + } 288 + 289 + static inline void jbd2_data_do_escape(char *data) 290 + { 291 + *((unsigned int *)data) = 0; 292 + } 293 + 284 294 /* 285 295 * jbd2_journal_write_metadata_buffer: write a metadata buffer to the journal. 286 296 * ··· 329 319 sector_t blocknr) 330 320 { 331 321 int do_escape = 0; 332 - char *mapped_data; 333 322 struct buffer_head *new_bh; 334 323 struct folio *new_folio; 335 324 unsigned int new_offset; ··· 359 350 if (jh_in->b_frozen_data) { 360 351 new_folio = virt_to_folio(jh_in->b_frozen_data); 361 352 new_offset = offset_in_folio(new_folio, jh_in->b_frozen_data); 362 - mapped_data = jh_in->b_frozen_data; 353 + do_escape = jbd2_data_needs_escaping(jh_in->b_frozen_data); 354 + if (do_escape) 355 + jbd2_data_do_escape(jh_in->b_frozen_data); 363 356 } else { 357 + char *tmp; 358 + char *mapped_data; 359 + 364 360 new_folio = bh_in->b_folio; 365 361 new_offset = offset_in_folio(new_folio, bh_in->b_data); 366 362 mapped_data = kmap_local_folio(new_folio, new_offset); ··· 377 363 */ 378 364 jbd2_buffer_frozen_trigger(jh_in, mapped_data, 379 365 jh_in->b_triggers); 380 - } 381 - 382 - /* 383 - * Check for escaping 384 - */ 385 - if (*((__be32 *)mapped_data) == cpu_to_be32(JBD2_MAGIC_NUMBER)) 386 - do_escape = 1; 387 - if (!jh_in->b_frozen_data) 366 + do_escape = jbd2_data_needs_escaping(mapped_data); 388 367 kunmap_local(mapped_data); 389 - 390 - /* 391 - * Do we need to do a data copy? 392 - */ 393 - if (do_escape && !jh_in->b_frozen_data) { 394 - char *tmp; 368 + /* 369 + * Do we need to do a data copy? 370 + */ 371 + if (!do_escape) 372 + goto escape_done; 395 373 396 374 spin_unlock(&jh_in->b_state_lock); 397 375 tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS); ··· 410 404 copy_done: 411 405 new_folio = virt_to_folio(jh_in->b_frozen_data); 412 406 new_offset = offset_in_folio(new_folio, jh_in->b_frozen_data); 407 + jbd2_data_do_escape(jh_in->b_frozen_data); 413 408 } 414 409 415 - /* 416 - * Did we need to do an escaping? Now we've done all the 417 - * copying, we can finally do so. 418 - * b_frozen_data is from jbd2_alloc() which always provides an 419 - * address from the direct kernels mapping. 420 - */ 421 - if (do_escape) 422 - *((unsigned int *)jh_in->b_frozen_data) = 0; 423 - 410 + escape_done: 424 411 folio_set_bh(new_bh, new_folio, new_offset); 425 412 new_bh->b_size = bh_in->b_size; 426 413 new_bh->b_bdev = journal->j_dev;