Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 57106
b: refs/heads/master
c: aa2d332
h: refs/heads/master
v: v3
  • Loading branch information
Linus Torvalds committed May 30, 2007
1 parent 6f71e4b commit 2b3f47c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ade21372b7c6927861845d65432ff0b0b1142ca0
refs/heads/master: aa2d3322989d8fd40fb2e417142c9a029d7831a4
26 changes: 17 additions & 9 deletions trunk/fs/xfs/linux-2.6/xfs_aops.c
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,7 @@ xfs_is_delayed_page(
else if (buffer_delay(bh))
acceptable = (type == IOMAP_DELAY);
else if (buffer_dirty(bh) && buffer_mapped(bh))
acceptable = (type == 0);
acceptable = (type == IOMAP_NEW);
else
break;
} while ((bh = bh->b_this_page) != head);
Expand Down Expand Up @@ -810,7 +810,7 @@ xfs_convert_page(
page_dirty--;
count++;
} else {
type = 0;
type = IOMAP_NEW;
if (buffer_mapped(bh) && all_bh && startio) {
lock_buffer(bh);
xfs_add_to_ioend(inode, bh, offset,
Expand Down Expand Up @@ -968,8 +968,8 @@ xfs_page_state_convert(

bh = head = page_buffers(page);
offset = page_offset(page);
flags = -1;
type = IOMAP_READ;
flags = BMAPI_READ;
type = IOMAP_NEW;

/* TODO: cleanup count and page_dirty */

Expand Down Expand Up @@ -999,14 +999,14 @@ xfs_page_state_convert(
*
* Third case, an unmapped buffer was found, and we are
* in a path where we need to write the whole page out.
*/
*/
if (buffer_unwritten(bh) || buffer_delay(bh) ||
((buffer_uptodate(bh) || PageUptodate(page)) &&
!buffer_mapped(bh) && (unmapped || startio))) {
/*
/*
* Make sure we don't use a read-only iomap
*/
if (flags == BMAPI_READ)
if (flags == BMAPI_READ)
iomap_valid = 0;

if (buffer_unwritten(bh)) {
Expand Down Expand Up @@ -1055,7 +1055,7 @@ xfs_page_state_convert(
* That means it must already have extents allocated
* underneath it. Map the extent by reading it.
*/
if (!iomap_valid || type != IOMAP_READ) {
if (!iomap_valid || flags != BMAPI_READ) {
flags = BMAPI_READ;
size = xfs_probe_cluster(inode, page, bh,
head, 1);
Expand All @@ -1066,7 +1066,15 @@ xfs_page_state_convert(
iomap_valid = xfs_iomap_valid(&iomap, offset);
}

type = IOMAP_READ;
/*
* We set the type to IOMAP_NEW in case we are doing a
* small write at EOF that is extending the file but
* without needing an allocation. We need to update the
* file size on I/O completion in this case so it is
* the same case as having just allocated a new extent
* that we are writing into for the first time.
*/
type = IOMAP_NEW;
if (!test_and_set_bit(BH_Lock, &bh->b_state)) {
ASSERT(buffer_mapped(bh));
if (iomap_valid)
Expand Down

0 comments on commit 2b3f47c

Please sign in to comment.