Commit 85cf0ac3 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2:
  nilfs2: fix whitespace coding style issues
  nilfs2: fix oops due to a bad aops initialization
  nilfs2: fix data loss in mmap page write for hole blocks
parents 50f35158 af71dda0
...@@ -72,10 +72,9 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) ...@@ -72,10 +72,9 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
/* /*
* check to see if the page is mapped already (no holes) * check to see if the page is mapped already (no holes)
*/ */
if (PageMappedToDisk(page)) { if (PageMappedToDisk(page))
unlock_page(page);
goto mapped; goto mapped;
}
if (page_has_buffers(page)) { if (page_has_buffers(page)) {
struct buffer_head *bh, *head; struct buffer_head *bh, *head;
int fully_mapped = 1; int fully_mapped = 1;
...@@ -90,7 +89,6 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) ...@@ -90,7 +89,6 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
if (fully_mapped) { if (fully_mapped) {
SetPageMappedToDisk(page); SetPageMappedToDisk(page);
unlock_page(page);
goto mapped; goto mapped;
} }
} }
...@@ -105,16 +103,17 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) ...@@ -105,16 +103,17 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
return VM_FAULT_SIGBUS; return VM_FAULT_SIGBUS;
ret = block_page_mkwrite(vma, vmf, nilfs_get_block); ret = block_page_mkwrite(vma, vmf, nilfs_get_block);
if (unlikely(ret)) { if (ret != VM_FAULT_LOCKED) {
nilfs_transaction_abort(inode->i_sb); nilfs_transaction_abort(inode->i_sb);
return ret; return ret;
} }
nilfs_set_file_dirty(inode, 1 << (PAGE_SHIFT - inode->i_blkbits));
nilfs_transaction_commit(inode->i_sb); nilfs_transaction_commit(inode->i_sb);
mapped: mapped:
SetPageChecked(page); SetPageChecked(page);
wait_on_page_writeback(page); wait_on_page_writeback(page);
return 0; return VM_FAULT_LOCKED;
} }
static const struct vm_operations_struct nilfs_file_vm_ops = { static const struct vm_operations_struct nilfs_file_vm_ops = {
......
...@@ -114,19 +114,19 @@ enum { ...@@ -114,19 +114,19 @@ enum {
* Macros to check inode numbers * Macros to check inode numbers
*/ */
#define NILFS_MDT_INO_BITS \ #define NILFS_MDT_INO_BITS \
((unsigned int)(1 << NILFS_DAT_INO | 1 << NILFS_CPFILE_INO | \ ((unsigned int)(1 << NILFS_DAT_INO | 1 << NILFS_CPFILE_INO | \
1 << NILFS_SUFILE_INO | 1 << NILFS_IFILE_INO | \ 1 << NILFS_SUFILE_INO | 1 << NILFS_IFILE_INO | \
1 << NILFS_ATIME_INO | 1 << NILFS_SKETCH_INO)) 1 << NILFS_ATIME_INO | 1 << NILFS_SKETCH_INO))
#define NILFS_SYS_INO_BITS \ #define NILFS_SYS_INO_BITS \
((unsigned int)(1 << NILFS_ROOT_INO) | NILFS_MDT_INO_BITS) ((unsigned int)(1 << NILFS_ROOT_INO) | NILFS_MDT_INO_BITS)
#define NILFS_FIRST_INO(sb) (((struct the_nilfs *)sb->s_fs_info)->ns_first_ino) #define NILFS_FIRST_INO(sb) (((struct the_nilfs *)sb->s_fs_info)->ns_first_ino)
#define NILFS_MDT_INODE(sb, ino) \ #define NILFS_MDT_INODE(sb, ino) \
((ino) < NILFS_FIRST_INO(sb) && (NILFS_MDT_INO_BITS & (1 << (ino)))) ((ino) < NILFS_FIRST_INO(sb) && (NILFS_MDT_INO_BITS & (1 << (ino))))
#define NILFS_VALID_INODE(sb, ino) \ #define NILFS_VALID_INODE(sb, ino) \
((ino) >= NILFS_FIRST_INO(sb) || (NILFS_SYS_INO_BITS & (1 << (ino)))) ((ino) >= NILFS_FIRST_INO(sb) || (NILFS_SYS_INO_BITS & (1 << (ino))))
/** /**
* struct nilfs_transaction_info: context information for synchronization * struct nilfs_transaction_info: context information for synchronization
...@@ -285,7 +285,7 @@ extern void nilfs_destroy_inode(struct inode *); ...@@ -285,7 +285,7 @@ extern void nilfs_destroy_inode(struct inode *);
extern void nilfs_error(struct super_block *, const char *, const char *, ...) extern void nilfs_error(struct super_block *, const char *, const char *, ...)
__attribute__ ((format (printf, 3, 4))); __attribute__ ((format (printf, 3, 4)));
extern void nilfs_warning(struct super_block *, const char *, const char *, ...) extern void nilfs_warning(struct super_block *, const char *, const char *, ...)
__attribute__ ((format (printf, 3, 4))); __attribute__ ((format (printf, 3, 4)));
extern struct nilfs_super_block * extern struct nilfs_super_block *
nilfs_read_super_block(struct super_block *, u64, int, struct buffer_head **); nilfs_read_super_block(struct super_block *, u64, int, struct buffer_head **);
extern int nilfs_store_magic_and_option(struct super_block *, extern int nilfs_store_magic_and_option(struct super_block *,
......
...@@ -495,12 +495,14 @@ unsigned nilfs_page_count_clean_buffers(struct page *page, ...@@ -495,12 +495,14 @@ unsigned nilfs_page_count_clean_buffers(struct page *page,
void nilfs_mapping_init(struct address_space *mapping, void nilfs_mapping_init(struct address_space *mapping,
struct backing_dev_info *bdi) struct backing_dev_info *bdi)
{ {
static const struct address_space_operations empty_aops;
mapping->host = NULL; mapping->host = NULL;
mapping->flags = 0; mapping->flags = 0;
mapping_set_gfp_mask(mapping, GFP_NOFS); mapping_set_gfp_mask(mapping, GFP_NOFS);
mapping->assoc_mapping = NULL; mapping->assoc_mapping = NULL;
mapping->backing_dev_info = bdi; mapping->backing_dev_info = bdi;
mapping->a_ops = NULL; mapping->a_ops = &empty_aops;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment