All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt
@ 2012-07-12 13:28 Artem Bityutskiy
  2012-07-12 13:28 ` [PATCH 1/3] fs/ufs: remove extra superblock write on unmount Artem Bityutskiy
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Artem Bityutskiy @ 2012-07-12 13:28 UTC (permalink / raw)
  To: Andrew Morton, Al Viro, Evgeniy Dushistov
  Cc: Linux FS Maling List, Linux Kernel Maling List

This patch-set makes UFS file-system stop using the VFS '->write_supers()'
call-back and the '->s_dirt' superblock field because I plan to remove them
once all users are gone.

Like some other similar patch-sets (affs, hfs, hfsplus, reiserfs), we switch to
a delayed job for writing out the superblock instead of using the 's_dirt'
flag. Additionally, this patch-set includes several clean-ups.

Note, checkpatch.pl complains about these patches, but the complaints are about
the code which is already in UFS, not my code. We really need to fix
checkpatch.pl to be smarter.

Tested using the fsstress test from the LTP project.

 fs/ufs/balloc.c |    8 ++--
 fs/ufs/ialloc.c |    4 +-
 fs/ufs/super.c  |  148 ++++++++++++++++++++++++++++++------------------------
 fs/ufs/ufs.h    |    5 ++
 fs/ufs/ufs_fs.h |    1 +
 5 files changed, 94 insertions(+), 72 deletions(-)

Reminder
========

The goal is to get rid of the 'sync_supers()' kernel thread. This kernel thread
wakes up every 5 seconds (by default) and calls '->write_super()' for all
mounted file-systems. And the bad thing is that this is done even if all the
superblocks are clean. Moreover, many file-systems do not even need this and
they do not even register the '->write_super()' method at all (e.g., btrfs).

So 'sync_supers()' mostly just generates useless wake-ups and wastes power.
I am trying to make all file-systems independent of '->write_super()' and plan
to remove 'sync_supers()' and '->write_super()' completely once there are no
more users.

Overall status
==============

1.  ext4: patches submitted,
    https://lkml.org/lkml/2012/7/10/195
2.  ufs: these patches
3.  exofs: patch submitted,
    https://lkml.org/lkml/2012/6/4/211
4.  sysv: patches submitted,
    http://lkml.org/lkml/2012/7/3/250
5.  udf: patch submitted, sits in Jan Kara's tree:
    https://lkml.org/lkml/2012/6/4/233
    git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs for_testing
6.  affs: patches submitted, sit in Al Viro's tree:
    https://lkml.org/lkml/2012/6/6/400
    git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs for-next
7.  hfs: patches submitted, sit Andrew Morton's tree
    http://lkml.org/lkml/2012/6/12/82
8.  hfsplus: patches submitted, sit in Andrew Morton's tree:
    https://lkml.org/lkml/2012/6/13/195
9.  ext2:     done, see commit f72cf5e223a28d3b3ea7dc9e40464fd534e359e8
10. vfat:     done, see commit 78491189ddb6d84d4a4abae992ed891a236d0263
11. jffs2:    done, see commit 208b14e507c00ff7f108e1a388dd3d8cc805a443
12. reiserfs: done, see commit 033369d1af1264abc23bea2e174aa47cdd212f6f

Thanks,
Artem.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/3] fs/ufs: remove extra superblock write on unmount
  2012-07-12 13:28 [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Artem Bityutskiy
@ 2012-07-12 13:28 ` Artem Bityutskiy
  2012-07-12 13:28 ` [PATCH 2/3] fs/ufs: re-arrange the code a bit Artem Bityutskiy
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Artem Bityutskiy @ 2012-07-12 13:28 UTC (permalink / raw)
  To: Andrew Morton, Al Viro, Evgeniy Dushistov
  Cc: Linux FS Maling List, Linux Kernel Maling List

From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>

UFS calls 'ufs_write_super()' from 'ufs_put_super()' in order to write the
superblocks to the media. However, it is not needed because VFS calls
'->sync_fs()' before calling '->put_super()' - so by the time we are in
'ufs_write_super()', the superblocks are already synchronized.

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
---
 fs/ufs/super.c |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index 302f340..ae91e0a 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -1238,9 +1238,6 @@ static void ufs_put_super(struct super_block *sb)
 		
 	UFSD("ENTER\n");
 
-	if (sb->s_dirt)
-		ufs_write_super(sb);
-
 	if (!(sb->s_flags & MS_RDONLY))
 		ufs_put_super_internal(sb);
 	
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] fs/ufs: re-arrange the code a bit
  2012-07-12 13:28 [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Artem Bityutskiy
  2012-07-12 13:28 ` [PATCH 1/3] fs/ufs: remove extra superblock write on unmount Artem Bityutskiy
@ 2012-07-12 13:28 ` Artem Bityutskiy
  2012-07-12 13:28 ` [PATCH 3/3] fs/ufs: get rid of write_super Artem Bityutskiy
  2012-07-12 22:58 ` [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Andrew Morton
  3 siblings, 0 replies; 8+ messages in thread
From: Artem Bityutskiy @ 2012-07-12 13:28 UTC (permalink / raw)
  To: Andrew Morton, Al Viro, Evgeniy Dushistov
  Cc: Linux FS Maling List, Linux Kernel Maling List

From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>

This patch does not do any functional changes. It only moves 3 functions
in fs/ufs/super.c a little bit up in order to prepare for further changes
where I'll need this new arrangement to avoid forward declarations.

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
---
 fs/ufs/super.c |  117 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 58 insertions(+), 59 deletions(-)

diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index ae91e0a..ad56c6d 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -691,6 +691,64 @@ static void ufs_put_super_internal(struct super_block *sb)
 	UFSD("EXIT\n");
 }
 
+static int ufs_sync_fs(struct super_block *sb, int wait)
+{
+	struct ufs_sb_private_info * uspi;
+	struct ufs_super_block_first * usb1;
+	struct ufs_super_block_third * usb3;
+	unsigned flags;
+
+	lock_ufs(sb);
+	lock_super(sb);
+
+	UFSD("ENTER\n");
+
+	flags = UFS_SB(sb)->s_flags;
+	uspi = UFS_SB(sb)->s_uspi;
+	usb1 = ubh_get_usb_first(uspi);
+	usb3 = ubh_get_usb_third(uspi);
+
+	usb1->fs_time = cpu_to_fs32(sb, get_seconds());
+	if ((flags & UFS_ST_MASK) == UFS_ST_SUN  ||
+	    (flags & UFS_ST_MASK) == UFS_ST_SUNOS ||
+	    (flags & UFS_ST_MASK) == UFS_ST_SUNx86)
+		ufs_set_fs_state(sb, usb1, usb3,
+				UFS_FSOK - fs32_to_cpu(sb, usb1->fs_time));
+	ufs_put_cstotal(sb);
+	sb->s_dirt = 0;
+
+	UFSD("EXIT\n");
+	unlock_super(sb);
+	unlock_ufs(sb);
+
+	return 0;
+}
+
+static void ufs_write_super(struct super_block *sb)
+{
+	if (!(sb->s_flags & MS_RDONLY))
+		ufs_sync_fs(sb, 1);
+	else
+		sb->s_dirt = 0;
+}
+
+static void ufs_put_super(struct super_block *sb)
+{
+	struct ufs_sb_info * sbi = UFS_SB(sb);
+
+	UFSD("ENTER\n");
+
+	if (!(sb->s_flags & MS_RDONLY))
+		ufs_put_super_internal(sb);
+
+	ubh_brelse_uspi (sbi->s_uspi);
+	kfree (sbi->s_uspi);
+	kfree (sbi);
+	sb->s_fs_info = NULL;
+	UFSD("EXIT\n");
+	return;
+}
+
 static int ufs_fill_super(struct super_block *sb, void *data, int silent)
 {
 	struct ufs_sb_info * sbi;
@@ -1191,65 +1249,6 @@ failed_nomem:
 	return -ENOMEM;
 }
 
-static int ufs_sync_fs(struct super_block *sb, int wait)
-{
-	struct ufs_sb_private_info * uspi;
-	struct ufs_super_block_first * usb1;
-	struct ufs_super_block_third * usb3;
-	unsigned flags;
-
-	lock_ufs(sb);
-	lock_super(sb);
-
-	UFSD("ENTER\n");
-
-	flags = UFS_SB(sb)->s_flags;
-	uspi = UFS_SB(sb)->s_uspi;
-	usb1 = ubh_get_usb_first(uspi);
-	usb3 = ubh_get_usb_third(uspi);
-
-	usb1->fs_time = cpu_to_fs32(sb, get_seconds());
-	if ((flags & UFS_ST_MASK) == UFS_ST_SUN  ||
-	    (flags & UFS_ST_MASK) == UFS_ST_SUNOS ||
-	    (flags & UFS_ST_MASK) == UFS_ST_SUNx86)
-		ufs_set_fs_state(sb, usb1, usb3,
-				UFS_FSOK - fs32_to_cpu(sb, usb1->fs_time));
-	ufs_put_cstotal(sb);
-	sb->s_dirt = 0;
-
-	UFSD("EXIT\n");
-	unlock_super(sb);
-	unlock_ufs(sb);
-
-	return 0;
-}
-
-static void ufs_write_super(struct super_block *sb)
-{
-	if (!(sb->s_flags & MS_RDONLY))
-		ufs_sync_fs(sb, 1);
-	else
-		sb->s_dirt = 0;
-}
-
-static void ufs_put_super(struct super_block *sb)
-{
-	struct ufs_sb_info * sbi = UFS_SB(sb);
-		
-	UFSD("ENTER\n");
-
-	if (!(sb->s_flags & MS_RDONLY))
-		ufs_put_super_internal(sb);
-	
-	ubh_brelse_uspi (sbi->s_uspi);
-	kfree (sbi->s_uspi);
-	kfree (sbi);
-	sb->s_fs_info = NULL;
-	UFSD("EXIT\n");
-	return;
-}
-
-
 static int ufs_remount (struct super_block *sb, int *mount_flags, char *data)
 {
 	struct ufs_sb_private_info * uspi;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] fs/ufs: get rid of write_super
  2012-07-12 13:28 [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Artem Bityutskiy
  2012-07-12 13:28 ` [PATCH 1/3] fs/ufs: remove extra superblock write on unmount Artem Bityutskiy
  2012-07-12 13:28 ` [PATCH 2/3] fs/ufs: re-arrange the code a bit Artem Bityutskiy
@ 2012-07-12 13:28 ` Artem Bityutskiy
  2012-07-12 22:58 ` [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Andrew Morton
  3 siblings, 0 replies; 8+ messages in thread
From: Artem Bityutskiy @ 2012-07-12 13:28 UTC (permalink / raw)
  To: Andrew Morton, Al Viro, Evgeniy Dushistov
  Cc: Linux FS Maling List, Linux Kernel Maling List

From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>

This patch makes UFS stop using the VFS '->write_super()' method along with
the 's_dirt' superblock flag, because they are on their way out.

The way we implement this is that we schedule a delay job instead relying on
's_dirt' and '->write_super()'.

The whole "superblock write-out" VFS infrastructure is served by the
'sync_supers()' kernel thread, which wakes up every 5 (by default) seconds and
writes out all dirty superblocks using the '->write_super()' call-back.  But the
problem with this thread is that it wastes power by waking up the system every
5 seconds, even if there are no diry superblocks, or there are no client
file-systems which would need this (e.g., btrfs does not use
'->write_super()'). So we want to kill it completely and thus, we need to make
file-systems to stop using the '->write_super()' VFS service, and then remove
it together with the kernel thread.

Tested using fsstress from the LTP project.

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
---
 fs/ufs/balloc.c |    8 ++++----
 fs/ufs/ialloc.c |    4 ++--
 fs/ufs/super.c  |   40 ++++++++++++++++++++++++++++++----------
 fs/ufs/ufs.h    |    5 +++++
 fs/ufs/ufs_fs.h |    1 +
 5 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/fs/ufs/balloc.c b/fs/ufs/balloc.c
index 42694e1..1b3e410 100644
--- a/fs/ufs/balloc.c
+++ b/fs/ufs/balloc.c
@@ -116,7 +116,7 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
 	ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
 	if (sb->s_flags & MS_SYNCHRONOUS)
 		ubh_sync_block(UCPI_UBH(ucpi));
-	sb->s_dirt = 1;
+	ufs_mark_sb_dirty(sb);
 	
 	unlock_super (sb);
 	UFSD("EXIT\n");
@@ -214,7 +214,7 @@ do_more:
 		goto do_more;
 	}
 
-	sb->s_dirt = 1;
+	ufs_mark_sb_dirty(sb);
 	unlock_super (sb);
 	UFSD("EXIT\n");
 	return;
@@ -557,7 +557,7 @@ static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
 	ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
 	if (sb->s_flags & MS_SYNCHRONOUS)
 		ubh_sync_block(UCPI_UBH(ucpi));
-	sb->s_dirt = 1;
+	ufs_mark_sb_dirty(sb);
 
 	UFSD("EXIT, fragment %llu\n", (unsigned long long)fragment);
 	
@@ -677,7 +677,7 @@ succed:
 	ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
 	if (sb->s_flags & MS_SYNCHRONOUS)
 		ubh_sync_block(UCPI_UBH(ucpi));
-	sb->s_dirt = 1;
+	ufs_mark_sb_dirty(sb);
 
 	result += cgno * uspi->s_fpg;
 	UFSD("EXIT3, result %llu\n", (unsigned long long)result);
diff --git a/fs/ufs/ialloc.c b/fs/ufs/ialloc.c
index 4ec5c10..e84cbe2 100644
--- a/fs/ufs/ialloc.c
+++ b/fs/ufs/ialloc.c
@@ -116,7 +116,7 @@ void ufs_free_inode (struct inode * inode)
 	if (sb->s_flags & MS_SYNCHRONOUS)
 		ubh_sync_block(UCPI_UBH(ucpi));
 	
-	sb->s_dirt = 1;
+	ufs_mark_sb_dirty(sb);
 	unlock_super (sb);
 	UFSD("EXIT\n");
 }
@@ -288,7 +288,7 @@ cg_found:
 	ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
 	if (sb->s_flags & MS_SYNCHRONOUS)
 		ubh_sync_block(UCPI_UBH(ucpi));
-	sb->s_dirt = 1;
+	ufs_mark_sb_dirty(sb);
 
 	inode->i_ino = cg * uspi->s_ipg + bit;
 	inode_init_owner(inode, dir, mode);
diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index ad56c6d..444927e 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -302,7 +302,7 @@ void ufs_error (struct super_block * sb, const char * function,
 	if (!(sb->s_flags & MS_RDONLY)) {
 		usb1->fs_clean = UFS_FSBAD;
 		ubh_mark_buffer_dirty(USPI_UBH(uspi));
-		sb->s_dirt = 1;
+		ufs_mark_sb_dirty(sb);
 		sb->s_flags |= MS_RDONLY;
 	}
 	va_start (args, fmt);
@@ -334,7 +334,7 @@ void ufs_panic (struct super_block * sb, const char * function,
 	if (!(sb->s_flags & MS_RDONLY)) {
 		usb1->fs_clean = UFS_FSBAD;
 		ubh_mark_buffer_dirty(USPI_UBH(uspi));
-		sb->s_dirt = 1;
+		ufs_mark_sb_dirty(sb);
 	}
 	va_start (args, fmt);
 	vsnprintf (error_buf, sizeof(error_buf), fmt, args);
@@ -715,7 +715,6 @@ static int ufs_sync_fs(struct super_block *sb, int wait)
 		ufs_set_fs_state(sb, usb1, usb3,
 				UFS_FSOK - fs32_to_cpu(sb, usb1->fs_time));
 	ufs_put_cstotal(sb);
-	sb->s_dirt = 0;
 
 	UFSD("EXIT\n");
 	unlock_super(sb);
@@ -724,12 +723,31 @@ static int ufs_sync_fs(struct super_block *sb, int wait)
 	return 0;
 }
 
-static void ufs_write_super(struct super_block *sb)
+static void delayed_sync_fs(struct work_struct *work)
 {
-	if (!(sb->s_flags & MS_RDONLY))
-		ufs_sync_fs(sb, 1);
-	else
-		sb->s_dirt = 0;
+	struct ufs_sb_info *sbi;
+
+	sbi = container_of(work, struct ufs_sb_info, sync_work.work);
+
+	spin_lock(&sbi->work_lock);
+	sbi->work_queued = 0;
+	spin_unlock(&sbi->work_lock);
+
+	ufs_sync_fs(sbi->sb, 1);
+}
+
+void ufs_mark_sb_dirty(struct super_block *sb)
+{
+	struct ufs_sb_info *sbi = UFS_SB(sb);
+	unsigned long delay;
+
+	spin_lock(&sbi->work_lock);
+	if (!sbi->work_queued) {
+		delay = msecs_to_jiffies(dirty_writeback_interval * 10);
+		queue_delayed_work(system_long_wq, &sbi->sync_work, delay);
+		sbi->work_queued = 1;
+	}
+	spin_unlock(&sbi->work_lock);
 }
 
 static void ufs_put_super(struct super_block *sb)
@@ -740,6 +758,7 @@ static void ufs_put_super(struct super_block *sb)
 
 	if (!(sb->s_flags & MS_RDONLY))
 		ufs_put_super_internal(sb);
+	cancel_delayed_work_sync(&sbi->sync_work);
 
 	ubh_brelse_uspi (sbi->s_uspi);
 	kfree (sbi->s_uspi);
@@ -774,6 +793,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
 	if (!sbi)
 		goto failed_nomem;
 	sb->s_fs_info = sbi;
+	sbi->sb = sb;
 
 	UFSD("flag %u\n", (int)(sb->s_flags & MS_RDONLY));
 	
@@ -785,6 +805,8 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
 	}
 #endif
 	mutex_init(&sbi->mutex);
+	spin_lock_init(&sbi->work_lock);
+	INIT_DELAYED_WORK(&sbi->sync_work, delayed_sync_fs);
 	/*
 	 * Set default mount options
 	 * Parse mount options
@@ -1304,7 +1326,6 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data)
 			ufs_set_fs_state(sb, usb1, usb3,
 				UFS_FSOK - fs32_to_cpu(sb, usb1->fs_time));
 		ubh_mark_buffer_dirty (USPI_UBH(uspi));
-		sb->s_dirt = 0;
 		sb->s_flags |= MS_RDONLY;
 	} else {
 	/*
@@ -1454,7 +1475,6 @@ static const struct super_operations ufs_super_ops = {
 	.write_inode	= ufs_write_inode,
 	.evict_inode	= ufs_evict_inode,
 	.put_super	= ufs_put_super,
-	.write_super	= ufs_write_super,
 	.sync_fs	= ufs_sync_fs,
 	.statfs		= ufs_statfs,
 	.remount_fs	= ufs_remount,
diff --git a/fs/ufs/ufs.h b/fs/ufs/ufs.h
index 528750b..343e6fc 100644
--- a/fs/ufs/ufs.h
+++ b/fs/ufs/ufs.h
@@ -20,6 +20,10 @@ struct ufs_sb_info {
 	unsigned s_mount_opt;
 	struct mutex mutex;
 	struct task_struct *mutex_owner;
+	struct super_block *sb;
+	int work_queued; /* non-zero if the delayed work is queued */
+	struct delayed_work sync_work; /* FS sync delayed work */
+	spinlock_t work_lock; /* protects sync_work and work_queued */
 };
 
 struct ufs_inode_info {
@@ -123,6 +127,7 @@ extern __printf(3, 4)
 void ufs_error(struct super_block *, const char *, const char *, ...);
 extern __printf(3, 4)
 void ufs_panic(struct super_block *, const char *, const char *, ...);
+void ufs_mark_sb_dirty(struct super_block *sb);
 
 /* symlink.c */
 extern const struct inode_operations ufs_fast_symlink_inode_operations;
diff --git a/fs/ufs/ufs_fs.h b/fs/ufs/ufs_fs.h
index 8aba544..0cbd5d3 100644
--- a/fs/ufs/ufs_fs.h
+++ b/fs/ufs/ufs_fs.h
@@ -34,6 +34,7 @@
 #include <linux/kernel.h>
 #include <linux/stat.h>
 #include <linux/fs.h>
+#include <linux/workqueue.h>
 
 #include <asm/div64.h>
 typedef __u64 __bitwise __fs64;
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt
  2012-07-12 13:28 [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Artem Bityutskiy
                   ` (2 preceding siblings ...)
  2012-07-12 13:28 ` [PATCH 3/3] fs/ufs: get rid of write_super Artem Bityutskiy
@ 2012-07-12 22:58 ` Andrew Morton
  2012-07-13  5:34   ` Artem Bityutskiy
  3 siblings, 1 reply; 8+ messages in thread
From: Andrew Morton @ 2012-07-12 22:58 UTC (permalink / raw)
  To: Artem Bityutskiy
  Cc: Al Viro, Evgeniy Dushistov, Linux FS Maling List,
	Linux Kernel Maling List

On Thu, 12 Jul 2012 16:28:05 +0300
Artem Bityutskiy <dedekind1@gmail.com> wrote:

> Note, checkpatch.pl complains about these patches, but the complaints are about
> the code which is already in UFS, not my code. We really need to fix
> checkpatch.pl to be smarter.

Just fix them up as you go - the code is already a mixture of "right"
and "wrong" (a consequence of a lot of it being "wrong") - we might as
well tip it further in the "right" direction.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt
  2012-07-12 22:58 ` [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Andrew Morton
@ 2012-07-13  5:34   ` Artem Bityutskiy
  2012-07-13  5:45     ` Andrew Morton
  0 siblings, 1 reply; 8+ messages in thread
From: Artem Bityutskiy @ 2012-07-13  5:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Al Viro, Evgeniy Dushistov, Linux FS Maling List,
	Linux Kernel Maling List

[-- Attachment #1: Type: text/plain, Size: 635 bytes --]

On Thu, 2012-07-12 at 15:58 -0700, Andrew Morton wrote:
> Just fix them up as you go - the code is already a mixture of "right"
> and "wrong" (a consequence of a lot of it being "wrong") - we might as
> well tip it further in the "right" direction. 

Yeah, but I'd say 80% of it has its own "wrong" coding style, so fixing
it is a separate patch-set. Simply because when I partially fix it,
there are almost always context lines which upset checkpatch.pl, so I
would need to fix it all. I can easily clean it up a bit separately,
just let me know if you want me to do this.

Thanks!

-- 
Best Regards,
Artem Bityutskiy

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt
  2012-07-13  5:34   ` Artem Bityutskiy
@ 2012-07-13  5:45     ` Andrew Morton
  2012-07-13  5:47       ` Artem Bityutskiy
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Morton @ 2012-07-13  5:45 UTC (permalink / raw)
  To: dedekind1
  Cc: Al Viro, Evgeniy Dushistov, Linux FS Maling List,
	Linux Kernel Maling List

On Fri, 13 Jul 2012 08:34:44 +0300 Artem Bityutskiy <dedekind1@gmail.com> wrote:

> On Thu, 2012-07-12 at 15:58 -0700, Andrew Morton wrote:
> > Just fix them up as you go - the code is already a mixture of "right"
> > and "wrong" (a consequence of a lot of it being "wrong") - we might as
> > well tip it further in the "right" direction. 
> 
> Yeah, but I'd say 80% of it has its own "wrong" coding style, so fixing
> it is a separate patch-set. Simply because when I partially fix it,
> there are almost always context lines which upset checkpatch.pl, so I
> would need to fix it all. I can easily clean it up a bit separately,
> just let me know if you want me to do this.

checkpatch does not report on context lines - only on added lines.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt
  2012-07-13  5:45     ` Andrew Morton
@ 2012-07-13  5:47       ` Artem Bityutskiy
  0 siblings, 0 replies; 8+ messages in thread
From: Artem Bityutskiy @ 2012-07-13  5:47 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Al Viro, Evgeniy Dushistov, Linux FS Maling List,
	Linux Kernel Maling List

[-- Attachment #1: Type: text/plain, Size: 302 bytes --]

On Thu, 2012-07-12 at 22:45 -0700, Andrew Morton wrote:
> checkpatch does not report on context lines - only on added lines.

Hmm, I think I saw it ding this in the past. Anyway, I have no problems
cleaning at lease white-spaces in UFS globally separately.

-- 
Best Regards,
Artem Bityutskiy

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-07-13  5:52 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-12 13:28 [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Artem Bityutskiy
2012-07-12 13:28 ` [PATCH 1/3] fs/ufs: remove extra superblock write on unmount Artem Bityutskiy
2012-07-12 13:28 ` [PATCH 2/3] fs/ufs: re-arrange the code a bit Artem Bityutskiy
2012-07-12 13:28 ` [PATCH 3/3] fs/ufs: get rid of write_super Artem Bityutskiy
2012-07-12 22:58 ` [PATCH 0/3] fs/ufs: stop using write_supers and s_dirt Andrew Morton
2012-07-13  5:34   ` Artem Bityutskiy
2012-07-13  5:45     ` Andrew Morton
2012-07-13  5:47       ` Artem Bityutskiy

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.