| .. | .. |
|---|
| 1031 | 1031 | if (page->index >= synced_i_size >> PAGE_SHIFT) { |
|---|
| 1032 | 1032 | err = inode->i_sb->s_op->write_inode(inode, NULL); |
|---|
| 1033 | 1033 | if (err) |
|---|
| 1034 | | - goto out_unlock; |
|---|
| 1034 | + goto out_redirty; |
|---|
| 1035 | 1035 | /* |
|---|
| 1036 | 1036 | * The inode has been written, but the write-buffer has |
|---|
| 1037 | 1037 | * not been synchronized, so in case of an unclean |
|---|
| .. | .. |
|---|
| 1059 | 1059 | if (i_size > synced_i_size) { |
|---|
| 1060 | 1060 | err = inode->i_sb->s_op->write_inode(inode, NULL); |
|---|
| 1061 | 1061 | if (err) |
|---|
| 1062 | | - goto out_unlock; |
|---|
| 1062 | + goto out_redirty; |
|---|
| 1063 | 1063 | } |
|---|
| 1064 | 1064 | |
|---|
| 1065 | 1065 | return do_writepage(page, len); |
|---|
| 1066 | | - |
|---|
| 1066 | +out_redirty: |
|---|
| 1067 | + /* |
|---|
| 1068 | + * redirty_page_for_writepage() won't call ubifs_dirty_inode() because |
|---|
| 1069 | + * it passes I_DIRTY_PAGES flag while calling __mark_inode_dirty(), so |
|---|
| 1070 | + * there is no need to do space budget for dirty inode. |
|---|
| 1071 | + */ |
|---|
| 1072 | + redirty_page_for_writepage(wbc, page); |
|---|
| 1067 | 1073 | out_unlock: |
|---|
| 1068 | 1074 | unlock_page(page); |
|---|
| 1069 | 1075 | return err; |
|---|