Annotation of /trunk/kernel-magellan/patches-4.8/0102-4.8.3-all-fixes.patch
Parent Directory | Revision Log
Revision 2842 -
(hide annotations)
(download)
Tue Nov 22 13:19:23 2016 UTC (7 years, 10 months ago) by niro
File size: 4235 byte(s)
Tue Nov 22 13:19:23 2016 UTC (7 years, 10 months ago) by niro
File size: 4235 byte(s)
-linux-4.8.3
1 | niro | 2842 | diff --git a/Makefile b/Makefile |
2 | index bf6e44a421df..42eb45c86a42 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 8 | ||
8 | -SUBLEVEL = 2 | ||
9 | +SUBLEVEL = 3 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Psychotic Stoned Sheep | ||
12 | |||
13 | diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c | ||
14 | index ec6381e57eb7..258a3f9a2519 100644 | ||
15 | --- a/drivers/scsi/hosts.c | ||
16 | +++ b/drivers/scsi/hosts.c | ||
17 | @@ -246,10 +246,6 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, | ||
18 | |||
19 | shost->dma_dev = dma_dev; | ||
20 | |||
21 | - error = device_add(&shost->shost_gendev); | ||
22 | - if (error) | ||
23 | - goto out_destroy_freelist; | ||
24 | - | ||
25 | /* | ||
26 | * Increase usage count temporarily here so that calling | ||
27 | * scsi_autopm_put_host() will trigger runtime idle if there is | ||
28 | @@ -260,6 +256,10 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, | ||
29 | pm_runtime_enable(&shost->shost_gendev); | ||
30 | device_enable_async_suspend(&shost->shost_gendev); | ||
31 | |||
32 | + error = device_add(&shost->shost_gendev); | ||
33 | + if (error) | ||
34 | + goto out_destroy_freelist; | ||
35 | + | ||
36 | scsi_host_set_state(shost, SHOST_RUNNING); | ||
37 | get_device(shost->shost_gendev.parent); | ||
38 | |||
39 | @@ -309,6 +309,10 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, | ||
40 | out_del_gendev: | ||
41 | device_del(&shost->shost_gendev); | ||
42 | out_destroy_freelist: | ||
43 | + device_disable_async_suspend(&shost->shost_gendev); | ||
44 | + pm_runtime_disable(&shost->shost_gendev); | ||
45 | + pm_runtime_set_suspended(&shost->shost_gendev); | ||
46 | + pm_runtime_put_noidle(&shost->shost_gendev); | ||
47 | scsi_destroy_command_freelist(shost); | ||
48 | out_destroy_tags: | ||
49 | if (shost_use_blk_mq(shost)) | ||
50 | diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c | ||
51 | index ea62245fee26..62900938f26d 100644 | ||
52 | --- a/fs/xfs/xfs_xattr.c | ||
53 | +++ b/fs/xfs/xfs_xattr.c | ||
54 | @@ -147,6 +147,7 @@ __xfs_xattr_put_listent( | ||
55 | arraytop = context->count + prefix_len + namelen + 1; | ||
56 | if (arraytop > context->firstu) { | ||
57 | context->count = -1; /* insufficient space */ | ||
58 | + context->seen_enough = 1; | ||
59 | return 0; | ||
60 | } | ||
61 | offset = (char *)context->alist + context->count; | ||
62 | diff --git a/include/linux/mm.h b/include/linux/mm.h | ||
63 | index ef815b9cd426..277cd39a6399 100644 | ||
64 | --- a/include/linux/mm.h | ||
65 | +++ b/include/linux/mm.h | ||
66 | @@ -2234,6 +2234,7 @@ static inline struct page *follow_page(struct vm_area_struct *vma, | ||
67 | #define FOLL_TRIED 0x800 /* a retry, previous pass started an IO */ | ||
68 | #define FOLL_MLOCK 0x1000 /* lock present pages */ | ||
69 | #define FOLL_REMOTE 0x2000 /* we are working on non-current tsk/mm */ | ||
70 | +#define FOLL_COW 0x4000 /* internal GUP flag */ | ||
71 | |||
72 | typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, | ||
73 | void *data); | ||
74 | diff --git a/include/media/rcar-fcp.h b/include/media/rcar-fcp.h | ||
75 | index 4c7fc77eaf29..8723f05c6321 100644 | ||
76 | --- a/include/media/rcar-fcp.h | ||
77 | +++ b/include/media/rcar-fcp.h | ||
78 | @@ -29,7 +29,7 @@ static inline struct rcar_fcp_device *rcar_fcp_get(const struct device_node *np) | ||
79 | static inline void rcar_fcp_put(struct rcar_fcp_device *fcp) { } | ||
80 | static inline int rcar_fcp_enable(struct rcar_fcp_device *fcp) | ||
81 | { | ||
82 | - return -ENOSYS; | ||
83 | + return 0; | ||
84 | } | ||
85 | static inline void rcar_fcp_disable(struct rcar_fcp_device *fcp) { } | ||
86 | #endif | ||
87 | diff --git a/mm/gup.c b/mm/gup.c | ||
88 | index 96b2b2fd0fbd..22cc22e7432f 100644 | ||
89 | --- a/mm/gup.c | ||
90 | +++ b/mm/gup.c | ||
91 | @@ -60,6 +60,16 @@ static int follow_pfn_pte(struct vm_area_struct *vma, unsigned long address, | ||
92 | return -EEXIST; | ||
93 | } | ||
94 | |||
95 | +/* | ||
96 | + * FOLL_FORCE can write to even unwritable pte's, but only | ||
97 | + * after we've gone through a COW cycle and they are dirty. | ||
98 | + */ | ||
99 | +static inline bool can_follow_write_pte(pte_t pte, unsigned int flags) | ||
100 | +{ | ||
101 | + return pte_write(pte) || | ||
102 | + ((flags & FOLL_FORCE) && (flags & FOLL_COW) && pte_dirty(pte)); | ||
103 | +} | ||
104 | + | ||
105 | static struct page *follow_page_pte(struct vm_area_struct *vma, | ||
106 | unsigned long address, pmd_t *pmd, unsigned int flags) | ||
107 | { | ||
108 | @@ -95,7 +105,7 @@ retry: | ||
109 | } | ||
110 | if ((flags & FOLL_NUMA) && pte_protnone(pte)) | ||
111 | goto no_page; | ||
112 | - if ((flags & FOLL_WRITE) && !pte_write(pte)) { | ||
113 | + if ((flags & FOLL_WRITE) && !can_follow_write_pte(pte, flags)) { | ||
114 | pte_unmap_unlock(ptep, ptl); | ||
115 | return NULL; | ||
116 | } | ||
117 | @@ -412,7 +422,7 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, | ||
118 | * reCOWed by userspace write). | ||
119 | */ | ||
120 | if ((ret & VM_FAULT_WRITE) && !(vma->vm_flags & VM_WRITE)) | ||
121 | - *flags &= ~FOLL_WRITE; | ||
122 | + *flags |= FOLL_COW; | ||
123 | return 0; | ||
124 | } | ||
125 |