lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 02 Jan 2009 09:29:02 +0100
From:	Andreas Sundstrom <sunkan@...pa.cx>
To:	linux-kernel@...r.kernel.org
Subject: Re: 2.6.28 ext4, xen and lvm volume becomes ro after snapshot

Quoting Theodore Tso <tytso@....edu>:

> Can you try this patch?  This should (hopefully!) allow you to mount
> ext4 in a Xen guest without needing to explicitly disable barriers.
> If it works, it's what I plan to push to Linus.
>
>          	     	       	      	      	 - Ted
>
> jbd2: Add barrier not supported test to journal_wait_on_commit_record
>
> Xen doesn't report that barriers are not supported until buffer I/O is
> reported as completed, instead of when the buffer I/O is submitted.
> Add a check and a fallback codepath to journal_wait_on_commit_record()
> to detect this case, so that attempts to mount ext4 filesystems on
> LVM/devicemapper devices on Xen guests don't blow up with an "Aborting
> journal on device XXX"; "Remounting filesystem read-only" error.
>
> Thanks to Andreas Sundstrom for reporting this issue.
>
> Signed-off-by: "Theodore Ts'o" <tytso@....edu>
> ---
>
> diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
> index bd1fad0..4b87547 100644
> --- a/fs/jbd2/commit.c
> +++ b/fs/jbd2/commit.c
> @@ -25,6 +25,7 @@
>  #include <linux/crc32.h>
>  #include <linux/writeback.h>
>  #include <linux/backing-dev.h>
> +#include <linux/bio.h>
>
>  /*
>   * Default IO end handler for temporary BJ_IO buffer_heads.
> @@ -168,12 +169,34 @@ static int   
> journal_submit_commit_record(journal_t *journal,
>   * This function along with journal_submit_commit_record
>   * allows to write the commit record asynchronously.
>   */
> -static int journal_wait_on_commit_record(struct buffer_head *bh)
> +static int journal_wait_on_commit_record(journal_t *journal,
> +					 struct buffer_head *bh)
>  {
>  	int ret = 0;
>
> +retry:
>  	clear_buffer_dirty(bh);
>  	wait_on_buffer(bh);
> +	if (buffer_eopnotsupp(bh) && (journal->j_flags & JBD2_BARRIER)) {
> +		printk(KERN_WARNING
> +		       "JBD2: wait_on_commit_record: sync failed on %s - "
> +		       "disabling barriers\n", journal->j_devname);
> +		spin_lock(&journal->j_state_lock);
> +		journal->j_flags &= ~JBD2_BARRIER;
> +		spin_unlock(&journal->j_state_lock);
> +
> +		lock_buffer(bh);
> +		clear_buffer_dirty(bh);
> +		set_buffer_uptodate(bh);
> +		bh->b_end_io = journal_end_buffer_io_sync;
> +
> +		ret = submit_bh(WRITE_SYNC, bh);
> +		if (ret) {
> +			unlock_buffer(bh);
> +			return ret;
> +		}
> +		goto retry;
> +	}
>
>  	if (unlikely(!buffer_uptodate(bh)))
>  		ret = -EIO;
> @@ -802,7 +825,7 @@ wait_for_iobuf:
>  			__jbd2_journal_abort_hard(journal);
>  	}
>  	if (!err && !is_journal_aborted(journal))
> -		err = journal_wait_on_commit_record(cbh);
> +		err = journal_wait_on_commit_record(journal, cbh);
>
>  	if (err)
>  		jbd2_journal_abort(journal, err);
>

Well, the patch didn't work when I did "patch -i ext4.patch -p1" but I  
did it manually and the code compiles and works fine.
Here are the ext4 related kernel messages:

[    0.147721] EXT4-fs warning (device xvda1): ext4_fill_super:  
extents feature not enabled on this filesystem, use tune2fs.
[    0.148744] EXT4-fs: barriers enabled
[    0.158109] kjournald2 starting.  Commit interval 5 seconds
[    0.158131] EXT4-fs: delayed allocation enabled
[    0.158224] EXT4-fs: mballoc enabled
[    0.158235] EXT4-fs: mounted filesystem with ordered data mode.
[    0.158262] VFS: Mounted root (ext4 filesystem) readonly.
[    3.403818] EXT4 FS on xvda1, internal journal on xvda1:8
[    7.800623] blkfront: xvda1: write barrier op failed
[    7.800640] blkfront: xvda1: barriers disabled
[    7.800651] end_request: I/O error, dev xvda1, sector 4384
[    7.800664] end_request: I/O error, dev xvda1, sector 4384
[    7.800690] JBD2: wait_on_commit_record: sync failed on xvda1:8 -  
disabling barriers

# cat /proc/mounts |grep ext4
/dev/root / ext4 rw,noatime,barrier=1,noextents,data=ordered 0 0

/Andreas
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ