diff options
Diffstat (limited to 'fs')
37 files changed, 92 insertions, 115 deletions
diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 5594505e6e73..b40133796b87 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c | |||
@@ -831,7 +831,6 @@ static const struct vm_operations_struct v9fs_file_vm_ops = { | |||
831 | .fault = filemap_fault, | 831 | .fault = filemap_fault, |
832 | .map_pages = filemap_map_pages, | 832 | .map_pages = filemap_map_pages, |
833 | .page_mkwrite = v9fs_vm_page_mkwrite, | 833 | .page_mkwrite = v9fs_vm_page_mkwrite, |
834 | .remap_pages = generic_file_remap_pages, | ||
835 | }; | 834 | }; |
836 | 835 | ||
837 | static const struct vm_operations_struct v9fs_mmap_file_vm_ops = { | 836 | static const struct vm_operations_struct v9fs_mmap_file_vm_ops = { |
@@ -839,7 +838,6 @@ static const struct vm_operations_struct v9fs_mmap_file_vm_ops = { | |||
839 | .fault = filemap_fault, | 838 | .fault = filemap_fault, |
840 | .map_pages = filemap_map_pages, | 839 | .map_pages = filemap_map_pages, |
841 | .page_mkwrite = v9fs_vm_page_mkwrite, | 840 | .page_mkwrite = v9fs_vm_page_mkwrite, |
842 | .remap_pages = generic_file_remap_pages, | ||
843 | }; | 841 | }; |
844 | 842 | ||
845 | 843 | ||
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index e4090259569b..a606ab551296 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -2081,7 +2081,6 @@ static const struct vm_operations_struct btrfs_file_vm_ops = { | |||
2081 | .fault = filemap_fault, | 2081 | .fault = filemap_fault, |
2082 | .map_pages = filemap_map_pages, | 2082 | .map_pages = filemap_map_pages, |
2083 | .page_mkwrite = btrfs_page_mkwrite, | 2083 | .page_mkwrite = btrfs_page_mkwrite, |
2084 | .remap_pages = generic_file_remap_pages, | ||
2085 | }; | 2084 | }; |
2086 | 2085 | ||
2087 | static int btrfs_file_mmap(struct file *filp, struct vm_area_struct *vma) | 2086 | static int btrfs_file_mmap(struct file *filp, struct vm_area_struct *vma) |
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index c81c0e004588..24be059fd1f8 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c | |||
@@ -1569,7 +1569,6 @@ out: | |||
1569 | static struct vm_operations_struct ceph_vmops = { | 1569 | static struct vm_operations_struct ceph_vmops = { |
1570 | .fault = ceph_filemap_fault, | 1570 | .fault = ceph_filemap_fault, |
1571 | .page_mkwrite = ceph_page_mkwrite, | 1571 | .page_mkwrite = ceph_page_mkwrite, |
1572 | .remap_pages = generic_file_remap_pages, | ||
1573 | }; | 1572 | }; |
1574 | 1573 | ||
1575 | int ceph_mmap(struct file *file, struct vm_area_struct *vma) | 1574 | int ceph_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index c1a86764bbf7..8fe1f7a21b3e 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c | |||
@@ -3236,7 +3236,6 @@ static struct vm_operations_struct cifs_file_vm_ops = { | |||
3236 | .fault = filemap_fault, | 3236 | .fault = filemap_fault, |
3237 | .map_pages = filemap_map_pages, | 3237 | .map_pages = filemap_map_pages, |
3238 | .page_mkwrite = cifs_page_mkwrite, | 3238 | .page_mkwrite = cifs_page_mkwrite, |
3239 | .remap_pages = generic_file_remap_pages, | ||
3240 | }; | 3239 | }; |
3241 | 3240 | ||
3242 | int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma) | 3241 | int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 8131be8c0af3..7cb592386121 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -195,7 +195,6 @@ static const struct vm_operations_struct ext4_file_vm_ops = { | |||
195 | .fault = filemap_fault, | 195 | .fault = filemap_fault, |
196 | .map_pages = filemap_map_pages, | 196 | .map_pages = filemap_map_pages, |
197 | .page_mkwrite = ext4_page_mkwrite, | 197 | .page_mkwrite = ext4_page_mkwrite, |
198 | .remap_pages = generic_file_remap_pages, | ||
199 | }; | 198 | }; |
200 | 199 | ||
201 | static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma) | 200 | static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 3c27e0ecb3bc..5674ba13102b 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c | |||
@@ -92,7 +92,6 @@ static const struct vm_operations_struct f2fs_file_vm_ops = { | |||
92 | .fault = filemap_fault, | 92 | .fault = filemap_fault, |
93 | .map_pages = filemap_map_pages, | 93 | .map_pages = filemap_map_pages, |
94 | .page_mkwrite = f2fs_vm_page_mkwrite, | 94 | .page_mkwrite = f2fs_vm_page_mkwrite, |
95 | .remap_pages = generic_file_remap_pages, | ||
96 | }; | 95 | }; |
97 | 96 | ||
98 | static int get_parent_ino(struct inode *inode, nid_t *pino) | 97 | static int get_parent_ino(struct inode *inode, nid_t *pino) |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 760b2c552197..d769e594855b 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -2062,7 +2062,6 @@ static const struct vm_operations_struct fuse_file_vm_ops = { | |||
2062 | .fault = filemap_fault, | 2062 | .fault = filemap_fault, |
2063 | .map_pages = filemap_map_pages, | 2063 | .map_pages = filemap_map_pages, |
2064 | .page_mkwrite = fuse_page_mkwrite, | 2064 | .page_mkwrite = fuse_page_mkwrite, |
2065 | .remap_pages = generic_file_remap_pages, | ||
2066 | }; | 2065 | }; |
2067 | 2066 | ||
2068 | static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma) | 2067 | static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 6e600abf694a..ec9c2d33477a 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c | |||
@@ -498,7 +498,6 @@ static const struct vm_operations_struct gfs2_vm_ops = { | |||
498 | .fault = filemap_fault, | 498 | .fault = filemap_fault, |
499 | .map_pages = filemap_map_pages, | 499 | .map_pages = filemap_map_pages, |
500 | .page_mkwrite = gfs2_page_mkwrite, | 500 | .page_mkwrite = gfs2_page_mkwrite, |
501 | .remap_pages = generic_file_remap_pages, | ||
502 | }; | 501 | }; |
503 | 502 | ||
504 | /** | 503 | /** |
diff --git a/fs/inode.c b/fs/inode.c index f30872ade6d7..3a53b1da3fb8 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -356,7 +356,6 @@ void address_space_init_once(struct address_space *mapping) | |||
356 | INIT_LIST_HEAD(&mapping->private_list); | 356 | INIT_LIST_HEAD(&mapping->private_list); |
357 | spin_lock_init(&mapping->private_lock); | 357 | spin_lock_init(&mapping->private_lock); |
358 | mapping->i_mmap = RB_ROOT; | 358 | mapping->i_mmap = RB_ROOT; |
359 | INIT_LIST_HEAD(&mapping->i_mmap_nonlinear); | ||
360 | } | 359 | } |
361 | EXPORT_SYMBOL(address_space_init_once); | 360 | EXPORT_SYMBOL(address_space_init_once); |
362 | 361 | ||
diff --git a/fs/ioctl.c b/fs/ioctl.c index 214c3c11fbc2..5d01d2638ca5 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c | |||
@@ -379,6 +379,11 @@ int __generic_block_fiemap(struct inode *inode, | |||
379 | past_eof = true; | 379 | past_eof = true; |
380 | } | 380 | } |
381 | cond_resched(); | 381 | cond_resched(); |
382 | if (fatal_signal_pending(current)) { | ||
383 | ret = -EINTR; | ||
384 | break; | ||
385 | } | ||
386 | |||
382 | } while (1); | 387 | } while (1); |
383 | 388 | ||
384 | /* If ret is 1 then we just hit the end of the extent array */ | 389 | /* If ret is 1 then we just hit the end of the extent array */ |
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 2ab6f00dba5b..94712fc781fa 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
@@ -646,7 +646,6 @@ static const struct vm_operations_struct nfs_file_vm_ops = { | |||
646 | .fault = filemap_fault, | 646 | .fault = filemap_fault, |
647 | .map_pages = filemap_map_pages, | 647 | .map_pages = filemap_map_pages, |
648 | .page_mkwrite = nfs_vm_page_mkwrite, | 648 | .page_mkwrite = nfs_vm_page_mkwrite, |
649 | .remap_pages = generic_file_remap_pages, | ||
650 | }; | 649 | }; |
651 | 650 | ||
652 | static int nfs_need_sync_write(struct file *filp, struct inode *inode) | 651 | static int nfs_need_sync_write(struct file *filp, struct inode *inode) |
diff --git a/fs/nilfs2/file.c b/fs/nilfs2/file.c index 3a03e0aea1fb..a8c728acb7a8 100644 --- a/fs/nilfs2/file.c +++ b/fs/nilfs2/file.c | |||
@@ -128,7 +128,6 @@ static const struct vm_operations_struct nilfs_file_vm_ops = { | |||
128 | .fault = filemap_fault, | 128 | .fault = filemap_fault, |
129 | .map_pages = filemap_map_pages, | 129 | .map_pages = filemap_map_pages, |
130 | .page_mkwrite = nilfs_page_mkwrite, | 130 | .page_mkwrite = nilfs_page_mkwrite, |
131 | .remap_pages = generic_file_remap_pages, | ||
132 | }; | 131 | }; |
133 | 132 | ||
134 | static int nilfs_file_mmap(struct file *file, struct vm_area_struct *vma) | 133 | static int nilfs_file_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 30d3addfad75..51ceb8107284 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c | |||
@@ -140,7 +140,7 @@ static bool fanotify_should_send_event(struct fsnotify_mark *inode_mark, | |||
140 | } | 140 | } |
141 | 141 | ||
142 | if (S_ISDIR(path->dentry->d_inode->i_mode) && | 142 | if (S_ISDIR(path->dentry->d_inode->i_mode) && |
143 | (marks_ignored_mask & FS_ISDIR)) | 143 | !(marks_mask & FS_ISDIR & ~marks_ignored_mask)) |
144 | return false; | 144 | return false; |
145 | 145 | ||
146 | if (event_mask & marks_mask & ~marks_ignored_mask) | 146 | if (event_mask & marks_mask & ~marks_ignored_mask) |
diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index bff8567aa42d..cf275500a665 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c | |||
@@ -487,20 +487,27 @@ static __u32 fanotify_mark_remove_from_mask(struct fsnotify_mark *fsn_mark, | |||
487 | unsigned int flags, | 487 | unsigned int flags, |
488 | int *destroy) | 488 | int *destroy) |
489 | { | 489 | { |
490 | __u32 oldmask; | 490 | __u32 oldmask = 0; |
491 | 491 | ||
492 | spin_lock(&fsn_mark->lock); | 492 | spin_lock(&fsn_mark->lock); |
493 | if (!(flags & FAN_MARK_IGNORED_MASK)) { | 493 | if (!(flags & FAN_MARK_IGNORED_MASK)) { |
494 | __u32 tmask = fsn_mark->mask & ~mask; | ||
495 | |||
496 | if (flags & FAN_MARK_ONDIR) | ||
497 | tmask &= ~FAN_ONDIR; | ||
498 | |||
494 | oldmask = fsn_mark->mask; | 499 | oldmask = fsn_mark->mask; |
495 | fsnotify_set_mark_mask_locked(fsn_mark, (oldmask & ~mask)); | 500 | fsnotify_set_mark_mask_locked(fsn_mark, tmask); |
496 | } else { | 501 | } else { |
497 | oldmask = fsn_mark->ignored_mask; | 502 | __u32 tmask = fsn_mark->ignored_mask & ~mask; |
498 | fsnotify_set_mark_ignored_mask_locked(fsn_mark, (oldmask & ~mask)); | 503 | if (flags & FAN_MARK_ONDIR) |
504 | tmask &= ~FAN_ONDIR; | ||
505 | |||
506 | fsnotify_set_mark_ignored_mask_locked(fsn_mark, tmask); | ||
499 | } | 507 | } |
508 | *destroy = !(fsn_mark->mask | fsn_mark->ignored_mask); | ||
500 | spin_unlock(&fsn_mark->lock); | 509 | spin_unlock(&fsn_mark->lock); |
501 | 510 | ||
502 | *destroy = !(oldmask & ~mask); | ||
503 | |||
504 | return mask & oldmask; | 511 | return mask & oldmask; |
505 | } | 512 | } |
506 | 513 | ||
@@ -569,20 +576,22 @@ static __u32 fanotify_mark_add_to_mask(struct fsnotify_mark *fsn_mark, | |||
569 | 576 | ||
570 | spin_lock(&fsn_mark->lock); | 577 | spin_lock(&fsn_mark->lock); |
571 | if (!(flags & FAN_MARK_IGNORED_MASK)) { | 578 | if (!(flags & FAN_MARK_IGNORED_MASK)) { |
579 | __u32 tmask = fsn_mark->mask | mask; | ||
580 | |||
581 | if (flags & FAN_MARK_ONDIR) | ||
582 | tmask |= FAN_ONDIR; | ||
583 | |||
572 | oldmask = fsn_mark->mask; | 584 | oldmask = fsn_mark->mask; |
573 | fsnotify_set_mark_mask_locked(fsn_mark, (oldmask | mask)); | 585 | fsnotify_set_mark_mask_locked(fsn_mark, tmask); |
574 | } else { | 586 | } else { |
575 | __u32 tmask = fsn_mark->ignored_mask | mask; | 587 | __u32 tmask = fsn_mark->ignored_mask | mask; |
588 | if (flags & FAN_MARK_ONDIR) | ||
589 | tmask |= FAN_ONDIR; | ||
590 | |||
576 | fsnotify_set_mark_ignored_mask_locked(fsn_mark, tmask); | 591 | fsnotify_set_mark_ignored_mask_locked(fsn_mark, tmask); |
577 | if (flags & FAN_MARK_IGNORED_SURV_MODIFY) | 592 | if (flags & FAN_MARK_IGNORED_SURV_MODIFY) |
578 | fsn_mark->flags |= FSNOTIFY_MARK_FLAG_IGNORED_SURV_MODIFY; | 593 | fsn_mark->flags |= FSNOTIFY_MARK_FLAG_IGNORED_SURV_MODIFY; |
579 | } | 594 | } |
580 | |||
581 | if (!(flags & FAN_MARK_ONDIR)) { | ||
582 | __u32 tmask = fsn_mark->ignored_mask | FAN_ONDIR; | ||
583 | fsnotify_set_mark_ignored_mask_locked(fsn_mark, tmask); | ||
584 | } | ||
585 | |||
586 | spin_unlock(&fsn_mark->lock); | 595 | spin_unlock(&fsn_mark->lock); |
587 | 596 | ||
588 | return mask & ~oldmask; | 597 | return mask & ~oldmask; |
diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c index 7e8282dcea2a..c58a1bcfda0f 100644 --- a/fs/ocfs2/acl.c +++ b/fs/ocfs2/acl.c | |||
@@ -245,16 +245,14 @@ int ocfs2_set_acl(handle_t *handle, | |||
245 | ret = posix_acl_equiv_mode(acl, &mode); | 245 | ret = posix_acl_equiv_mode(acl, &mode); |
246 | if (ret < 0) | 246 | if (ret < 0) |
247 | return ret; | 247 | return ret; |
248 | else { | ||
249 | if (ret == 0) | ||
250 | acl = NULL; | ||
251 | 248 | ||
252 | ret = ocfs2_acl_set_mode(inode, di_bh, | 249 | if (ret == 0) |
253 | handle, mode); | 250 | acl = NULL; |
254 | if (ret) | ||
255 | return ret; | ||
256 | 251 | ||
257 | } | 252 | ret = ocfs2_acl_set_mode(inode, di_bh, |
253 | handle, mode); | ||
254 | if (ret) | ||
255 | return ret; | ||
258 | } | 256 | } |
259 | break; | 257 | break; |
260 | case ACL_TYPE_DEFAULT: | 258 | case ACL_TYPE_DEFAULT: |
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index fcae9ef1a328..044158bd22be 100644 --- a/fs/ocfs2/alloc.c +++ b/fs/ocfs2/alloc.c | |||
@@ -6873,7 +6873,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | |||
6873 | if (IS_ERR(handle)) { | 6873 | if (IS_ERR(handle)) { |
6874 | ret = PTR_ERR(handle); | 6874 | ret = PTR_ERR(handle); |
6875 | mlog_errno(ret); | 6875 | mlog_errno(ret); |
6876 | goto out_unlock; | 6876 | goto out; |
6877 | } | 6877 | } |
6878 | 6878 | ||
6879 | ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, | 6879 | ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, |
@@ -6931,7 +6931,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | |||
6931 | if (ret) { | 6931 | if (ret) { |
6932 | mlog_errno(ret); | 6932 | mlog_errno(ret); |
6933 | need_free = 1; | 6933 | need_free = 1; |
6934 | goto out_commit; | 6934 | goto out_unlock; |
6935 | } | 6935 | } |
6936 | 6936 | ||
6937 | page_end = PAGE_CACHE_SIZE; | 6937 | page_end = PAGE_CACHE_SIZE; |
@@ -6964,12 +6964,16 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | |||
6964 | if (ret) { | 6964 | if (ret) { |
6965 | mlog_errno(ret); | 6965 | mlog_errno(ret); |
6966 | need_free = 1; | 6966 | need_free = 1; |
6967 | goto out_commit; | 6967 | goto out_unlock; |
6968 | } | 6968 | } |
6969 | 6969 | ||
6970 | inode->i_blocks = ocfs2_inode_sector_count(inode); | 6970 | inode->i_blocks = ocfs2_inode_sector_count(inode); |
6971 | } | 6971 | } |
6972 | 6972 | ||
6973 | out_unlock: | ||
6974 | if (pages) | ||
6975 | ocfs2_unlock_and_free_pages(pages, num_pages); | ||
6976 | |||
6973 | out_commit: | 6977 | out_commit: |
6974 | if (ret < 0 && did_quota) | 6978 | if (ret < 0 && did_quota) |
6975 | dquot_free_space_nodirty(inode, | 6979 | dquot_free_space_nodirty(inode, |
@@ -6989,15 +6993,11 @@ out_commit: | |||
6989 | 6993 | ||
6990 | ocfs2_commit_trans(osb, handle); | 6994 | ocfs2_commit_trans(osb, handle); |
6991 | 6995 | ||
6992 | out_unlock: | 6996 | out: |
6993 | if (data_ac) | 6997 | if (data_ac) |
6994 | ocfs2_free_alloc_context(data_ac); | 6998 | ocfs2_free_alloc_context(data_ac); |
6995 | 6999 | if (pages) | |
6996 | out: | ||
6997 | if (pages) { | ||
6998 | ocfs2_unlock_and_free_pages(pages, num_pages); | ||
6999 | kfree(pages); | 7000 | kfree(pages); |
7000 | } | ||
7001 | 7001 | ||
7002 | return ret; | 7002 | return ret; |
7003 | } | 7003 | } |
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index 2e355e0f8335..56c403a563bc 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c | |||
@@ -1016,7 +1016,8 @@ void o2net_fill_node_map(unsigned long *map, unsigned bytes) | |||
1016 | 1016 | ||
1017 | memset(map, 0, bytes); | 1017 | memset(map, 0, bytes); |
1018 | for (node = 0; node < O2NM_MAX_NODES; ++node) { | 1018 | for (node = 0; node < O2NM_MAX_NODES; ++node) { |
1019 | o2net_tx_can_proceed(o2net_nn_from_num(node), &sc, &ret); | 1019 | if (!o2net_tx_can_proceed(o2net_nn_from_num(node), &sc, &ret)) |
1020 | continue; | ||
1020 | if (!ret) { | 1021 | if (!ret) { |
1021 | set_bit(node, map); | 1022 | set_bit(node, map); |
1022 | sc_put(sc); | 1023 | sc_put(sc); |
diff --git a/fs/ocfs2/cluster/tcp_internal.h b/fs/ocfs2/cluster/tcp_internal.h index dc024367110a..b95e7df5b76a 100644 --- a/fs/ocfs2/cluster/tcp_internal.h +++ b/fs/ocfs2/cluster/tcp_internal.h | |||
@@ -107,12 +107,12 @@ struct o2net_node { | |||
107 | struct list_head nn_status_list; | 107 | struct list_head nn_status_list; |
108 | 108 | ||
109 | /* connects are attempted from when heartbeat comes up until either hb | 109 | /* connects are attempted from when heartbeat comes up until either hb |
110 | * goes down, the node is unconfigured, no connect attempts succeed | 110 | * goes down, the node is unconfigured, or a connect succeeds. |
111 | * before O2NET_CONN_IDLE_DELAY, or a connect succeeds. connect_work | 111 | * connect_work is queued from set_nn_state both from hb up and from |
112 | * is queued from set_nn_state both from hb up and from itself if a | 112 | * itself if a connect attempt fails and so can be self-arming. |
113 | * connect attempt fails and so can be self-arming. shutdown is | 113 | * shutdown is careful to first mark the nn such that no connects will |
114 | * careful to first mark the nn such that no connects will be attempted | 114 | * be attempted before canceling delayed connect work and flushing the |
115 | * before canceling delayed connect work and flushing the queue. */ | 115 | * queue. */ |
116 | struct delayed_work nn_connect_work; | 116 | struct delayed_work nn_connect_work; |
117 | unsigned long nn_last_connect_attempt; | 117 | unsigned long nn_last_connect_attempt; |
118 | 118 | ||
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c index 319e786175af..b08050bd3f2e 100644 --- a/fs/ocfs2/dir.c +++ b/fs/ocfs2/dir.c | |||
@@ -3456,10 +3456,8 @@ static int ocfs2_find_dir_space_el(struct inode *dir, const char *name, | |||
3456 | int blocksize = dir->i_sb->s_blocksize; | 3456 | int blocksize = dir->i_sb->s_blocksize; |
3457 | 3457 | ||
3458 | status = ocfs2_read_dir_block(dir, 0, &bh, 0); | 3458 | status = ocfs2_read_dir_block(dir, 0, &bh, 0); |
3459 | if (status) { | 3459 | if (status) |
3460 | mlog_errno(status); | ||
3461 | goto bail; | 3460 | goto bail; |
3462 | } | ||
3463 | 3461 | ||
3464 | rec_len = OCFS2_DIR_REC_LEN(namelen); | 3462 | rec_len = OCFS2_DIR_REC_LEN(namelen); |
3465 | offset = 0; | 3463 | offset = 0; |
@@ -3480,10 +3478,9 @@ static int ocfs2_find_dir_space_el(struct inode *dir, const char *name, | |||
3480 | status = ocfs2_read_dir_block(dir, | 3478 | status = ocfs2_read_dir_block(dir, |
3481 | offset >> sb->s_blocksize_bits, | 3479 | offset >> sb->s_blocksize_bits, |
3482 | &bh, 0); | 3480 | &bh, 0); |
3483 | if (status) { | 3481 | if (status) |
3484 | mlog_errno(status); | ||
3485 | goto bail; | 3482 | goto bail; |
3486 | } | 3483 | |
3487 | /* move to next block */ | 3484 | /* move to next block */ |
3488 | de = (struct ocfs2_dir_entry *) bh->b_data; | 3485 | de = (struct ocfs2_dir_entry *) bh->b_data; |
3489 | } | 3486 | } |
@@ -3513,7 +3510,6 @@ next: | |||
3513 | de = (struct ocfs2_dir_entry *)((char *) de + le16_to_cpu(de->rec_len)); | 3510 | de = (struct ocfs2_dir_entry *)((char *) de + le16_to_cpu(de->rec_len)); |
3514 | } | 3511 | } |
3515 | 3512 | ||
3516 | status = 0; | ||
3517 | bail: | 3513 | bail: |
3518 | brelse(bh); | 3514 | brelse(bh); |
3519 | if (status) | 3515 | if (status) |
diff --git a/fs/ocfs2/dlm/dlmast.c b/fs/ocfs2/dlm/dlmast.c index b46278f9ae44..fd6bbbbd7d78 100644 --- a/fs/ocfs2/dlm/dlmast.c +++ b/fs/ocfs2/dlm/dlmast.c | |||
@@ -385,8 +385,12 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
385 | head = &res->granted; | 385 | head = &res->granted; |
386 | 386 | ||
387 | list_for_each_entry(lock, head, list) { | 387 | list_for_each_entry(lock, head, list) { |
388 | if (lock->ml.cookie == cookie) | 388 | /* if lock is found but unlock is pending ignore the bast */ |
389 | if (lock->ml.cookie == cookie) { | ||
390 | if (lock->unlock_pending) | ||
391 | break; | ||
389 | goto do_ast; | 392 | goto do_ast; |
393 | } | ||
390 | } | 394 | } |
391 | 395 | ||
392 | mlog(0, "Got %sast for unknown lock! cookie=%u:%llu, name=%.*s, " | 396 | mlog(0, "Got %sast for unknown lock! cookie=%u:%llu, name=%.*s, " |
diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c index 149eb556b8c6..825136070d2c 100644 --- a/fs/ocfs2/dlm/dlmdebug.c +++ b/fs/ocfs2/dlm/dlmdebug.c | |||
@@ -406,7 +406,7 @@ static int debug_purgelist_print(struct dlm_ctxt *dlm, char *buf, int len) | |||
406 | } | 406 | } |
407 | spin_unlock(&dlm->spinlock); | 407 | spin_unlock(&dlm->spinlock); |
408 | 408 | ||
409 | out += snprintf(buf + out, len - out, "Total on list: %ld\n", total); | 409 | out += snprintf(buf + out, len - out, "Total on list: %lu\n", total); |
410 | 410 | ||
411 | return out; | 411 | return out; |
412 | } | 412 | } |
@@ -464,7 +464,7 @@ static int debug_mle_print(struct dlm_ctxt *dlm, char *buf, int len) | |||
464 | spin_unlock(&dlm->master_lock); | 464 | spin_unlock(&dlm->master_lock); |
465 | 465 | ||
466 | out += snprintf(buf + out, len - out, | 466 | out += snprintf(buf + out, len - out, |
467 | "Total: %ld, Longest: %ld\n", total, longest); | 467 | "Total: %lu, Longest: %lu\n", total, longest); |
468 | return out; | 468 | return out; |
469 | } | 469 | } |
470 | 470 | ||
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c index 50a59d2337b2..7df88a6dd626 100644 --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c | |||
@@ -674,20 +674,6 @@ static void dlm_leave_domain(struct dlm_ctxt *dlm) | |||
674 | spin_unlock(&dlm->spinlock); | 674 | spin_unlock(&dlm->spinlock); |
675 | } | 675 | } |
676 | 676 | ||
677 | int dlm_joined(struct dlm_ctxt *dlm) | ||
678 | { | ||
679 | int ret = 0; | ||
680 | |||
681 | spin_lock(&dlm_domain_lock); | ||
682 | |||
683 | if (dlm->dlm_state == DLM_CTXT_JOINED) | ||
684 | ret = 1; | ||
685 | |||
686 | spin_unlock(&dlm_domain_lock); | ||
687 | |||
688 | return ret; | ||
689 | } | ||
690 | |||
691 | int dlm_shutting_down(struct dlm_ctxt *dlm) | 677 | int dlm_shutting_down(struct dlm_ctxt *dlm) |
692 | { | 678 | { |
693 | int ret = 0; | 679 | int ret = 0; |
diff --git a/fs/ocfs2/dlm/dlmdomain.h b/fs/ocfs2/dlm/dlmdomain.h index 2f7f60bfeb3b..fd6122a38dbd 100644 --- a/fs/ocfs2/dlm/dlmdomain.h +++ b/fs/ocfs2/dlm/dlmdomain.h | |||
@@ -28,7 +28,6 @@ | |||
28 | extern spinlock_t dlm_domain_lock; | 28 | extern spinlock_t dlm_domain_lock; |
29 | extern struct list_head dlm_domains; | 29 | extern struct list_head dlm_domains; |
30 | 30 | ||
31 | int dlm_joined(struct dlm_ctxt *dlm); | ||
32 | int dlm_shutting_down(struct dlm_ctxt *dlm); | 31 | int dlm_shutting_down(struct dlm_ctxt *dlm); |
33 | void dlm_fire_domain_eviction_callbacks(struct dlm_ctxt *dlm, | 32 | void dlm_fire_domain_eviction_callbacks(struct dlm_ctxt *dlm, |
34 | int node_num); | 33 | int node_num); |
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index cecd875653e4..ce12e0b1a31f 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c | |||
@@ -1070,6 +1070,9 @@ static void dlm_move_reco_locks_to_list(struct dlm_ctxt *dlm, | |||
1070 | dead_node, dlm->name); | 1070 | dead_node, dlm->name); |
1071 | list_del_init(&lock->list); | 1071 | list_del_init(&lock->list); |
1072 | dlm_lock_put(lock); | 1072 | dlm_lock_put(lock); |
1073 | /* Can't schedule DLM_UNLOCK_FREE_LOCK | ||
1074 | * - do manually */ | ||
1075 | dlm_lock_put(lock); | ||
1073 | break; | 1076 | break; |
1074 | } | 1077 | } |
1075 | } | 1078 | } |
@@ -2346,6 +2349,10 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node) | |||
2346 | dead_node, dlm->name); | 2349 | dead_node, dlm->name); |
2347 | list_del_init(&lock->list); | 2350 | list_del_init(&lock->list); |
2348 | dlm_lock_put(lock); | 2351 | dlm_lock_put(lock); |
2352 | /* Can't schedule | ||
2353 | * DLM_UNLOCK_FREE_LOCK | ||
2354 | * - do manually */ | ||
2355 | dlm_lock_put(lock); | ||
2349 | break; | 2356 | break; |
2350 | } | 2357 | } |
2351 | } | 2358 | } |
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index 1c423af04c69..11849a44dc5a 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c | |||
@@ -3750,6 +3750,9 @@ static int ocfs2_dentry_convert_worker(struct ocfs2_lock_res *lockres, | |||
3750 | break; | 3750 | break; |
3751 | spin_unlock(&dentry_attach_lock); | 3751 | spin_unlock(&dentry_attach_lock); |
3752 | 3752 | ||
3753 | if (S_ISDIR(dl->dl_inode->i_mode)) | ||
3754 | shrink_dcache_parent(dentry); | ||
3755 | |||
3753 | mlog(0, "d_delete(%pd);\n", dentry); | 3756 | mlog(0, "d_delete(%pd);\n", dentry); |
3754 | 3757 | ||
3755 | /* | 3758 | /* |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 3950693dd0f6..245db4f504da 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -569,7 +569,7 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, | |||
569 | handle_t *handle = NULL; | 569 | handle_t *handle = NULL; |
570 | struct ocfs2_alloc_context *data_ac = NULL; | 570 | struct ocfs2_alloc_context *data_ac = NULL; |
571 | struct ocfs2_alloc_context *meta_ac = NULL; | 571 | struct ocfs2_alloc_context *meta_ac = NULL; |
572 | enum ocfs2_alloc_restarted why; | 572 | enum ocfs2_alloc_restarted why = RESTART_NONE; |
573 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); | 573 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); |
574 | struct ocfs2_extent_tree et; | 574 | struct ocfs2_extent_tree et; |
575 | int did_quota = 0; | 575 | int did_quota = 0; |
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c index 4f502382180f..d10860fde165 100644 --- a/fs/ocfs2/journal.c +++ b/fs/ocfs2/journal.c | |||
@@ -1447,7 +1447,6 @@ bail: | |||
1447 | * requires that we call do_exit(). And it isn't exported, but | 1447 | * requires that we call do_exit(). And it isn't exported, but |
1448 | * complete_and_exit() seems to be a minimal wrapper around it. */ | 1448 | * complete_and_exit() seems to be a minimal wrapper around it. */ |
1449 | complete_and_exit(NULL, status); | 1449 | complete_and_exit(NULL, status); |
1450 | return status; | ||
1451 | } | 1450 | } |
1452 | 1451 | ||
1453 | void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num) | 1452 | void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num) |
diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c index 10d66c75cecb..9581d190f6e1 100644 --- a/fs/ocfs2/mmap.c +++ b/fs/ocfs2/mmap.c | |||
@@ -173,7 +173,6 @@ out: | |||
173 | static const struct vm_operations_struct ocfs2_file_vm_ops = { | 173 | static const struct vm_operations_struct ocfs2_file_vm_ops = { |
174 | .fault = ocfs2_fault, | 174 | .fault = ocfs2_fault, |
175 | .page_mkwrite = ocfs2_page_mkwrite, | 175 | .page_mkwrite = ocfs2_page_mkwrite, |
176 | .remap_pages = generic_file_remap_pages, | ||
177 | }; | 176 | }; |
178 | 177 | ||
179 | int ocfs2_mmap(struct file *file, struct vm_area_struct *vma) | 178 | int ocfs2_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 7d6b7d090452..fdbcbfed529e 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
@@ -279,6 +279,8 @@ enum ocfs2_mount_options | |||
279 | writes */ | 279 | writes */ |
280 | OCFS2_MOUNT_HB_NONE = 1 << 13, /* No heartbeat */ | 280 | OCFS2_MOUNT_HB_NONE = 1 << 13, /* No heartbeat */ |
281 | OCFS2_MOUNT_HB_GLOBAL = 1 << 14, /* Global heartbeat */ | 281 | OCFS2_MOUNT_HB_GLOBAL = 1 << 14, /* Global heartbeat */ |
282 | |||
283 | OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT = 1 << 15, /* Journal Async Commit */ | ||
282 | }; | 284 | }; |
283 | 285 | ||
284 | #define OCFS2_OSB_SOFT_RO 0x0001 | 286 | #define OCFS2_OSB_SOFT_RO 0x0001 |
diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c index 89c0b2620814..3d0b63d34225 100644 --- a/fs/ocfs2/quota_local.c +++ b/fs/ocfs2/quota_local.c | |||
@@ -73,12 +73,6 @@ static loff_t ol_dqblk_off(struct super_block *sb, int c, int off) | |||
73 | ol_dqblk_block_off(sb, c, off); | 73 | ol_dqblk_block_off(sb, c, off); |
74 | } | 74 | } |
75 | 75 | ||
76 | /* Compute block number from given offset */ | ||
77 | static inline unsigned int ol_dqblk_file_block(struct super_block *sb, loff_t off) | ||
78 | { | ||
79 | return off >> sb->s_blocksize_bits; | ||
80 | } | ||
81 | |||
82 | static inline unsigned int ol_dqblk_block_offset(struct super_block *sb, loff_t off) | 76 | static inline unsigned int ol_dqblk_block_offset(struct super_block *sb, loff_t off) |
83 | { | 77 | { |
84 | return off & ((1 << sb->s_blocksize_bits) - 1); | 78 | return off & ((1 << sb->s_blocksize_bits) - 1); |
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index d81f6e2a97f5..ee541f92dab4 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c | |||
@@ -2428,8 +2428,6 @@ static int ocfs2_calc_refcount_meta_credits(struct super_block *sb, | |||
2428 | get_bh(prev_bh); | 2428 | get_bh(prev_bh); |
2429 | } | 2429 | } |
2430 | 2430 | ||
2431 | rb = (struct ocfs2_refcount_block *)ref_leaf_bh->b_data; | ||
2432 | |||
2433 | trace_ocfs2_calc_refcount_meta_credits_iterate( | 2431 | trace_ocfs2_calc_refcount_meta_credits_iterate( |
2434 | recs_add, (unsigned long long)cpos, clusters, | 2432 | recs_add, (unsigned long long)cpos, clusters, |
2435 | (unsigned long long)le64_to_cpu(rec.r_cpos), | 2433 | (unsigned long long)le64_to_cpu(rec.r_cpos), |
diff --git a/fs/ocfs2/reservations.c b/fs/ocfs2/reservations.c index 41ffd36c689c..6a348b0294ab 100644 --- a/fs/ocfs2/reservations.c +++ b/fs/ocfs2/reservations.c | |||
@@ -39,7 +39,7 @@ | |||
39 | #define OCFS2_CHECK_RESERVATIONS | 39 | #define OCFS2_CHECK_RESERVATIONS |
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | DEFINE_SPINLOCK(resv_lock); | 42 | static DEFINE_SPINLOCK(resv_lock); |
43 | 43 | ||
44 | #define OCFS2_MIN_RESV_WINDOW_BITS 8 | 44 | #define OCFS2_MIN_RESV_WINDOW_BITS 8 |
45 | #define OCFS2_MAX_RESV_WINDOW_BITS 1024 | 45 | #define OCFS2_MAX_RESV_WINDOW_BITS 1024 |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 706c71c2955d..87a1f7679d9b 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
@@ -191,6 +191,7 @@ enum { | |||
191 | Opt_coherency_full, | 191 | Opt_coherency_full, |
192 | Opt_resv_level, | 192 | Opt_resv_level, |
193 | Opt_dir_resv_level, | 193 | Opt_dir_resv_level, |
194 | Opt_journal_async_commit, | ||
194 | Opt_err, | 195 | Opt_err, |
195 | }; | 196 | }; |
196 | 197 | ||
@@ -222,6 +223,7 @@ static const match_table_t tokens = { | |||
222 | {Opt_coherency_full, "coherency=full"}, | 223 | {Opt_coherency_full, "coherency=full"}, |
223 | {Opt_resv_level, "resv_level=%u"}, | 224 | {Opt_resv_level, "resv_level=%u"}, |
224 | {Opt_dir_resv_level, "dir_resv_level=%u"}, | 225 | {Opt_dir_resv_level, "dir_resv_level=%u"}, |
226 | {Opt_journal_async_commit, "journal_async_commit"}, | ||
225 | {Opt_err, NULL} | 227 | {Opt_err, NULL} |
226 | }; | 228 | }; |
227 | 229 | ||
@@ -1470,6 +1472,9 @@ static int ocfs2_parse_options(struct super_block *sb, | |||
1470 | option < OCFS2_MAX_RESV_LEVEL) | 1472 | option < OCFS2_MAX_RESV_LEVEL) |
1471 | mopt->dir_resv_level = option; | 1473 | mopt->dir_resv_level = option; |
1472 | break; | 1474 | break; |
1475 | case Opt_journal_async_commit: | ||
1476 | mopt->mount_opt |= OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT; | ||
1477 | break; | ||
1473 | default: | 1478 | default: |
1474 | mlog(ML_ERROR, | 1479 | mlog(ML_ERROR, |
1475 | "Unrecognized mount option \"%s\" " | 1480 | "Unrecognized mount option \"%s\" " |
@@ -1576,6 +1581,9 @@ static int ocfs2_show_options(struct seq_file *s, struct dentry *root) | |||
1576 | if (osb->osb_dir_resv_level != osb->osb_resv_level) | 1581 | if (osb->osb_dir_resv_level != osb->osb_resv_level) |
1577 | seq_printf(s, ",dir_resv_level=%d", osb->osb_resv_level); | 1582 | seq_printf(s, ",dir_resv_level=%d", osb->osb_resv_level); |
1578 | 1583 | ||
1584 | if (opts & OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT) | ||
1585 | seq_printf(s, ",journal_async_commit"); | ||
1586 | |||
1579 | return 0; | 1587 | return 0; |
1580 | } | 1588 | } |
1581 | 1589 | ||
@@ -2445,6 +2453,15 @@ static int ocfs2_check_volume(struct ocfs2_super *osb) | |||
2445 | goto finally; | 2453 | goto finally; |
2446 | } | 2454 | } |
2447 | 2455 | ||
2456 | if (osb->s_mount_opt & OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT) | ||
2457 | jbd2_journal_set_features(osb->journal->j_journal, | ||
2458 | JBD2_FEATURE_COMPAT_CHECKSUM, 0, | ||
2459 | JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT); | ||
2460 | else | ||
2461 | jbd2_journal_clear_features(osb->journal->j_journal, | ||
2462 | JBD2_FEATURE_COMPAT_CHECKSUM, 0, | ||
2463 | JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT); | ||
2464 | |||
2448 | if (dirty) { | 2465 | if (dirty) { |
2449 | /* recover my local alloc if we didn't unmount cleanly. */ | 2466 | /* recover my local alloc if we didn't unmount cleanly. */ |
2450 | status = ocfs2_begin_local_alloc_recovery(osb, | 2467 | status = ocfs2_begin_local_alloc_recovery(osb, |
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 662f8dee149f..85b190dc132f 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c | |||
@@ -5334,16 +5334,6 @@ out: | |||
5334 | return ret; | 5334 | return ret; |
5335 | } | 5335 | } |
5336 | 5336 | ||
5337 | static inline char *ocfs2_xattr_bucket_get_val(struct inode *inode, | ||
5338 | struct ocfs2_xattr_bucket *bucket, | ||
5339 | int offs) | ||
5340 | { | ||
5341 | int block_off = offs >> inode->i_sb->s_blocksize_bits; | ||
5342 | |||
5343 | offs = offs % inode->i_sb->s_blocksize; | ||
5344 | return bucket_block(bucket, block_off) + offs; | ||
5345 | } | ||
5346 | |||
5347 | /* | 5337 | /* |
5348 | * Truncate the specified xe_off entry in xattr bucket. | 5338 | * Truncate the specified xe_off entry in xattr bucket. |
5349 | * bucket is indicated by header_bh and len is the new length. | 5339 | * bucket is indicated by header_bh and len is the new length. |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 246eae84b13b..6396f88c6687 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
@@ -443,7 +443,6 @@ struct mem_size_stats { | |||
443 | unsigned long anonymous; | 443 | unsigned long anonymous; |
444 | unsigned long anonymous_thp; | 444 | unsigned long anonymous_thp; |
445 | unsigned long swap; | 445 | unsigned long swap; |
446 | unsigned long nonlinear; | ||
447 | u64 pss; | 446 | u64 pss; |
448 | }; | 447 | }; |
449 | 448 | ||
@@ -484,7 +483,6 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, | |||
484 | { | 483 | { |
485 | struct mem_size_stats *mss = walk->private; | 484 | struct mem_size_stats *mss = walk->private; |
486 | struct vm_area_struct *vma = mss->vma; | 485 | struct vm_area_struct *vma = mss->vma; |
487 | pgoff_t pgoff = linear_page_index(vma, addr); | ||
488 | struct page *page = NULL; | 486 | struct page *page = NULL; |
489 | 487 | ||
490 | if (pte_present(*pte)) { | 488 | if (pte_present(*pte)) { |
@@ -496,17 +494,10 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, | |||
496 | mss->swap += PAGE_SIZE; | 494 | mss->swap += PAGE_SIZE; |
497 | else if (is_migration_entry(swpent)) | 495 | else if (is_migration_entry(swpent)) |
498 | page = migration_entry_to_page(swpent); | 496 | page = migration_entry_to_page(swpent); |
499 | } else if (pte_file(*pte)) { | ||
500 | if (pte_to_pgoff(*pte) != pgoff) | ||
501 | mss->nonlinear += PAGE_SIZE; | ||
502 | } | 497 | } |
503 | 498 | ||
504 | if (!page) | 499 | if (!page) |
505 | return; | 500 | return; |
506 | |||
507 | if (page->index != pgoff) | ||
508 | mss->nonlinear += PAGE_SIZE; | ||
509 | |||
510 | smaps_account(mss, page, PAGE_SIZE, pte_young(*pte), pte_dirty(*pte)); | 501 | smaps_account(mss, page, PAGE_SIZE, pte_young(*pte), pte_dirty(*pte)); |
511 | } | 502 | } |
512 | 503 | ||
@@ -596,7 +587,6 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma) | |||
596 | [ilog2(VM_ACCOUNT)] = "ac", | 587 | [ilog2(VM_ACCOUNT)] = "ac", |
597 | [ilog2(VM_NORESERVE)] = "nr", | 588 | [ilog2(VM_NORESERVE)] = "nr", |
598 | [ilog2(VM_HUGETLB)] = "ht", | 589 | [ilog2(VM_HUGETLB)] = "ht", |
599 | [ilog2(VM_NONLINEAR)] = "nl", | ||
600 | [ilog2(VM_ARCH_1)] = "ar", | 590 | [ilog2(VM_ARCH_1)] = "ar", |
601 | [ilog2(VM_DONTDUMP)] = "dd", | 591 | [ilog2(VM_DONTDUMP)] = "dd", |
602 | #ifdef CONFIG_MEM_SOFT_DIRTY | 592 | #ifdef CONFIG_MEM_SOFT_DIRTY |
@@ -668,10 +658,6 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) | |||
668 | (vma->vm_flags & VM_LOCKED) ? | 658 | (vma->vm_flags & VM_LOCKED) ? |
669 | (unsigned long)(mss.pss >> (10 + PSS_SHIFT)) : 0); | 659 | (unsigned long)(mss.pss >> (10 + PSS_SHIFT)) : 0); |
670 | 660 | ||
671 | if (vma->vm_flags & VM_NONLINEAR) | ||
672 | seq_printf(m, "Nonlinear: %8lu kB\n", | ||
673 | mss.nonlinear >> 10); | ||
674 | |||
675 | show_smap_vma_flags(m, vma); | 661 | show_smap_vma_flags(m, vma); |
676 | m_cache_vma(m, vma); | 662 | m_cache_vma(m, vma); |
677 | return 0; | 663 | return 0; |
@@ -772,8 +758,6 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, | |||
772 | ptent = pte_clear_flags(ptent, _PAGE_SOFT_DIRTY); | 758 | ptent = pte_clear_flags(ptent, _PAGE_SOFT_DIRTY); |
773 | } else if (is_swap_pte(ptent)) { | 759 | } else if (is_swap_pte(ptent)) { |
774 | ptent = pte_swp_clear_soft_dirty(ptent); | 760 | ptent = pte_swp_clear_soft_dirty(ptent); |
775 | } else if (pte_file(ptent)) { | ||
776 | ptent = pte_file_clear_soft_dirty(ptent); | ||
777 | } | 761 | } |
778 | 762 | ||
779 | set_pte_at(vma->vm_mm, addr, pte, ptent); | 763 | set_pte_at(vma->vm_mm, addr, pte, ptent); |
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 538519ee37d9..035e51011444 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c | |||
@@ -1536,7 +1536,6 @@ static const struct vm_operations_struct ubifs_file_vm_ops = { | |||
1536 | .fault = filemap_fault, | 1536 | .fault = filemap_fault, |
1537 | .map_pages = filemap_map_pages, | 1537 | .map_pages = filemap_map_pages, |
1538 | .page_mkwrite = ubifs_vm_page_mkwrite, | 1538 | .page_mkwrite = ubifs_vm_page_mkwrite, |
1539 | .remap_pages = generic_file_remap_pages, | ||
1540 | }; | 1539 | }; |
1541 | 1540 | ||
1542 | static int ubifs_file_mmap(struct file *file, struct vm_area_struct *vma) | 1541 | static int ubifs_file_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 712d312d8e3e..f2d05a19d68c 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c | |||
@@ -1404,5 +1404,4 @@ static const struct vm_operations_struct xfs_file_vm_ops = { | |||
1404 | .fault = filemap_fault, | 1404 | .fault = filemap_fault, |
1405 | .map_pages = filemap_map_pages, | 1405 | .map_pages = filemap_map_pages, |
1406 | .page_mkwrite = xfs_vm_page_mkwrite, | 1406 | .page_mkwrite = xfs_vm_page_mkwrite, |
1407 | .remap_pages = generic_file_remap_pages, | ||
1408 | }; | 1407 | }; |