From: "Machida, Hiroyuki" <machida@sm.sony.co.jp>
To: linux-kernel@vger.kernel.org
Cc: "Machida, Hiroyuki" <machida@sm.sony.co.jp>,
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>,
Andrew Morton <akpm@osdl.org>,
David Howells <dhowells@redhat.com>
Subject: [PATCH] generic_osync_inode() with OSYNC_INODE only passed (Re: [PATCH 1/2] miss-sync changes on attributes)
Date: Fri, 14 Oct 2005 22:02:04 +0900 [thread overview]
Message-ID: <434FAC4C.4050508@sm.sony.co.jp> (raw)
In-Reply-To: <434CD445.2040704@sm.sony.co.jp>
[-- Attachment #1: Type: text/plain, Size: 1722 bytes --]
generic__inode() seems to do over-writing, if OSYNC_INODE only passed.
According comments of generic_osync_inode(), it is expected to write inode
itself only. Current implementation trys to write data page, even if
OSYNC_INODE only passed. This patch fixes it.
This patch is preparetion of other patch to fix "miss-sync changes on
attributes".
Machida, Hiroyuki wrote:
>
>
> OGAWA Hirofumi wrote:
>
>> "Machida, Hiroyuki" <machida@sm.sony.co.jp> writes:
>>
>>
>>> OGAWA Hirofumi wrote:
>>>
>>>> Andrew Morton <akpm@osdl.org> writes:
>>>>
>>>>
>>>>> However there's not much point in writing a brand-new function when
>>>>> write_inode_now() almost does the right thing. We can share the
>>>>> implementation within fs-writeback.c.
>>>>
>>>>
>>>> Indeed. We use the generic_osync_inode() for it?
>>>
>>>
>>> Please let me confirm.
>>> Using generic_osync_inode(inode, NULL, OSYNC_INODE) instaed of
>>> sync_inode_wodata(inode) is peferable for changes on fs/open.c,
>>> even it would write data. Is it correct?
>>
>>
>>
>> No, I only thought the interface is good. I don't know why it writes
>> data pages even if OSYNC_INODE only.
>
>
>
> I checked 2.6.13 tree, following functions call generic_osync_inode().
> However noone calls it with OSYNC_INODE. SO I can't find intention of
> it's usage.
>
> Does anyone know why generic_osync_inode() trys to write data page,
> even if OSYNC_INODE only passed ?
>
> - fs/reiserfs/file.c
> reiserfs_file_write() OSYNC_METADATA | OSYNC_DATA
> - mm/filemap.c
> sync_page_range() OSYNC_METADATA
> sync_page_range_nolock() OSYNC_METADATA
> generic_file_direct_write OSYNC_METADATA
>
--
Hiroyuki Machida machida@sm.sony.co.jp
[-- Attachment #2: osync-inode-only.patch --]
[-- Type: text/plain, Size: 1148 bytes --]
Signed-off-by: Hiroyuki Machida <machida@sm.sony.co.jp>
--- fs/fs-writeback.c.ORG 2005-08-29 08:41:01.000000000 +0900
+++ fs/fs-writeback.c 2005-10-14 21:22:37.329301605 +0900
@@ -614,6 +614,7 @@ int generic_osync_inode(struct inode *in
int err = 0;
int need_write_inode_now = 0;
int err2;
+ long nr_write;
current->flags |= PF_SYNCWRITE;
if (what & OSYNC_DATA)
@@ -632,13 +633,23 @@ int generic_osync_inode(struct inode *in
spin_lock(&inode_lock);
if ((inode->i_state & I_DIRTY) &&
- ((what & OSYNC_INODE) || (inode->i_state & I_DIRTY_DATASYNC)))
+ ((what & OSYNC_INODE) || (inode->i_state & I_DIRTY_DATASYNC))) {
need_write_inode_now = 1;
+ nr_write = (what == OSYNC_INODE) ? 0 : LONG_MAX;
+ }
spin_unlock(&inode_lock);
- if (need_write_inode_now) {
- err2 = write_inode_now(inode, 1);
- if (!err)
+ if (need_write_inode_now &&
+ mapping_cap_writeback_dirty(inode->i_mapping)) {
+ struct writeback_control wbc = {
+ .sync_mode = WB_SYNC_ALL,
+ };
+
+ wbc.nr_to_write = nr_write;
+ might_sleep();
+ err2 = sync_inode(inode, &wbc);
+ wait_on_inode(inode);
+ if (!err)
err = err2;
}
else
next prev parent reply other threads:[~2005-10-14 13:04 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-14 20:39 [PATCH 2/2][FAT] miss-sync issues on sync mount (miss-sync on utime) Machida, Hiroyuki
2005-09-15 13:15 ` OGAWA Hirofumi
2005-09-15 13:58 ` Machida, Hiroyuki
2005-09-29 17:35 ` [PATCH 1/2] miss-sync changes on attributes (Re: [PATCH 2/2][FAT] miss-sync issues on sync mount (miss-sync on utime)) Machida, Hiroyuki
2005-09-29 17:49 ` [PATCH 2/2] replace ext2_sync_inode() with sync_inode_wodata( " Machida, Hiroyuki
2005-09-29 19:20 ` [PATCH 1/2] miss-sync changes on attributes " Machida, Hiroyuki
2005-10-11 21:26 ` Andrew Morton
2005-10-12 4:02 ` OGAWA Hirofumi
2005-10-12 4:16 ` Andrew Morton
2005-10-12 4:58 ` OGAWA Hirofumi
2005-10-12 5:47 ` OGAWA Hirofumi
2005-10-12 5:54 ` Machida, Hiroyuki
2005-10-12 6:10 ` Andrew Morton
2005-10-12 9:04 ` Machida, Hiroyuki
2005-10-12 6:21 ` OGAWA Hirofumi
2005-10-12 9:15 ` Machida, Hiroyuki
2005-10-14 13:01 ` [PATCH] generic_osync_inode() with OSYNC_INODE only passed (Re: [PATCH 1/2] miss-sync changes on attributes) Machida, Hiroyuki
2005-10-14 13:02 ` Machida, Hiroyuki [this message]
2005-10-29 8:42 ` [PATCH] Fix !mapping_cap_writeback_dirty(inode->i_mapping) OGAWA Hirofumi
2005-10-29 8:58 ` [PATCH] Don't use pdflush for filesystems has BDI_CAP_NO_WRITEBACK OGAWA Hirofumi
2005-10-30 17:15 ` OGAWA Hirofumi
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=434FAC4C.4050508@sm.sony.co.jp \
--to=machida@sm.sony.co.jp \
--cc=akpm@osdl.org \
--cc=dhowells@redhat.com \
--cc=hirofumi@mail.parknet.co.jp \
--cc=linux-kernel@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox