diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page-writeback.c | 7 | ||||
-rw-r--r-- | mm/shmem.c | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index dd73d29c15a8..bba82c414ba8 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
@@ -1149,6 +1149,13 @@ int redirty_page_for_writepage(struct writeback_control *wbc, struct page *page) | |||
1149 | EXPORT_SYMBOL(redirty_page_for_writepage); | 1149 | EXPORT_SYMBOL(redirty_page_for_writepage); |
1150 | 1150 | ||
1151 | /* | 1151 | /* |
1152 | * Dirty a page. | ||
1153 | * | ||
1154 | * For pages with a mapping this should be done under the page lock | ||
1155 | * for the benefit of asynchronous memory errors who prefer a consistent | ||
1156 | * dirty state. This rule can be broken in some special cases, | ||
1157 | * but should be better not to. | ||
1158 | * | ||
1152 | * If the mapping doesn't provide a set_page_dirty a_op, then | 1159 | * If the mapping doesn't provide a set_page_dirty a_op, then |
1153 | * just fall through and assume that it wants buffer_heads. | 1160 | * just fall through and assume that it wants buffer_heads. |
1154 | */ | 1161 | */ |
diff --git a/mm/shmem.c b/mm/shmem.c index 5a0b3d4055f3..46936601e37f 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -1630,8 +1630,8 @@ shmem_write_end(struct file *file, struct address_space *mapping, | |||
1630 | if (pos + copied > inode->i_size) | 1630 | if (pos + copied > inode->i_size) |
1631 | i_size_write(inode, pos + copied); | 1631 | i_size_write(inode, pos + copied); |
1632 | 1632 | ||
1633 | unlock_page(page); | ||
1634 | set_page_dirty(page); | 1633 | set_page_dirty(page); |
1634 | unlock_page(page); | ||
1635 | page_cache_release(page); | 1635 | page_cache_release(page); |
1636 | 1636 | ||
1637 | return copied; | 1637 | return copied; |
@@ -1968,13 +1968,13 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s | |||
1968 | iput(inode); | 1968 | iput(inode); |
1969 | return error; | 1969 | return error; |
1970 | } | 1970 | } |
1971 | unlock_page(page); | ||
1972 | inode->i_mapping->a_ops = &shmem_aops; | 1971 | inode->i_mapping->a_ops = &shmem_aops; |
1973 | inode->i_op = &shmem_symlink_inode_operations; | 1972 | inode->i_op = &shmem_symlink_inode_operations; |
1974 | kaddr = kmap_atomic(page, KM_USER0); | 1973 | kaddr = kmap_atomic(page, KM_USER0); |
1975 | memcpy(kaddr, symname, len); | 1974 | memcpy(kaddr, symname, len); |
1976 | kunmap_atomic(kaddr, KM_USER0); | 1975 | kunmap_atomic(kaddr, KM_USER0); |
1977 | set_page_dirty(page); | 1976 | set_page_dirty(page); |
1977 | unlock_page(page); | ||
1978 | page_cache_release(page); | 1978 | page_cache_release(page); |
1979 | } | 1979 | } |
1980 | if (dir->i_mode & S_ISGID) | 1980 | if (dir->i_mode & S_ISGID) |