diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-17 13:53:35 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-17 13:53:35 -0700 |
commit | 7d32c0aca4fbd0319c860d12af5fae3e88c760e6 (patch) | |
tree | 3df9712c128a98916601a98510e5160dac809264 /fs/logfs/segment.c | |
parent | 3d2c978e0cd8b1157f9eebd13062d61fb7a75ad5 (diff) | |
parent | 6f485b41875dbf5160c1990322469c1f65f77b28 (diff) | |
download | op-kernel-dev-7d32c0aca4fbd0319c860d12af5fae3e88c760e6.zip op-kernel-dev-7d32c0aca4fbd0319c860d12af5fae3e88c760e6.tar.gz |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/joern/logfs
* git://git.kernel.org/pub/scm/linux/kernel/git/joern/logfs:
logfs: handle powerfail on NAND flash
logfs: handle errors from get_mtd_device()
logfs: remove unused variable
logfs: fix sync
logfs: fix compile failure
logfs: initialize li->li_refcount
logfs: commit reservations under space pressure
logfs: survive logfs_buf_recover read errors
logfs: Close i_ino reuse race
logfs: fix logfs_seek_hole()
logfs: Return -EINVAL if filesystem image doesn't match
LogFS: Fix typo in b6349ac8
logfs: testing the wrong variable
Diffstat (limited to 'fs/logfs/segment.c')
-rw-r--r-- | fs/logfs/segment.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/logfs/segment.c b/fs/logfs/segment.c index f77ce2b..a9657af 100644 --- a/fs/logfs/segment.c +++ b/fs/logfs/segment.c @@ -67,7 +67,7 @@ static struct page *get_mapping_page(struct super_block *sb, pgoff_t index, return page; } -void __logfs_buf_write(struct logfs_area *area, u64 ofs, void *buf, size_t len, +int __logfs_buf_write(struct logfs_area *area, u64 ofs, void *buf, size_t len, int use_filler) { pgoff_t index = ofs >> PAGE_SHIFT; @@ -81,8 +81,10 @@ void __logfs_buf_write(struct logfs_area *area, u64 ofs, void *buf, size_t len, copylen = min((ulong)len, PAGE_SIZE - offset); page = get_mapping_page(area->a_sb, index, use_filler); - SetPageUptodate(page); + if (IS_ERR(page)) + return PTR_ERR(page); BUG_ON(!page); /* FIXME: reserve a pool */ + SetPageUptodate(page); memcpy(page_address(page) + offset, buf, copylen); SetPagePrivate(page); page_cache_release(page); @@ -92,6 +94,7 @@ void __logfs_buf_write(struct logfs_area *area, u64 ofs, void *buf, size_t len, offset = 0; index++; } while (len); + return 0; } static void pad_partial_page(struct logfs_area *area) |