diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/bio-integrity.c | 3 | ||||
-rw-r--r-- | fs/bio.c | 7 | ||||
-rw-r--r-- | fs/exec.c | 10 | ||||
-rw-r--r-- | fs/fuse/file.c | 3 | ||||
-rw-r--r-- | fs/gfs2/ops_inode.c | 3 | ||||
-rw-r--r-- | fs/gfs2/rgrp.c | 8 | ||||
-rw-r--r-- | fs/reiserfs/journal.c | 2 |
7 files changed, 22 insertions, 14 deletions
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c index 49a34e7f7306..a16f29e888cd 100644 --- a/fs/bio-integrity.c +++ b/fs/bio-integrity.c | |||
@@ -61,7 +61,7 @@ static inline unsigned int vecs_to_idx(unsigned int nr) | |||
61 | 61 | ||
62 | static inline int use_bip_pool(unsigned int idx) | 62 | static inline int use_bip_pool(unsigned int idx) |
63 | { | 63 | { |
64 | if (idx == BIOVEC_NR_POOLS) | 64 | if (idx == BIOVEC_MAX_IDX) |
65 | return 1; | 65 | return 1; |
66 | 66 | ||
67 | return 0; | 67 | return 0; |
@@ -95,6 +95,7 @@ struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *bio, | |||
95 | 95 | ||
96 | /* Use mempool if lower order alloc failed or max vecs were requested */ | 96 | /* Use mempool if lower order alloc failed or max vecs were requested */ |
97 | if (bip == NULL) { | 97 | if (bip == NULL) { |
98 | idx = BIOVEC_MAX_IDX; /* so we free the payload properly later */ | ||
98 | bip = mempool_alloc(bs->bio_integrity_pool, gfp_mask); | 99 | bip = mempool_alloc(bs->bio_integrity_pool, gfp_mask); |
99 | 100 | ||
100 | if (unlikely(bip == NULL)) { | 101 | if (unlikely(bip == NULL)) { |
@@ -542,13 +542,18 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
542 | 542 | ||
543 | if (page == prev->bv_page && | 543 | if (page == prev->bv_page && |
544 | offset == prev->bv_offset + prev->bv_len) { | 544 | offset == prev->bv_offset + prev->bv_len) { |
545 | unsigned int prev_bv_len = prev->bv_len; | ||
545 | prev->bv_len += len; | 546 | prev->bv_len += len; |
546 | 547 | ||
547 | if (q->merge_bvec_fn) { | 548 | if (q->merge_bvec_fn) { |
548 | struct bvec_merge_data bvm = { | 549 | struct bvec_merge_data bvm = { |
550 | /* prev_bvec is already charged in | ||
551 | bi_size, discharge it in order to | ||
552 | simulate merging updated prev_bvec | ||
553 | as new bvec. */ | ||
549 | .bi_bdev = bio->bi_bdev, | 554 | .bi_bdev = bio->bi_bdev, |
550 | .bi_sector = bio->bi_sector, | 555 | .bi_sector = bio->bi_sector, |
551 | .bi_size = bio->bi_size, | 556 | .bi_size = bio->bi_size - prev_bv_len, |
552 | .bi_rw = bio->bi_rw, | 557 | .bi_rw = bio->bi_rw, |
553 | }; | 558 | }; |
554 | 559 | ||
@@ -961,6 +961,11 @@ int flush_old_exec(struct linux_binprm * bprm) | |||
961 | goto out; | 961 | goto out; |
962 | 962 | ||
963 | bprm->mm = NULL; /* We're using it now */ | 963 | bprm->mm = NULL; /* We're using it now */ |
964 | |||
965 | current->flags &= ~PF_RANDOMIZE; | ||
966 | flush_thread(); | ||
967 | current->personality &= ~bprm->per_clear; | ||
968 | |||
964 | return 0; | 969 | return 0; |
965 | 970 | ||
966 | out: | 971 | out: |
@@ -997,9 +1002,6 @@ void setup_new_exec(struct linux_binprm * bprm) | |||
997 | tcomm[i] = '\0'; | 1002 | tcomm[i] = '\0'; |
998 | set_task_comm(current, tcomm); | 1003 | set_task_comm(current, tcomm); |
999 | 1004 | ||
1000 | current->flags &= ~PF_RANDOMIZE; | ||
1001 | flush_thread(); | ||
1002 | |||
1003 | /* Set the new mm task size. We have to do that late because it may | 1005 | /* Set the new mm task size. We have to do that late because it may |
1004 | * depend on TIF_32BIT which is only updated in flush_thread() on | 1006 | * depend on TIF_32BIT which is only updated in flush_thread() on |
1005 | * some architectures like powerpc | 1007 | * some architectures like powerpc |
@@ -1015,8 +1017,6 @@ void setup_new_exec(struct linux_binprm * bprm) | |||
1015 | set_dumpable(current->mm, suid_dumpable); | 1017 | set_dumpable(current->mm, suid_dumpable); |
1016 | } | 1018 | } |
1017 | 1019 | ||
1018 | current->personality &= ~bprm->per_clear; | ||
1019 | |||
1020 | /* | 1020 | /* |
1021 | * Flush performance counters when crossing a | 1021 | * Flush performance counters when crossing a |
1022 | * security domain: | 1022 | * security domain: |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index c18913a777ae..a9f5e137f1d3 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -828,6 +828,9 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req, | |||
828 | if (!page) | 828 | if (!page) |
829 | break; | 829 | break; |
830 | 830 | ||
831 | if (mapping_writably_mapped(mapping)) | ||
832 | flush_dcache_page(page); | ||
833 | |||
831 | pagefault_disable(); | 834 | pagefault_disable(); |
832 | tmp = iov_iter_copy_from_user_atomic(page, ii, offset, bytes); | 835 | tmp = iov_iter_copy_from_user_atomic(page, ii, offset, bytes); |
833 | pagefault_enable(); | 836 | pagefault_enable(); |
diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c index 78f73ca1ef3e..84350e1be66d 100644 --- a/fs/gfs2/ops_inode.c +++ b/fs/gfs2/ops_inode.c | |||
@@ -1088,7 +1088,8 @@ static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
1088 | error = vfs_follow_link(nd, buf); | 1088 | error = vfs_follow_link(nd, buf); |
1089 | if (buf != array) | 1089 | if (buf != array) |
1090 | kfree(buf); | 1090 | kfree(buf); |
1091 | } | 1091 | } else |
1092 | path_put(&nd->path); | ||
1092 | 1093 | ||
1093 | return ERR_PTR(error); | 1094 | return ERR_PTR(error); |
1094 | } | 1095 | } |
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 0608f490c295..503b842f3ba2 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
@@ -591,11 +591,7 @@ static int gfs2_ri_update(struct gfs2_inode *ip) | |||
591 | u64 rgrp_count = ip->i_disksize; | 591 | u64 rgrp_count = ip->i_disksize; |
592 | int error; | 592 | int error; |
593 | 593 | ||
594 | if (do_div(rgrp_count, sizeof(struct gfs2_rindex))) { | 594 | do_div(rgrp_count, sizeof(struct gfs2_rindex)); |
595 | gfs2_consist_inode(ip); | ||
596 | return -EIO; | ||
597 | } | ||
598 | |||
599 | clear_rgrpdi(sdp); | 595 | clear_rgrpdi(sdp); |
600 | 596 | ||
601 | file_ra_state_init(&ra_state, inode->i_mapping); | 597 | file_ra_state_init(&ra_state, inode->i_mapping); |
@@ -915,7 +911,7 @@ void gfs2_rgrp_repolish_clones(struct gfs2_rgrpd *rgd) | |||
915 | struct gfs2_alloc *gfs2_alloc_get(struct gfs2_inode *ip) | 911 | struct gfs2_alloc *gfs2_alloc_get(struct gfs2_inode *ip) |
916 | { | 912 | { |
917 | BUG_ON(ip->i_alloc != NULL); | 913 | BUG_ON(ip->i_alloc != NULL); |
918 | ip->i_alloc = kzalloc(sizeof(struct gfs2_alloc), GFP_KERNEL); | 914 | ip->i_alloc = kzalloc(sizeof(struct gfs2_alloc), GFP_NOFS); |
919 | return ip->i_alloc; | 915 | return ip->i_alloc; |
920 | } | 916 | } |
921 | 917 | ||
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index 83ac4d3b3cb0..ba98546fabbd 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c | |||
@@ -2913,7 +2913,9 @@ int journal_init(struct super_block *sb, const char *j_dev_name, | |||
2913 | journal->j_mount_id = 10; | 2913 | journal->j_mount_id = 10; |
2914 | journal->j_state = 0; | 2914 | journal->j_state = 0; |
2915 | atomic_set(&(journal->j_jlock), 0); | 2915 | atomic_set(&(journal->j_jlock), 0); |
2916 | reiserfs_write_unlock(sb); | ||
2916 | journal->j_cnode_free_list = allocate_cnodes(num_cnodes); | 2917 | journal->j_cnode_free_list = allocate_cnodes(num_cnodes); |
2918 | reiserfs_write_lock(sb); | ||
2917 | journal->j_cnode_free_orig = journal->j_cnode_free_list; | 2919 | journal->j_cnode_free_orig = journal->j_cnode_free_list; |
2918 | journal->j_cnode_free = journal->j_cnode_free_list ? num_cnodes : 0; | 2920 | journal->j_cnode_free = journal->j_cnode_free_list ? num_cnodes : 0; |
2919 | journal->j_cnode_used = 0; | 2921 | journal->j_cnode_used = 0; |