All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Slaby <jslaby@suse.cz>
To: stable@vger.kernel.org
Cc: Lukas Czerner <lczerner@redhat.com>,
	Theodore Ts'o <tytso@mit.edu>, Frank Mayhar <fmayhar@google.com>,
	Jiri Slaby <jslaby@suse.cz>
Subject: [patch added to the 3.12 stable tree] ext4: make fsync to sync parent dir in no-journal for real this time
Date: Mon,  4 May 2015 14:37:26 +0200	[thread overview]
Message-ID: <1430743082-6957-35-git-send-email-jslaby@suse.cz> (raw)
In-Reply-To: <1430743082-6957-1-git-send-email-jslaby@suse.cz>

From: Lukas Czerner <lczerner@redhat.com>

This patch has been added to the 3.12 stable tree. If you have any
objections, please let us know.

===============

commit e12fb97222fc41e8442896934f76d39ef99b590a upstream.

Previously commit 14ece1028b3ed53ffec1b1213ffc6acaf79ad77c added a
support for for syncing parent directory of newly created inodes to
make sure that the inode is not lost after a power failure in
no-journal mode.

However this does not work in majority of cases, namely:
 - if the directory has inline data
 - if the directory is already indexed
 - if the directory already has at least one block and:
	- the new entry fits into it
	- or we've successfully converted it to indexed

So in those cases we might lose the inode entirely even after fsync in
the no-journal mode. This also includes ext2 default mode obviously.

I've noticed this while running xfstest generic/321 and even though the
test should fail (we need to run fsck after a crash in no-journal mode)
I could not find a newly created entries even when if it was fsynced
before.

Fix this by adjusting the ext4_add_entry() successful exit paths to set
the inode EXT4_STATE_NEWENTRY so that fsync has the chance to fsync the
parent directory as well.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: Frank Mayhar <fmayhar@google.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 fs/ext4/namei.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 7e6954cbcef7..4587a1b31c93 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -1870,7 +1870,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 			  struct inode *inode)
 {
 	struct inode *dir = dentry->d_parent->d_inode;
-	struct buffer_head *bh;
+	struct buffer_head *bh = NULL;
 	struct ext4_dir_entry_2 *de;
 	struct ext4_dir_entry_tail *t;
 	struct super_block *sb;
@@ -1894,14 +1894,14 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 			return retval;
 		if (retval == 1) {
 			retval = 0;
-			return retval;
+			goto out;
 		}
 	}
 
 	if (is_dx(dir)) {
 		retval = ext4_dx_add_entry(handle, dentry, inode);
 		if (!retval || (retval != ERR_BAD_DX_DIR))
-			return retval;
+			goto out;
 		ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
 		dx_fallback++;
 		ext4_mark_inode_dirty(handle, dir);
@@ -1913,14 +1913,15 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 			return PTR_ERR(bh);
 
 		retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
-		if (retval != -ENOSPC) {
-			brelse(bh);
-			return retval;
-		}
+		if (retval != -ENOSPC)
+			goto out;
 
 		if (blocks == 1 && !dx_fallback &&
-		    EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX))
-			return make_indexed_dir(handle, dentry, inode, bh);
+		    EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) {
+			retval = make_indexed_dir(handle, dentry, inode, bh);
+			bh = NULL; /* make_indexed_dir releases bh */
+			goto out;
+		}
 		brelse(bh);
 	}
 	bh = ext4_append(handle, dir, &block);
@@ -1936,6 +1937,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 	}
 
 	retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
+out:
 	brelse(bh);
 	if (retval == 0)
 		ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY);
-- 
2.3.5


  parent reply	other threads:[~2015-05-04 12:38 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-04 12:36 [patch added to the 3.12 stable tree] drivers: parport: Kconfig: exclude arm64 for PARPORT_PC Jiri Slaby
2015-05-04 12:36 ` [patch added to the 3.12 stable tree] usb: gadget: composite: enable BESL support Jiri Slaby
2015-05-04 12:36 ` [patch added to the 3.12 stable tree] nosave: consolidate __nosave_{begin,end} in <asm/sections.h> Jiri Slaby
2015-05-04 12:36 ` [patch added to the 3.12 stable tree] KVM: s390: Zero out current VMDB of STSI before including level3 data Jiri Slaby
2015-05-04 12:36 ` [patch added to the 3.12 stable tree] s390/hibernate: fix save and restore of kernel text section Jiri Slaby
2015-05-04 12:36 ` [patch added to the 3.12 stable tree] KVM: use slowpath for cross page cached accesses Jiri Slaby
2015-05-04 12:36 ` [patch added to the 3.12 stable tree] MIPS: Hibernate: flush TLB entries earlier Jiri Slaby
2015-05-04 12:36 ` [patch added to the 3.12 stable tree] cdc-wdm: fix endianness bug in debug statements Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] spi: spidev: fix possible arithmetic overflow for multi-transfer message Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] compal-laptop: Check return value of power_supply_register Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ring-buffer: Replace this_cpu_*() with __this_cpu_*() Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] power_supply: twl4030_madc: Check return value of power_supply_register Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] power_supply: lp8788-charger: Fix leaked power supply on probe fail Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ARM: 8320/1: fix integer overflow in ELF_ET_DYN_BASE Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ARM: S3C64XX: Use fixed IRQ bases to avoid conflicts on Cragganmore Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ARM: dts: dove: Fix uart[23] reg property Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: phy: Find the right match in devm_usb_phy_match Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: define a generic USB_RESUME_TIMEOUT macro Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: host: fusbh200: use new USB_RESUME_TIMEOUT Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: host: uhci: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: host: fotg210: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: host: r8a66597: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: host: isp116x: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: host: xhci: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: host: sl811: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: dwc2: hcd: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] usb: core: hub: " Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ALSA: emu10k1: don't deadlock in proc-functions Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] Input: elantech - fix absolute mode setting on some ASUS laptops Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] fs/binfmt_elf.c: fix bug in loading of PIE binaries Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ptrace: fix race between ptrace_resume() and wait_task_stopped() Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] rtlwifi: rtl8192cu: Add new USB ID Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] rtlwifi: rtl8192cu: Add new device ID Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] arm64: vdso: fix build error when switching from LE to BE Jiri Slaby
2015-05-04 12:37 ` Jiri Slaby [this message]
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] powerpc/perf: Cap 64bit userspace backtraces to PERF_MAX_STACK_DEPTH Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] tools lib traceevent kbuffer: Remove extra update to data pointer in PADDING Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] tools/power turbostat: Use $(CURDIR) instead of $(PWD) and add support for O= option in Makefile Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] UBI: account for bitflips in both the VID header and data Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] UBI: fix out of bounds write Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] UBI: initialize LEB number variable Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] UBI: fix check for "too many bytes" Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] scsi: storvsc: Fix a bug in copy_from_bounce_buffer() Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] target: Fix COMPARE_AND_WRITE with SG_TO_MEM_NOALLOC handling Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] Bluetooth: ath3k: Add support Atheros AR5B195 combo Mini PCIe card Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] powerpc: Fix missing L2 cache size in /sys/devices/system/cpu Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ACPICA: Utilities: split IO address types from data type models Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] xtensa: xtfpga: fix hardware lockup caused by LCD driver Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] xtensa: provide __NR_sync_file_range2 instead of __NR_sync_file_range Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] xtensa: ISS: fix locking in TAP network adapter Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] gpio: mvebu: Fix mask/unmask managment per irq chip type Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] dm crypt: fix deadlock when async crypto algorithm returns -EBUSY Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] Drivers: hv: vmbus: Fix a bug in the error path in vmbus_open() Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] mvsas: fix panic on expander attached SATA devices Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] stk1160: Make sure current buffer is released Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] IB/core: disallow registering 0-sized memory region Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] IB/core: don't disallow registering region starting at 0x0 Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] IB/mlx4: Fix WQE LSO segment calculation Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] i2c: core: Export bus recovery functions Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] drm/radeon: fix doublescan modes (v2) Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] drm/i915: cope with large i2c transfers Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] RCU pathwalk breakage when running into a symlink overmounting something Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] ksoftirqd: Enable IRQs and call cond_resched() before poking RCU Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] e1000: add dummy allocator to fix race condition between mtu change and netpoll Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] lib: memzero_explicit: use barrier instead of OPTIMIZER_HIDE_VAR Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] wl18xx: show rx_frames_per_rates as an array as it really is Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] crypto: omap-aes - Fix support for unequal lengths Jiri Slaby
2015-05-04 12:37 ` [patch added to the 3.12 stable tree] C6x: time: Ensure consistency in __init Jiri Slaby
2015-05-04 12:38 ` [patch added to the 3.12 stable tree] memstick: mspro_block: add missing curly braces Jiri Slaby
2015-05-04 12:38 ` [patch added to the 3.12 stable tree] driver core: bus: Goto appropriate labels on failure in bus_add_device Jiri Slaby
2015-05-04 12:38 ` [patch added to the 3.12 stable tree] fs: take i_mutex during prepare_binprm for set[ug]id executables Jiri Slaby

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1430743082-6957-35-git-send-email-jslaby@suse.cz \
    --to=jslaby@suse.cz \
    --cc=fmayhar@google.com \
    --cc=lczerner@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.