2016-06-08 02:47:13

by Theodore Ts'o

[permalink] [raw]
Subject: [PATCH] ext4: respect the nobarrier mount option in nojournal mode

Also, if we are going to issue the barrier, we should do this after we
write out the parent directories if necessary.

Signed-off-by: Theodore Ts'o <[email protected]>
---
fs/ext4/fsync.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index 8850254..011863e 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -106,9 +106,11 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
}

if (!journal) {
- ret = generic_file_fsync(file, start, end, datasync);
+ ret = __generic_file_fsync(file, start, end, datasync);
if (!ret && !hlist_empty(&inode->i_dentry))
ret = ext4_sync_parent(inode);
+ if (journal->j_flags & JBD2_BARRIER)
+ goto issue_flush;
goto out;
}

@@ -140,6 +142,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
needs_barrier = true;
ret = jbd2_complete_transaction(journal, commit_tid);
if (needs_barrier) {
+ issue_flush:
err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
if (!ret)
ret = err;
--
2.5.0



2016-06-08 03:23:18

by Eric Sandeen

[permalink] [raw]
Subject: Re: [PATCH] ext4: respect the nobarrier mount option in nojournal mode

On 6/7/16 9:47 PM, Theodore Ts'o wrote:
> Also, if we are going to issue the barrier, we should do this after we
> write out the parent directories if necessary.
>
> Signed-off-by: Theodore Ts'o <[email protected]>
> ---
> fs/ext4/fsync.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
> index 8850254..011863e 100644
> --- a/fs/ext4/fsync.c
> +++ b/fs/ext4/fsync.c
> @@ -106,9 +106,11 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
> }
>
> if (!journal) {
> - ret = generic_file_fsync(file, start, end, datasync);
> + ret = __generic_file_fsync(file, start, end, datasync);
> if (!ret && !hlist_empty(&inode->i_dentry))
> ret = ext4_sync_parent(inode);
> + if (journal->j_flags & JBD2_BARRIER)
> + goto issue_flush;

So in the "if (!journal)" case you test journal->j_flags?

Confused...

-Eric

> goto out;
> }
>
> @@ -140,6 +142,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
> needs_barrier = true;
> ret = jbd2_complete_transaction(journal, commit_tid);
> if (needs_barrier) {
> + issue_flush:
> err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
> if (!ret)
> ret = err;
>


2016-06-10 18:44:55

by Theodore Ts'o

[permalink] [raw]
Subject: [PATCH -v2] ext4: respect the nobarrier mount option in nojournal mode

Also, if we are going to issue the barrier, we should do this after we
write out the parent directories if necessary.

Signed-off-by: Theodore Ts'o <[email protected]>
---
fs/ext4/fsync.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index 8850254..5c43725 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -106,9 +106,11 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
}

if (!journal) {
- ret = generic_file_fsync(file, start, end, datasync);
+ ret = __generic_file_fsync(file, start, end, datasync);
if (!ret && !hlist_empty(&inode->i_dentry))
ret = ext4_sync_parent(inode);
+ if (test_opt(inode->i_sb, BARRIER))
+ goto issue_flush;
goto out;
}

@@ -140,6 +142,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
needs_barrier = true;
ret = jbd2_complete_transaction(journal, commit_tid);
if (needs_barrier) {
+ issue_flush:
err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
if (!ret)
ret = err;
--
2.5.0


2016-06-16 18:07:44

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH -v2] ext4: respect the nobarrier mount option in nojournal mode

On Fri 10-06-16 14:44:50, Ted Tso wrote:
> Also, if we are going to issue the barrier, we should do this after we
> write out the parent directories if necessary.
>
> Signed-off-by: Theodore Ts'o <[email protected]>

The patch looks good. You can add:

Reviewed-by: Jan Kara <[email protected]>

Honza

> ---
> fs/ext4/fsync.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
> index 8850254..5c43725 100644
> --- a/fs/ext4/fsync.c
> +++ b/fs/ext4/fsync.c
> @@ -106,9 +106,11 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
> }
>
> if (!journal) {
> - ret = generic_file_fsync(file, start, end, datasync);
> + ret = __generic_file_fsync(file, start, end, datasync);
> if (!ret && !hlist_empty(&inode->i_dentry))
> ret = ext4_sync_parent(inode);
> + if (test_opt(inode->i_sb, BARRIER))
> + goto issue_flush;
> goto out;
> }
>
> @@ -140,6 +142,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
> needs_barrier = true;
> ret = jbd2_complete_transaction(journal, commit_tid);
> if (needs_barrier) {
> + issue_flush:
> err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
> if (!ret)
> ret = err;
> --
> 2.5.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Jan Kara <[email protected]>
SUSE Labs, CR