Magellan Linux

Annotation of /trunk/kernel-lts/patches-3.4/0149-3.4.50-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2225 - (hide annotations) (download)
Mon Jul 1 09:56:21 2013 UTC (10 years, 11 months ago) by niro
File size: 51192 byte(s)
-linux-3.4.50
1 niro 2225 diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h
2     index d58fc4e..6afb13a 100644
3     --- a/arch/powerpc/include/asm/exception-64s.h
4     +++ b/arch/powerpc/include/asm/exception-64s.h
5     @@ -320,7 +320,7 @@ label##_common: \
6     */
7     #define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr) \
8     EXCEPTION_COMMON(trap, label, hdlr, ret_from_except_lite, \
9     - FINISH_NAP;RUNLATCH_ON;DISABLE_INTS)
10     + FINISH_NAP;DISABLE_INTS;RUNLATCH_ON)
11    
12     /*
13     * When the idle code in power4_idle puts the CPU into NAP mode,
14     diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
15     index d7ebc58..071592b 100644
16     --- a/arch/powerpc/kernel/irq.c
17     +++ b/arch/powerpc/kernel/irq.c
18     @@ -162,7 +162,7 @@ notrace unsigned int __check_irq_replay(void)
19     * in case we also had a rollover while hard disabled
20     */
21     local_paca->irq_happened &= ~PACA_IRQ_DEC;
22     - if (decrementer_check_overflow())
23     + if ((happened & PACA_IRQ_DEC) || decrementer_check_overflow())
24     return 0x900;
25    
26     /* Finally check if an external interrupt happened */
27     diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
28     index 94178e5..c1aef40 100644
29     --- a/arch/powerpc/kernel/process.c
30     +++ b/arch/powerpc/kernel/process.c
31     @@ -1218,7 +1218,7 @@ EXPORT_SYMBOL(dump_stack);
32    
33     #ifdef CONFIG_PPC64
34     /* Called with hard IRQs off */
35     -void __ppc64_runlatch_on(void)
36     +void notrace __ppc64_runlatch_on(void)
37     {
38     struct thread_info *ti = current_thread_info();
39     unsigned long ctrl;
40     @@ -1231,7 +1231,7 @@ void __ppc64_runlatch_on(void)
41     }
42    
43     /* Called with hard IRQs off */
44     -void __ppc64_runlatch_off(void)
45     +void notrace __ppc64_runlatch_off(void)
46     {
47     struct thread_info *ti = current_thread_info();
48     unsigned long ctrl;
49     diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S
50     index 7a6f3b3..f2bb9c9 100644
51     --- a/arch/x86/kernel/relocate_kernel_64.S
52     +++ b/arch/x86/kernel/relocate_kernel_64.S
53     @@ -160,7 +160,7 @@ identity_mapped:
54     xorq %rbp, %rbp
55     xorq %r8, %r8
56     xorq %r9, %r9
57     - xorq %r10, %r9
58     + xorq %r10, %r10
59     xorq %r11, %r11
60     xorq %r12, %r12
61     xorq %r13, %r13
62     diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
63     index b0f553b..d3446f6 100644
64     --- a/drivers/block/cciss.c
65     +++ b/drivers/block/cciss.c
66     @@ -161,8 +161,6 @@ static irqreturn_t do_cciss_msix_intr(int irq, void *dev_id);
67     static int cciss_open(struct block_device *bdev, fmode_t mode);
68     static int cciss_unlocked_open(struct block_device *bdev, fmode_t mode);
69     static int cciss_release(struct gendisk *disk, fmode_t mode);
70     -static int do_ioctl(struct block_device *bdev, fmode_t mode,
71     - unsigned int cmd, unsigned long arg);
72     static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
73     unsigned int cmd, unsigned long arg);
74     static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo);
75     @@ -229,7 +227,7 @@ static const struct block_device_operations cciss_fops = {
76     .owner = THIS_MODULE,
77     .open = cciss_unlocked_open,
78     .release = cciss_release,
79     - .ioctl = do_ioctl,
80     + .ioctl = cciss_ioctl,
81     .getgeo = cciss_getgeo,
82     #ifdef CONFIG_COMPAT
83     .compat_ioctl = cciss_compat_ioctl,
84     @@ -1140,16 +1138,6 @@ static int cciss_release(struct gendisk *disk, fmode_t mode)
85     return 0;
86     }
87    
88     -static int do_ioctl(struct block_device *bdev, fmode_t mode,
89     - unsigned cmd, unsigned long arg)
90     -{
91     - int ret;
92     - mutex_lock(&cciss_mutex);
93     - ret = cciss_ioctl(bdev, mode, cmd, arg);
94     - mutex_unlock(&cciss_mutex);
95     - return ret;
96     -}
97     -
98     #ifdef CONFIG_COMPAT
99    
100     static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode,
101     @@ -1176,7 +1164,7 @@ static int cciss_compat_ioctl(struct block_device *bdev, fmode_t mode,
102     case CCISS_REGNEWD:
103     case CCISS_RESCANDISK:
104     case CCISS_GETLUNINFO:
105     - return do_ioctl(bdev, mode, cmd, arg);
106     + return cciss_ioctl(bdev, mode, cmd, arg);
107    
108     case CCISS_PASSTHRU32:
109     return cciss_ioctl32_passthru(bdev, mode, cmd, arg);
110     @@ -1216,7 +1204,7 @@ static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode,
111     if (err)
112     return -EFAULT;
113    
114     - err = do_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p);
115     + err = cciss_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p);
116     if (err)
117     return err;
118     err |=
119     @@ -1258,7 +1246,7 @@ static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode,
120     if (err)
121     return -EFAULT;
122    
123     - err = do_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p);
124     + err = cciss_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p);
125     if (err)
126     return err;
127     err |=
128     @@ -1308,11 +1296,14 @@ static int cciss_getpciinfo(ctlr_info_t *h, void __user *argp)
129     static int cciss_getintinfo(ctlr_info_t *h, void __user *argp)
130     {
131     cciss_coalint_struct intinfo;
132     + unsigned long flags;
133    
134     if (!argp)
135     return -EINVAL;
136     + spin_lock_irqsave(&h->lock, flags);
137     intinfo.delay = readl(&h->cfgtable->HostWrite.CoalIntDelay);
138     intinfo.count = readl(&h->cfgtable->HostWrite.CoalIntCount);
139     + spin_unlock_irqrestore(&h->lock, flags);
140     if (copy_to_user
141     (argp, &intinfo, sizeof(cciss_coalint_struct)))
142     return -EFAULT;
143     @@ -1353,12 +1344,15 @@ static int cciss_setintinfo(ctlr_info_t *h, void __user *argp)
144     static int cciss_getnodename(ctlr_info_t *h, void __user *argp)
145     {
146     NodeName_type NodeName;
147     + unsigned long flags;
148     int i;
149    
150     if (!argp)
151     return -EINVAL;
152     + spin_lock_irqsave(&h->lock, flags);
153     for (i = 0; i < 16; i++)
154     NodeName[i] = readb(&h->cfgtable->ServerName[i]);
155     + spin_unlock_irqrestore(&h->lock, flags);
156     if (copy_to_user(argp, NodeName, sizeof(NodeName_type)))
157     return -EFAULT;
158     return 0;
159     @@ -1395,10 +1389,13 @@ static int cciss_setnodename(ctlr_info_t *h, void __user *argp)
160     static int cciss_getheartbeat(ctlr_info_t *h, void __user *argp)
161     {
162     Heartbeat_type heartbeat;
163     + unsigned long flags;
164    
165     if (!argp)
166     return -EINVAL;
167     + spin_lock_irqsave(&h->lock, flags);
168     heartbeat = readl(&h->cfgtable->HeartBeat);
169     + spin_unlock_irqrestore(&h->lock, flags);
170     if (copy_to_user(argp, &heartbeat, sizeof(Heartbeat_type)))
171     return -EFAULT;
172     return 0;
173     @@ -1407,10 +1404,13 @@ static int cciss_getheartbeat(ctlr_info_t *h, void __user *argp)
174     static int cciss_getbustypes(ctlr_info_t *h, void __user *argp)
175     {
176     BusTypes_type BusTypes;
177     + unsigned long flags;
178    
179     if (!argp)
180     return -EINVAL;
181     + spin_lock_irqsave(&h->lock, flags);
182     BusTypes = readl(&h->cfgtable->BusTypes);
183     + spin_unlock_irqrestore(&h->lock, flags);
184     if (copy_to_user(argp, &BusTypes, sizeof(BusTypes_type)))
185     return -EFAULT;
186     return 0;
187     diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
188     index be84559..1ee297b 100644
189     --- a/drivers/gpu/drm/gma500/cdv_intel_display.c
190     +++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
191     @@ -1439,6 +1439,19 @@ static void cdv_intel_crtc_destroy(struct drm_crtc *crtc)
192     kfree(psb_intel_crtc);
193     }
194    
195     +static void cdv_intel_crtc_disable(struct drm_crtc *crtc)
196     +{
197     + struct gtt_range *gt;
198     + struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
199     +
200     + crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
201     +
202     + if (crtc->fb) {
203     + gt = to_psb_fb(crtc->fb)->gtt;
204     + psb_gtt_unpin(gt);
205     + }
206     +}
207     +
208     const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = {
209     .dpms = cdv_intel_crtc_dpms,
210     .mode_fixup = cdv_intel_crtc_mode_fixup,
211     @@ -1446,6 +1459,7 @@ const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = {
212     .mode_set_base = cdv_intel_pipe_set_base,
213     .prepare = cdv_intel_crtc_prepare,
214     .commit = cdv_intel_crtc_commit,
215     + .disable = cdv_intel_crtc_disable,
216     };
217    
218     const struct drm_crtc_funcs cdv_intel_crtc_funcs = {
219     diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
220     index 2616558..454a9d8 100644
221     --- a/drivers/gpu/drm/gma500/psb_intel_display.c
222     +++ b/drivers/gpu/drm/gma500/psb_intel_display.c
223     @@ -1262,6 +1262,19 @@ void psb_intel_crtc_destroy(struct drm_crtc *crtc)
224     kfree(psb_intel_crtc);
225     }
226    
227     +static void psb_intel_crtc_disable(struct drm_crtc *crtc)
228     +{
229     + struct gtt_range *gt;
230     + struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
231     +
232     + crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
233     +
234     + if (crtc->fb) {
235     + gt = to_psb_fb(crtc->fb)->gtt;
236     + psb_gtt_unpin(gt);
237     + }
238     +}
239     +
240     const struct drm_crtc_helper_funcs psb_intel_helper_funcs = {
241     .dpms = psb_intel_crtc_dpms,
242     .mode_fixup = psb_intel_crtc_mode_fixup,
243     @@ -1269,6 +1282,7 @@ const struct drm_crtc_helper_funcs psb_intel_helper_funcs = {
244     .mode_set_base = psb_intel_pipe_set_base,
245     .prepare = psb_intel_crtc_prepare,
246     .commit = psb_intel_crtc_commit,
247     + .disable = psb_intel_crtc_disable,
248     };
249    
250     const struct drm_crtc_funcs psb_intel_crtc_funcs = {
251     diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
252     index aeb9d6e..c0ba260 100644
253     --- a/drivers/gpu/drm/i915/intel_sdvo.c
254     +++ b/drivers/gpu/drm/i915/intel_sdvo.c
255     @@ -1582,10 +1582,13 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
256     * arranged in priority order.
257     */
258     intel_ddc_get_modes(connector, &intel_sdvo->ddc);
259     - if (list_empty(&connector->probed_modes) == false)
260     - goto end;
261    
262     - /* Fetch modes from VBT */
263     + /*
264     + * Fetch modes from VBT. For SDVO prefer the VBT mode since some
265     + * SDVO->LVDS transcoders can't cope with the EDID mode. Since
266     + * drm_mode_probed_add adds the mode at the head of the list we add it
267     + * last.
268     + */
269     if (dev_priv->sdvo_lvds_vbt_mode != NULL) {
270     newmode = drm_mode_duplicate(connector->dev,
271     dev_priv->sdvo_lvds_vbt_mode);
272     @@ -1597,7 +1600,6 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
273     }
274     }
275    
276     -end:
277     list_for_each_entry(newmode, &connector->probed_modes, head) {
278     if (newmode->type & DRM_MODE_TYPE_PREFERRED) {
279     intel_sdvo->sdvo_lvds_fixed_mode =
280     diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
281     index df44509..b424a20 100644
282     --- a/drivers/md/raid1.c
283     +++ b/drivers/md/raid1.c
284     @@ -413,7 +413,17 @@ static void raid1_end_write_request(struct bio *bio, int error)
285    
286     r1_bio->bios[mirror] = NULL;
287     to_put = bio;
288     - set_bit(R1BIO_Uptodate, &r1_bio->state);
289     + /*
290     + * Do not set R1BIO_Uptodate if the current device is
291     + * rebuilding or Faulty. This is because we cannot use
292     + * such device for properly reading the data back (we could
293     + * potentially use it, if the current write would have felt
294     + * before rdev->recovery_offset, but for simplicity we don't
295     + * check this here.
296     + */
297     + if (test_bit(In_sync, &conf->mirrors[mirror].rdev->flags) &&
298     + !test_bit(Faulty, &conf->mirrors[mirror].rdev->flags))
299     + set_bit(R1BIO_Uptodate, &r1_bio->state);
300    
301     /* Maybe we can clear some bad blocks. */
302     if (is_badblock(conf->mirrors[mirror].rdev,
303     diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
304     index 6137d00..0cc7985 100644
305     --- a/drivers/md/raid10.c
306     +++ b/drivers/md/raid10.c
307     @@ -452,7 +452,17 @@ static void raid10_end_write_request(struct bio *bio, int error)
308     sector_t first_bad;
309     int bad_sectors;
310    
311     - set_bit(R10BIO_Uptodate, &r10_bio->state);
312     + /*
313     + * Do not set R10BIO_Uptodate if the current device is
314     + * rebuilding or Faulty. This is because we cannot use
315     + * such device for properly reading the data back (we could
316     + * potentially use it, if the current write would have felt
317     + * before rdev->recovery_offset, but for simplicity we don't
318     + * check this here.
319     + */
320     + if (test_bit(In_sync, &rdev->flags) &&
321     + !test_bit(Faulty, &rdev->flags))
322     + set_bit(R10BIO_Uptodate, &r10_bio->state);
323    
324     /* Maybe we can clear some bad blocks. */
325     if (is_badblock(rdev,
326     diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig
327     index e507e78..3b8c930 100644
328     --- a/drivers/net/wireless/ath/ath9k/Kconfig
329     +++ b/drivers/net/wireless/ath/ath9k/Kconfig
330     @@ -89,13 +89,17 @@ config ATH9K_MAC_DEBUG
331     This option enables collection of statistics for Rx/Tx status
332     data and some other MAC related statistics
333    
334     -config ATH9K_RATE_CONTROL
335     +config ATH9K_LEGACY_RATE_CONTROL
336     bool "Atheros ath9k rate control"
337     depends on ATH9K
338     - default y
339     + default n
340     ---help---
341     Say Y, if you want to use the ath9k specific rate control
342     - module instead of minstrel_ht.
343     + module instead of minstrel_ht. Be warned that there are various
344     + issues with the ath9k RC and minstrel is a more robust algorithm.
345     + Note that even if this option is selected, "ath9k_rate_control"
346     + has to be passed to mac80211 using the module parameter,
347     + ieee80211_default_rc_algo.
348    
349     config ATH9K_HTC
350     tristate "Atheros HTC based wireless cards support"
351     diff --git a/drivers/net/wireless/ath/ath9k/Makefile b/drivers/net/wireless/ath/ath9k/Makefile
352     index 27d95fe..24ae2e6 100644
353     --- a/drivers/net/wireless/ath/ath9k/Makefile
354     +++ b/drivers/net/wireless/ath/ath9k/Makefile
355     @@ -6,7 +6,7 @@ ath9k-y += beacon.o \
356     xmit.o
357    
358     ath9k-$(CONFIG_ATH9K_BTCOEX_SUPPORT) += mci.o
359     -ath9k-$(CONFIG_ATH9K_RATE_CONTROL) += rc.o
360     +ath9k-$(CONFIG_ATH9K_LEGACY_RATE_CONTROL) += rc.o
361     ath9k-$(CONFIG_ATH9K_PCI) += pci.o
362     ath9k-$(CONFIG_ATH9K_AHB) += ahb.o
363     ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o
364     diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
365     index cb00645..cac5b25 100644
366     --- a/drivers/net/wireless/ath/ath9k/init.c
367     +++ b/drivers/net/wireless/ath/ath9k/init.c
368     @@ -671,8 +671,7 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
369     BIT(NL80211_IFTYPE_ADHOC) |
370     BIT(NL80211_IFTYPE_MESH_POINT);
371    
372     - if (AR_SREV_5416(sc->sc_ah))
373     - hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
374     + hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
375    
376     hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
377     hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
378     @@ -695,10 +694,6 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
379     sc->ant_rx = hw->wiphy->available_antennas_rx;
380     sc->ant_tx = hw->wiphy->available_antennas_tx;
381    
382     -#ifdef CONFIG_ATH9K_RATE_CONTROL
383     - hw->rate_control_algorithm = "ath9k_rate_control";
384     -#endif
385     -
386     if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
387     hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
388     &sc->sbands[IEEE80211_BAND_2GHZ];
389     diff --git a/drivers/net/wireless/ath/ath9k/rc.h b/drivers/net/wireless/ath/ath9k/rc.h
390     index 75f8e9b..12cf122 100644
391     --- a/drivers/net/wireless/ath/ath9k/rc.h
392     +++ b/drivers/net/wireless/ath/ath9k/rc.h
393     @@ -219,7 +219,7 @@ struct ath_rate_priv {
394     struct ath_rc_stats rcstats[RATE_TABLE_SIZE];
395     };
396    
397     -#ifdef CONFIG_ATH9K_RATE_CONTROL
398     +#ifdef CONFIG_ATH9K_LEGACY_RATE_CONTROL
399     int ath_rate_control_register(void);
400     void ath_rate_control_unregister(void);
401     #else
402     diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
403     index b54c750..f8c4499 100644
404     --- a/drivers/net/wireless/b43/main.c
405     +++ b/drivers/net/wireless/b43/main.c
406     @@ -2449,7 +2449,7 @@ static void b43_request_firmware(struct work_struct *work)
407     for (i = 0; i < B43_NR_FWTYPES; i++) {
408     errmsg = ctx->errors[i];
409     if (strlen(errmsg))
410     - b43err(dev->wl, errmsg);
411     + b43err(dev->wl, "%s", errmsg);
412     }
413     b43_print_fw_helptext(dev->wl, 1);
414     goto out;
415     diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
416     index 63ccc0f..c5ce195 100644
417     --- a/drivers/rtc/rtc-twl.c
418     +++ b/drivers/rtc/rtc-twl.c
419     @@ -523,6 +523,7 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
420     }
421    
422     platform_set_drvdata(pdev, rtc);
423     + device_init_wakeup(&pdev->dev, 1);
424     return 0;
425    
426     out2:
427     diff --git a/fs/ceph/locks.c b/fs/ceph/locks.c
428     index 80576d05..bb5fb3d 100644
429     --- a/fs/ceph/locks.c
430     +++ b/fs/ceph/locks.c
431     @@ -191,27 +191,23 @@ void ceph_count_locks(struct inode *inode, int *fcntl_count, int *flock_count)
432     }
433    
434     /**
435     - * Encode the flock and fcntl locks for the given inode into the pagelist.
436     - * Format is: #fcntl locks, sequential fcntl locks, #flock locks,
437     - * sequential flock locks.
438     - * Must be called with lock_flocks() already held.
439     - * If we encounter more of a specific lock type than expected,
440     - * we return the value 1.
441     + * Encode the flock and fcntl locks for the given inode into the ceph_filelock
442     + * array. Must be called with lock_flocks() already held.
443     + * If we encounter more of a specific lock type than expected, return -ENOSPC.
444     */
445     -int ceph_encode_locks(struct inode *inode, struct ceph_pagelist *pagelist,
446     - int num_fcntl_locks, int num_flock_locks)
447     +int ceph_encode_locks_to_buffer(struct inode *inode,
448     + struct ceph_filelock *flocks,
449     + int num_fcntl_locks, int num_flock_locks)
450     {
451     struct file_lock *lock;
452     - struct ceph_filelock cephlock;
453     int err = 0;
454     int seen_fcntl = 0;
455     int seen_flock = 0;
456     + int l = 0;
457    
458     dout("encoding %d flock and %d fcntl locks", num_flock_locks,
459     num_fcntl_locks);
460     - err = ceph_pagelist_append(pagelist, &num_fcntl_locks, sizeof(u32));
461     - if (err)
462     - goto fail;
463     +
464     for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) {
465     if (lock->fl_flags & FL_POSIX) {
466     ++seen_fcntl;
467     @@ -219,19 +215,12 @@ int ceph_encode_locks(struct inode *inode, struct ceph_pagelist *pagelist,
468     err = -ENOSPC;
469     goto fail;
470     }
471     - err = lock_to_ceph_filelock(lock, &cephlock);
472     + err = lock_to_ceph_filelock(lock, &flocks[l]);
473     if (err)
474     goto fail;
475     - err = ceph_pagelist_append(pagelist, &cephlock,
476     - sizeof(struct ceph_filelock));
477     + ++l;
478     }
479     - if (err)
480     - goto fail;
481     }
482     -
483     - err = ceph_pagelist_append(pagelist, &num_flock_locks, sizeof(u32));
484     - if (err)
485     - goto fail;
486     for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) {
487     if (lock->fl_flags & FL_FLOCK) {
488     ++seen_flock;
489     @@ -239,19 +228,51 @@ int ceph_encode_locks(struct inode *inode, struct ceph_pagelist *pagelist,
490     err = -ENOSPC;
491     goto fail;
492     }
493     - err = lock_to_ceph_filelock(lock, &cephlock);
494     + err = lock_to_ceph_filelock(lock, &flocks[l]);
495     if (err)
496     goto fail;
497     - err = ceph_pagelist_append(pagelist, &cephlock,
498     - sizeof(struct ceph_filelock));
499     + ++l;
500     }
501     - if (err)
502     - goto fail;
503     }
504     fail:
505     return err;
506     }
507    
508     +/**
509     + * Copy the encoded flock and fcntl locks into the pagelist.
510     + * Format is: #fcntl locks, sequential fcntl locks, #flock locks,
511     + * sequential flock locks.
512     + * Returns zero on success.
513     + */
514     +int ceph_locks_to_pagelist(struct ceph_filelock *flocks,
515     + struct ceph_pagelist *pagelist,
516     + int num_fcntl_locks, int num_flock_locks)
517     +{
518     + int err = 0;
519     + __le32 nlocks;
520     +
521     + nlocks = cpu_to_le32(num_fcntl_locks);
522     + err = ceph_pagelist_append(pagelist, &nlocks, sizeof(nlocks));
523     + if (err)
524     + goto out_fail;
525     +
526     + err = ceph_pagelist_append(pagelist, flocks,
527     + num_fcntl_locks * sizeof(*flocks));
528     + if (err)
529     + goto out_fail;
530     +
531     + nlocks = cpu_to_le32(num_flock_locks);
532     + err = ceph_pagelist_append(pagelist, &nlocks, sizeof(nlocks));
533     + if (err)
534     + goto out_fail;
535     +
536     + err = ceph_pagelist_append(pagelist,
537     + &flocks[num_fcntl_locks],
538     + num_flock_locks * sizeof(*flocks));
539     +out_fail:
540     + return err;
541     +}
542     +
543     /*
544     * Given a pointer to a lock, convert it to a ceph filelock
545     */
546     diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
547     index 3fd08ad..cf1b9e0 100644
548     --- a/fs/ceph/mds_client.c
549     +++ b/fs/ceph/mds_client.c
550     @@ -335,9 +335,9 @@ void ceph_put_mds_session(struct ceph_mds_session *s)
551     atomic_read(&s->s_ref), atomic_read(&s->s_ref)-1);
552     if (atomic_dec_and_test(&s->s_ref)) {
553     if (s->s_auth.authorizer)
554     - s->s_mdsc->fsc->client->monc.auth->ops->destroy_authorizer(
555     - s->s_mdsc->fsc->client->monc.auth,
556     - s->s_auth.authorizer);
557     + ceph_auth_destroy_authorizer(
558     + s->s_mdsc->fsc->client->monc.auth,
559     + s->s_auth.authorizer);
560     kfree(s);
561     }
562     }
563     @@ -2455,39 +2455,44 @@ static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap,
564    
565     if (recon_state->flock) {
566     int num_fcntl_locks, num_flock_locks;
567     - struct ceph_pagelist_cursor trunc_point;
568     -
569     - ceph_pagelist_set_cursor(pagelist, &trunc_point);
570     - do {
571     - lock_flocks();
572     - ceph_count_locks(inode, &num_fcntl_locks,
573     - &num_flock_locks);
574     - rec.v2.flock_len = (2*sizeof(u32) +
575     - (num_fcntl_locks+num_flock_locks) *
576     - sizeof(struct ceph_filelock));
577     - unlock_flocks();
578     -
579     - /* pre-alloc pagelist */
580     - ceph_pagelist_truncate(pagelist, &trunc_point);
581     - err = ceph_pagelist_append(pagelist, &rec, reclen);
582     - if (!err)
583     - err = ceph_pagelist_reserve(pagelist,
584     - rec.v2.flock_len);
585     -
586     - /* encode locks */
587     - if (!err) {
588     - lock_flocks();
589     - err = ceph_encode_locks(inode,
590     - pagelist,
591     - num_fcntl_locks,
592     - num_flock_locks);
593     - unlock_flocks();
594     - }
595     - } while (err == -ENOSPC);
596     + struct ceph_filelock *flocks;
597     +
598     +encode_again:
599     + lock_flocks();
600     + ceph_count_locks(inode, &num_fcntl_locks, &num_flock_locks);
601     + unlock_flocks();
602     + flocks = kmalloc((num_fcntl_locks+num_flock_locks) *
603     + sizeof(struct ceph_filelock), GFP_NOFS);
604     + if (!flocks) {
605     + err = -ENOMEM;
606     + goto out_free;
607     + }
608     + lock_flocks();
609     + err = ceph_encode_locks_to_buffer(inode, flocks,
610     + num_fcntl_locks,
611     + num_flock_locks);
612     + unlock_flocks();
613     + if (err) {
614     + kfree(flocks);
615     + if (err == -ENOSPC)
616     + goto encode_again;
617     + goto out_free;
618     + }
619     + /*
620     + * number of encoded locks is stable, so copy to pagelist
621     + */
622     + rec.v2.flock_len = cpu_to_le32(2*sizeof(u32) +
623     + (num_fcntl_locks+num_flock_locks) *
624     + sizeof(struct ceph_filelock));
625     + err = ceph_pagelist_append(pagelist, &rec, reclen);
626     + if (!err)
627     + err = ceph_locks_to_pagelist(flocks, pagelist,
628     + num_fcntl_locks,
629     + num_flock_locks);
630     + kfree(flocks);
631     } else {
632     err = ceph_pagelist_append(pagelist, &rec, reclen);
633     }
634     -
635     out_free:
636     kfree(path);
637     out_dput:
638     @@ -3414,13 +3419,17 @@ static struct ceph_auth_handshake *get_authorizer(struct ceph_connection *con,
639     struct ceph_auth_handshake *auth = &s->s_auth;
640    
641     if (force_new && auth->authorizer) {
642     - if (ac->ops && ac->ops->destroy_authorizer)
643     - ac->ops->destroy_authorizer(ac, auth->authorizer);
644     + ceph_auth_destroy_authorizer(ac, auth->authorizer);
645     auth->authorizer = NULL;
646     }
647     - if (!auth->authorizer && ac->ops && ac->ops->create_authorizer) {
648     - int ret = ac->ops->create_authorizer(ac, CEPH_ENTITY_TYPE_MDS,
649     - auth);
650     + if (!auth->authorizer) {
651     + int ret = ceph_auth_create_authorizer(ac, CEPH_ENTITY_TYPE_MDS,
652     + auth);
653     + if (ret)
654     + return ERR_PTR(ret);
655     + } else {
656     + int ret = ceph_auth_update_authorizer(ac, CEPH_ENTITY_TYPE_MDS,
657     + auth);
658     if (ret)
659     return ERR_PTR(ret);
660     }
661     @@ -3436,7 +3445,7 @@ static int verify_authorizer_reply(struct ceph_connection *con, int len)
662     struct ceph_mds_client *mdsc = s->s_mdsc;
663     struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth;
664    
665     - return ac->ops->verify_authorizer_reply(ac, s->s_auth.authorizer, len);
666     + return ceph_auth_verify_authorizer_reply(ac, s->s_auth.authorizer, len);
667     }
668    
669     static int invalidate_authorizer(struct ceph_connection *con)
670     @@ -3445,8 +3454,7 @@ static int invalidate_authorizer(struct ceph_connection *con)
671     struct ceph_mds_client *mdsc = s->s_mdsc;
672     struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth;
673    
674     - if (ac->ops->invalidate_authorizer)
675     - ac->ops->invalidate_authorizer(ac, CEPH_ENTITY_TYPE_MDS);
676     + ceph_auth_invalidate_authorizer(ac, CEPH_ENTITY_TYPE_MDS);
677    
678     return ceph_monc_validate_auth(&mdsc->fsc->client->monc);
679     }
680     diff --git a/fs/ceph/super.c b/fs/ceph/super.c
681     index f363918..f4fa5cf 100644
682     --- a/fs/ceph/super.c
683     +++ b/fs/ceph/super.c
684     @@ -70,8 +70,14 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
685     /*
686     * express utilization in terms of large blocks to avoid
687     * overflow on 32-bit machines.
688     + *
689     + * NOTE: for the time being, we make bsize == frsize to humor
690     + * not-yet-ancient versions of glibc that are broken.
691     + * Someday, we will probably want to report a real block
692     + * size... whatever that may mean for a network file system!
693     */
694     buf->f_bsize = 1 << CEPH_BLOCK_SHIFT;
695     + buf->f_frsize = 1 << CEPH_BLOCK_SHIFT;
696     buf->f_blocks = le64_to_cpu(st.kb) >> (CEPH_BLOCK_SHIFT-10);
697     buf->f_bfree = le64_to_cpu(st.kb_avail) >> (CEPH_BLOCK_SHIFT-10);
698     buf->f_bavail = le64_to_cpu(st.kb_avail) >> (CEPH_BLOCK_SHIFT-10);
699     @@ -79,7 +85,6 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
700     buf->f_files = le64_to_cpu(st.num_objects);
701     buf->f_ffree = -1;
702     buf->f_namelen = NAME_MAX;
703     - buf->f_frsize = PAGE_CACHE_SIZE;
704    
705     /* leave fsid little-endian, regardless of host endianness */
706     fsid = *(u64 *)(&monmap->fsid) ^ *((u64 *)&monmap->fsid + 1);
707     diff --git a/fs/ceph/super.h b/fs/ceph/super.h
708     index fc35036..d2e01a6 100644
709     --- a/fs/ceph/super.h
710     +++ b/fs/ceph/super.h
711     @@ -21,7 +21,7 @@
712    
713     /* large granularity for statfs utilization stats to facilitate
714     * large volume sizes on 32-bit machines. */
715     -#define CEPH_BLOCK_SHIFT 20 /* 1 MB */
716     +#define CEPH_BLOCK_SHIFT 22 /* 4 MB */
717     #define CEPH_BLOCK (1 << CEPH_BLOCK_SHIFT)
718    
719     #define CEPH_MOUNT_OPT_DIRSTAT (1<<4) /* `cat dirname` for stats */
720     @@ -847,8 +847,13 @@ extern const struct export_operations ceph_export_ops;
721     extern int ceph_lock(struct file *file, int cmd, struct file_lock *fl);
722     extern int ceph_flock(struct file *file, int cmd, struct file_lock *fl);
723     extern void ceph_count_locks(struct inode *inode, int *p_num, int *f_num);
724     -extern int ceph_encode_locks(struct inode *i, struct ceph_pagelist *p,
725     - int p_locks, int f_locks);
726     +extern int ceph_encode_locks_to_buffer(struct inode *inode,
727     + struct ceph_filelock *flocks,
728     + int num_fcntl_locks,
729     + int num_flock_locks);
730     +extern int ceph_locks_to_pagelist(struct ceph_filelock *flocks,
731     + struct ceph_pagelist *pagelist,
732     + int num_fcntl_locks, int num_flock_locks);
733     extern int lock_to_ceph_filelock(struct file_lock *fl, struct ceph_filelock *c);
734    
735     /* debugfs.c */
736     diff --git a/include/linux/ceph/auth.h b/include/linux/ceph/auth.h
737     index d4080f3..5f33868 100644
738     --- a/include/linux/ceph/auth.h
739     +++ b/include/linux/ceph/auth.h
740     @@ -52,6 +52,9 @@ struct ceph_auth_client_ops {
741     */
742     int (*create_authorizer)(struct ceph_auth_client *ac, int peer_type,
743     struct ceph_auth_handshake *auth);
744     + /* ensure that an existing authorizer is up to date */
745     + int (*update_authorizer)(struct ceph_auth_client *ac, int peer_type,
746     + struct ceph_auth_handshake *auth);
747     int (*verify_authorizer_reply)(struct ceph_auth_client *ac,
748     struct ceph_authorizer *a, size_t len);
749     void (*destroy_authorizer)(struct ceph_auth_client *ac,
750     @@ -75,6 +78,8 @@ struct ceph_auth_client {
751     u64 global_id; /* our unique id in system */
752     const struct ceph_crypto_key *key; /* our secret key */
753     unsigned want_keys; /* which services we want */
754     +
755     + struct mutex mutex;
756     };
757    
758     extern struct ceph_auth_client *ceph_auth_init(const char *name,
759     @@ -94,5 +99,18 @@ extern int ceph_build_auth(struct ceph_auth_client *ac,
760     void *msg_buf, size_t msg_len);
761    
762     extern int ceph_auth_is_authenticated(struct ceph_auth_client *ac);
763     +extern int ceph_auth_create_authorizer(struct ceph_auth_client *ac,
764     + int peer_type,
765     + struct ceph_auth_handshake *auth);
766     +extern void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac,
767     + struct ceph_authorizer *a);
768     +extern int ceph_auth_update_authorizer(struct ceph_auth_client *ac,
769     + int peer_type,
770     + struct ceph_auth_handshake *a);
771     +extern int ceph_auth_verify_authorizer_reply(struct ceph_auth_client *ac,
772     + struct ceph_authorizer *a,
773     + size_t len);
774     +extern void ceph_auth_invalidate_authorizer(struct ceph_auth_client *ac,
775     + int peer_type);
776    
777     #endif
778     diff --git a/include/linux/cpu.h b/include/linux/cpu.h
779     index 78ed62f..25fd741 100644
780     --- a/include/linux/cpu.h
781     +++ b/include/linux/cpu.h
782     @@ -177,6 +177,8 @@ extern struct bus_type cpu_subsys;
783    
784     extern void get_online_cpus(void);
785     extern void put_online_cpus(void);
786     +extern void cpu_hotplug_disable(void);
787     +extern void cpu_hotplug_enable(void);
788     #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri)
789     #define register_hotcpu_notifier(nb) register_cpu_notifier(nb)
790     #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb)
791     @@ -199,6 +201,8 @@ static inline void cpu_hotplug_driver_unlock(void)
792    
793     #define get_online_cpus() do { } while (0)
794     #define put_online_cpus() do { } while (0)
795     +#define cpu_hotplug_disable() do { } while (0)
796     +#define cpu_hotplug_enable() do { } while (0)
797     #define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0)
798     /* These aren't inline functions due to a GCC bug. */
799     #define register_hotcpu_notifier(nb) ({ (void)(nb); 0; })
800     diff --git a/include/linux/swapops.h b/include/linux/swapops.h
801     index 47ead51..c5fd30d 100644
802     --- a/include/linux/swapops.h
803     +++ b/include/linux/swapops.h
804     @@ -137,6 +137,7 @@ static inline void make_migration_entry_read(swp_entry_t *entry)
805    
806     extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
807     unsigned long address);
808     +extern void migration_entry_wait_huge(struct mm_struct *mm, pte_t *pte);
809     #else
810    
811     #define make_migration_entry(page, write) swp_entry(0, 0)
812     @@ -148,6 +149,8 @@ static inline int is_migration_entry(swp_entry_t swp)
813     static inline void make_migration_entry_read(swp_entry_t *entryp) { }
814     static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
815     unsigned long address) { }
816     +static inline void migration_entry_wait_huge(struct mm_struct *mm,
817     + pte_t *pte) { }
818     static inline int is_write_migration_entry(swp_entry_t entry)
819     {
820     return 0;
821     diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
822     index db1c5df..4886c11 100644
823     --- a/include/net/bluetooth/hci_core.h
824     +++ b/include/net/bluetooth/hci_core.h
825     @@ -976,6 +976,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event);
826     int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
827     int mgmt_index_added(struct hci_dev *hdev);
828     int mgmt_index_removed(struct hci_dev *hdev);
829     +int mgmt_set_powered_failed(struct hci_dev *hdev, int err);
830     int mgmt_powered(struct hci_dev *hdev, u8 powered);
831     int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable);
832     int mgmt_connectable(struct hci_dev *hdev, u8 connectable);
833     diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h
834     index ebfd91f..8098e87 100644
835     --- a/include/net/bluetooth/mgmt.h
836     +++ b/include/net/bluetooth/mgmt.h
837     @@ -42,6 +42,7 @@
838     #define MGMT_STATUS_NOT_POWERED 0x0f
839     #define MGMT_STATUS_CANCELLED 0x10
840     #define MGMT_STATUS_INVALID_INDEX 0x11
841     +#define MGMT_STATUS_RFKILLED 0x12
842    
843     struct mgmt_hdr {
844     __le16 opcode;
845     diff --git a/kernel/cpu.c b/kernel/cpu.c
846     index 2060c6e..26feaa9 100644
847     --- a/kernel/cpu.c
848     +++ b/kernel/cpu.c
849     @@ -124,6 +124,27 @@ static void cpu_hotplug_done(void)
850     mutex_unlock(&cpu_hotplug.lock);
851     }
852    
853     +/*
854     + * Wait for currently running CPU hotplug operations to complete (if any) and
855     + * disable future CPU hotplug (from sysfs). The 'cpu_add_remove_lock' protects
856     + * the 'cpu_hotplug_disabled' flag. The same lock is also acquired by the
857     + * hotplug path before performing hotplug operations. So acquiring that lock
858     + * guarantees mutual exclusion from any currently running hotplug operations.
859     + */
860     +void cpu_hotplug_disable(void)
861     +{
862     + cpu_maps_update_begin();
863     + cpu_hotplug_disabled = 1;
864     + cpu_maps_update_done();
865     +}
866     +
867     +void cpu_hotplug_enable(void)
868     +{
869     + cpu_maps_update_begin();
870     + cpu_hotplug_disabled = 0;
871     + cpu_maps_update_done();
872     +}
873     +
874     #else /* #if CONFIG_HOTPLUG_CPU */
875     static void cpu_hotplug_begin(void) {}
876     static void cpu_hotplug_done(void) {}
877     @@ -479,36 +500,6 @@ static int __init alloc_frozen_cpus(void)
878     core_initcall(alloc_frozen_cpus);
879    
880     /*
881     - * Prevent regular CPU hotplug from racing with the freezer, by disabling CPU
882     - * hotplug when tasks are about to be frozen. Also, don't allow the freezer
883     - * to continue until any currently running CPU hotplug operation gets
884     - * completed.
885     - * To modify the 'cpu_hotplug_disabled' flag, we need to acquire the
886     - * 'cpu_add_remove_lock'. And this same lock is also taken by the regular
887     - * CPU hotplug path and released only after it is complete. Thus, we
888     - * (and hence the freezer) will block here until any currently running CPU
889     - * hotplug operation gets completed.
890     - */
891     -void cpu_hotplug_disable_before_freeze(void)
892     -{
893     - cpu_maps_update_begin();
894     - cpu_hotplug_disabled = 1;
895     - cpu_maps_update_done();
896     -}
897     -
898     -
899     -/*
900     - * When tasks have been thawed, re-enable regular CPU hotplug (which had been
901     - * disabled while beginning to freeze tasks).
902     - */
903     -void cpu_hotplug_enable_after_thaw(void)
904     -{
905     - cpu_maps_update_begin();
906     - cpu_hotplug_disabled = 0;
907     - cpu_maps_update_done();
908     -}
909     -
910     -/*
911     * When callbacks for CPU hotplug notifications are being executed, we must
912     * ensure that the state of the system with respect to the tasks being frozen
913     * or not, as reported by the notification, remains unchanged *throughout the
914     @@ -527,12 +518,12 @@ cpu_hotplug_pm_callback(struct notifier_block *nb,
915    
916     case PM_SUSPEND_PREPARE:
917     case PM_HIBERNATION_PREPARE:
918     - cpu_hotplug_disable_before_freeze();
919     + cpu_hotplug_disable();
920     break;
921    
922     case PM_POST_SUSPEND:
923     case PM_POST_HIBERNATION:
924     - cpu_hotplug_enable_after_thaw();
925     + cpu_hotplug_enable();
926     break;
927    
928     default:
929     diff --git a/kernel/sys.c b/kernel/sys.c
930     index 6a74b83..3449d26 100644
931     --- a/kernel/sys.c
932     +++ b/kernel/sys.c
933     @@ -353,6 +353,29 @@ int unregister_reboot_notifier(struct notifier_block *nb)
934     }
935     EXPORT_SYMBOL(unregister_reboot_notifier);
936    
937     +/* Add backwards compatibility for stable trees. */
938     +#ifndef PF_NO_SETAFFINITY
939     +#define PF_NO_SETAFFINITY PF_THREAD_BOUND
940     +#endif
941     +
942     +static void migrate_to_reboot_cpu(void)
943     +{
944     + /* The boot cpu is always logical cpu 0 */
945     + int cpu = 0;
946     +
947     + cpu_hotplug_disable();
948     +
949     + /* Make certain the cpu I'm about to reboot on is online */
950     + if (!cpu_online(cpu))
951     + cpu = cpumask_first(cpu_online_mask);
952     +
953     + /* Prevent races with other tasks migrating this task */
954     + current->flags |= PF_NO_SETAFFINITY;
955     +
956     + /* Make certain I only run on the appropriate processor */
957     + set_cpus_allowed_ptr(current, cpumask_of(cpu));
958     +}
959     +
960     /**
961     * kernel_restart - reboot the system
962     * @cmd: pointer to buffer containing command to execute for restart
963     @@ -364,7 +387,7 @@ EXPORT_SYMBOL(unregister_reboot_notifier);
964     void kernel_restart(char *cmd)
965     {
966     kernel_restart_prepare(cmd);
967     - disable_nonboot_cpus();
968     + migrate_to_reboot_cpu();
969     syscore_shutdown();
970     if (!cmd)
971     printk(KERN_EMERG "Restarting system.\n");
972     @@ -391,7 +414,7 @@ static void kernel_shutdown_prepare(enum system_states state)
973     void kernel_halt(void)
974     {
975     kernel_shutdown_prepare(SYSTEM_HALT);
976     - disable_nonboot_cpus();
977     + migrate_to_reboot_cpu();
978     syscore_shutdown();
979     printk(KERN_EMERG "System halted.\n");
980     kmsg_dump(KMSG_DUMP_HALT);
981     @@ -410,7 +433,7 @@ void kernel_power_off(void)
982     kernel_shutdown_prepare(SYSTEM_POWER_OFF);
983     if (pm_power_off_prepare)
984     pm_power_off_prepare();
985     - disable_nonboot_cpus();
986     + migrate_to_reboot_cpu();
987     syscore_shutdown();
988     printk(KERN_EMERG "Power down.\n");
989     kmsg_dump(KMSG_DUMP_POWEROFF);
990     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
991     index 69b21bb..a692439 100644
992     --- a/mm/hugetlb.c
993     +++ b/mm/hugetlb.c
994     @@ -2768,7 +2768,7 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
995     if (ptep) {
996     entry = huge_ptep_get(ptep);
997     if (unlikely(is_hugetlb_entry_migration(entry))) {
998     - migration_entry_wait(mm, (pmd_t *)ptep, address);
999     + migration_entry_wait_huge(mm, ptep);
1000     return 0;
1001     } else if (unlikely(is_hugetlb_entry_hwpoisoned(entry)))
1002     return VM_FAULT_HWPOISON_LARGE |
1003     diff --git a/mm/migrate.c b/mm/migrate.c
1004     index 37cd07b..5f588b1 100644
1005     --- a/mm/migrate.c
1006     +++ b/mm/migrate.c
1007     @@ -180,15 +180,14 @@ static void remove_migration_ptes(struct page *old, struct page *new)
1008     * get to the page and wait until migration is finished.
1009     * When we return from this function the fault will be retried.
1010     */
1011     -void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
1012     - unsigned long address)
1013     +static void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
1014     + spinlock_t *ptl)
1015     {
1016     - pte_t *ptep, pte;
1017     - spinlock_t *ptl;
1018     + pte_t pte;
1019     swp_entry_t entry;
1020     struct page *page;
1021    
1022     - ptep = pte_offset_map_lock(mm, pmd, address, &ptl);
1023     + spin_lock(ptl);
1024     pte = *ptep;
1025     if (!is_swap_pte(pte))
1026     goto out;
1027     @@ -216,6 +215,20 @@ out:
1028     pte_unmap_unlock(ptep, ptl);
1029     }
1030    
1031     +void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
1032     + unsigned long address)
1033     +{
1034     + spinlock_t *ptl = pte_lockptr(mm, pmd);
1035     + pte_t *ptep = pte_offset_map(pmd, address);
1036     + __migration_entry_wait(mm, ptep, ptl);
1037     +}
1038     +
1039     +void migration_entry_wait_huge(struct mm_struct *mm, pte_t *pte)
1040     +{
1041     + spinlock_t *ptl = &(mm)->page_table_lock;
1042     + __migration_entry_wait(mm, pte, ptl);
1043     +}
1044     +
1045     #ifdef CONFIG_BLOCK
1046     /* Returns true if all buffers are successfully locked */
1047     static bool buffer_migrate_lock_buffers(struct buffer_head *head,
1048     diff --git a/mm/swap_state.c b/mm/swap_state.c
1049     index 4c5ff7f..1fa9220 100644
1050     --- a/mm/swap_state.c
1051     +++ b/mm/swap_state.c
1052     @@ -313,8 +313,24 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
1053     * Swap entry may have been freed since our caller observed it.
1054     */
1055     err = swapcache_prepare(entry);
1056     - if (err == -EEXIST) { /* seems racy */
1057     + if (err == -EEXIST) {
1058     radix_tree_preload_end();
1059     + /*
1060     + * We might race against get_swap_page() and stumble
1061     + * across a SWAP_HAS_CACHE swap_map entry whose page
1062     + * has not been brought into the swapcache yet, while
1063     + * the other end is scheduled away waiting on discard
1064     + * I/O completion at scan_swap_map().
1065     + *
1066     + * In order to avoid turning this transitory state
1067     + * into a permanent loop around this -EEXIST case
1068     + * if !CONFIG_PREEMPT and the I/O completion happens
1069     + * to be waiting on the CPU waitqueue where we are now
1070     + * busy looping, we just conditionally invoke the
1071     + * scheduler here, if there are some more important
1072     + * tasks to run.
1073     + */
1074     + cond_resched();
1075     continue;
1076     }
1077     if (err) { /* swp entry is obsolete ? */
1078     diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
1079     index 13b6c28..9197ae7 100644
1080     --- a/net/bluetooth/hci_core.c
1081     +++ b/net/bluetooth/hci_core.c
1082     @@ -1120,11 +1120,15 @@ EXPORT_SYMBOL(hci_free_dev);
1083     static void hci_power_on(struct work_struct *work)
1084     {
1085     struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
1086     + int err;
1087    
1088     BT_DBG("%s", hdev->name);
1089    
1090     - if (hci_dev_open(hdev->id) < 0)
1091     + err = hci_dev_open(hdev->id);
1092     + if (err < 0) {
1093     + mgmt_set_powered_failed(hdev, err);
1094     return;
1095     + }
1096    
1097     if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1098     schedule_delayed_work(&hdev->power_off,
1099     diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
1100     index 8f3d9dc..9f2f206 100644
1101     --- a/net/bluetooth/mgmt.c
1102     +++ b/net/bluetooth/mgmt.c
1103     @@ -2833,6 +2833,27 @@ int mgmt_powered(struct hci_dev *hdev, u8 powered)
1104     return err;
1105     }
1106    
1107     +int mgmt_set_powered_failed(struct hci_dev *hdev, int err)
1108     +{
1109     + struct pending_cmd *cmd;
1110     + u8 status;
1111     +
1112     + cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev);
1113     + if (!cmd)
1114     + return -ENOENT;
1115     +
1116     + if (err == -ERFKILL)
1117     + status = MGMT_STATUS_RFKILLED;
1118     + else
1119     + status = MGMT_STATUS_FAILED;
1120     +
1121     + err = cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status);
1122     +
1123     + mgmt_pending_remove(cmd);
1124     +
1125     + return err;
1126     +}
1127     +
1128     int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable)
1129     {
1130     struct cmd_lookup match = { NULL, hdev };
1131     diff --git a/net/ceph/auth.c b/net/ceph/auth.c
1132     index b4bf4ac..6b923bc 100644
1133     --- a/net/ceph/auth.c
1134     +++ b/net/ceph/auth.c
1135     @@ -47,6 +47,7 @@ struct ceph_auth_client *ceph_auth_init(const char *name, const struct ceph_cryp
1136     if (!ac)
1137     goto out;
1138    
1139     + mutex_init(&ac->mutex);
1140     ac->negotiating = true;
1141     if (name)
1142     ac->name = name;
1143     @@ -73,10 +74,12 @@ void ceph_auth_destroy(struct ceph_auth_client *ac)
1144     */
1145     void ceph_auth_reset(struct ceph_auth_client *ac)
1146     {
1147     + mutex_lock(&ac->mutex);
1148     dout("auth_reset %p\n", ac);
1149     if (ac->ops && !ac->negotiating)
1150     ac->ops->reset(ac);
1151     ac->negotiating = true;
1152     + mutex_unlock(&ac->mutex);
1153     }
1154    
1155     int ceph_entity_name_encode(const char *name, void **p, void *end)
1156     @@ -102,6 +105,7 @@ int ceph_auth_build_hello(struct ceph_auth_client *ac, void *buf, size_t len)
1157     int i, num;
1158     int ret;
1159    
1160     + mutex_lock(&ac->mutex);
1161     dout("auth_build_hello\n");
1162     monhdr->have_version = 0;
1163     monhdr->session_mon = cpu_to_le16(-1);
1164     @@ -122,15 +126,19 @@ int ceph_auth_build_hello(struct ceph_auth_client *ac, void *buf, size_t len)
1165    
1166     ret = ceph_entity_name_encode(ac->name, &p, end);
1167     if (ret < 0)
1168     - return ret;
1169     + goto out;
1170     ceph_decode_need(&p, end, sizeof(u64), bad);
1171     ceph_encode_64(&p, ac->global_id);
1172    
1173     ceph_encode_32(&lenp, p - lenp - sizeof(u32));
1174     - return p - buf;
1175     + ret = p - buf;
1176     +out:
1177     + mutex_unlock(&ac->mutex);
1178     + return ret;
1179    
1180     bad:
1181     - return -ERANGE;
1182     + ret = -ERANGE;
1183     + goto out;
1184     }
1185    
1186     static int ceph_build_auth_request(struct ceph_auth_client *ac,
1187     @@ -151,11 +159,13 @@ static int ceph_build_auth_request(struct ceph_auth_client *ac,
1188     if (ret < 0) {
1189     pr_err("error %d building auth method %s request\n", ret,
1190     ac->ops->name);
1191     - return ret;
1192     + goto out;
1193     }
1194     dout(" built request %d bytes\n", ret);
1195     ceph_encode_32(&p, ret);
1196     - return p + ret - msg_buf;
1197     + ret = p + ret - msg_buf;
1198     +out:
1199     + return ret;
1200     }
1201    
1202     /*
1203     @@ -176,6 +186,7 @@ int ceph_handle_auth_reply(struct ceph_auth_client *ac,
1204     int result_msg_len;
1205     int ret = -EINVAL;
1206    
1207     + mutex_lock(&ac->mutex);
1208     dout("handle_auth_reply %p %p\n", p, end);
1209     ceph_decode_need(&p, end, sizeof(u32) * 3 + sizeof(u64), bad);
1210     protocol = ceph_decode_32(&p);
1211     @@ -227,33 +238,103 @@ int ceph_handle_auth_reply(struct ceph_auth_client *ac,
1212    
1213     ret = ac->ops->handle_reply(ac, result, payload, payload_end);
1214     if (ret == -EAGAIN) {
1215     - return ceph_build_auth_request(ac, reply_buf, reply_len);
1216     + ret = ceph_build_auth_request(ac, reply_buf, reply_len);
1217     } else if (ret) {
1218     pr_err("auth method '%s' error %d\n", ac->ops->name, ret);
1219     - return ret;
1220     }
1221     - return 0;
1222    
1223     -bad:
1224     - pr_err("failed to decode auth msg\n");
1225     out:
1226     + mutex_unlock(&ac->mutex);
1227     return ret;
1228     +
1229     +bad:
1230     + pr_err("failed to decode auth msg\n");
1231     + ret = -EINVAL;
1232     + goto out;
1233     }
1234    
1235     int ceph_build_auth(struct ceph_auth_client *ac,
1236     void *msg_buf, size_t msg_len)
1237     {
1238     + int ret = 0;
1239     +
1240     + mutex_lock(&ac->mutex);
1241     if (!ac->protocol)
1242     - return ceph_auth_build_hello(ac, msg_buf, msg_len);
1243     - BUG_ON(!ac->ops);
1244     - if (ac->ops->should_authenticate(ac))
1245     - return ceph_build_auth_request(ac, msg_buf, msg_len);
1246     - return 0;
1247     + ret = ceph_auth_build_hello(ac, msg_buf, msg_len);
1248     + else if (ac->ops->should_authenticate(ac))
1249     + ret = ceph_build_auth_request(ac, msg_buf, msg_len);
1250     + mutex_unlock(&ac->mutex);
1251     + return ret;
1252     }
1253    
1254     int ceph_auth_is_authenticated(struct ceph_auth_client *ac)
1255     {
1256     - if (!ac->ops)
1257     - return 0;
1258     - return ac->ops->is_authenticated(ac);
1259     + int ret = 0;
1260     +
1261     + mutex_lock(&ac->mutex);
1262     + if (ac->ops)
1263     + ret = ac->ops->is_authenticated(ac);
1264     + mutex_unlock(&ac->mutex);
1265     + return ret;
1266     +}
1267     +EXPORT_SYMBOL(ceph_auth_is_authenticated);
1268     +
1269     +int ceph_auth_create_authorizer(struct ceph_auth_client *ac,
1270     + int peer_type,
1271     + struct ceph_auth_handshake *auth)
1272     +{
1273     + int ret = 0;
1274     +
1275     + mutex_lock(&ac->mutex);
1276     + if (ac->ops && ac->ops->create_authorizer)
1277     + ret = ac->ops->create_authorizer(ac, peer_type, auth);
1278     + mutex_unlock(&ac->mutex);
1279     + return ret;
1280     +}
1281     +EXPORT_SYMBOL(ceph_auth_create_authorizer);
1282     +
1283     +void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac,
1284     + struct ceph_authorizer *a)
1285     +{
1286     + mutex_lock(&ac->mutex);
1287     + if (ac->ops && ac->ops->destroy_authorizer)
1288     + ac->ops->destroy_authorizer(ac, a);
1289     + mutex_unlock(&ac->mutex);
1290     +}
1291     +EXPORT_SYMBOL(ceph_auth_destroy_authorizer);
1292     +
1293     +int ceph_auth_update_authorizer(struct ceph_auth_client *ac,
1294     + int peer_type,
1295     + struct ceph_auth_handshake *a)
1296     +{
1297     + int ret = 0;
1298     +
1299     + mutex_lock(&ac->mutex);
1300     + if (ac->ops && ac->ops->update_authorizer)
1301     + ret = ac->ops->update_authorizer(ac, peer_type, a);
1302     + mutex_unlock(&ac->mutex);
1303     + return ret;
1304     +}
1305     +EXPORT_SYMBOL(ceph_auth_update_authorizer);
1306     +
1307     +int ceph_auth_verify_authorizer_reply(struct ceph_auth_client *ac,
1308     + struct ceph_authorizer *a, size_t len)
1309     +{
1310     + int ret = 0;
1311     +
1312     + mutex_lock(&ac->mutex);
1313     + if (ac->ops && ac->ops->verify_authorizer_reply)
1314     + ret = ac->ops->verify_authorizer_reply(ac, a, len);
1315     + mutex_unlock(&ac->mutex);
1316     + return ret;
1317     +}
1318     +EXPORT_SYMBOL(ceph_auth_verify_authorizer_reply);
1319     +
1320     +void ceph_auth_invalidate_authorizer(struct ceph_auth_client *ac, int peer_type)
1321     +{
1322     + mutex_lock(&ac->mutex);
1323     + if (ac->ops && ac->ops->invalidate_authorizer)
1324     + ac->ops->invalidate_authorizer(ac, peer_type);
1325     + mutex_unlock(&ac->mutex);
1326     }
1327     +EXPORT_SYMBOL(ceph_auth_invalidate_authorizer);
1328     diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
1329     index a16bf14..96238ba 100644
1330     --- a/net/ceph/auth_x.c
1331     +++ b/net/ceph/auth_x.c
1332     @@ -298,6 +298,7 @@ static int ceph_x_build_authorizer(struct ceph_auth_client *ac,
1333     return -ENOMEM;
1334     }
1335     au->service = th->service;
1336     + au->secret_id = th->secret_id;
1337    
1338     msg_a = au->buf->vec.iov_base;
1339     msg_a->struct_v = 1;
1340     @@ -555,6 +556,26 @@ static int ceph_x_create_authorizer(
1341     return 0;
1342     }
1343    
1344     +static int ceph_x_update_authorizer(
1345     + struct ceph_auth_client *ac, int peer_type,
1346     + struct ceph_auth_handshake *auth)
1347     +{
1348     + struct ceph_x_authorizer *au;
1349     + struct ceph_x_ticket_handler *th;
1350     +
1351     + th = get_ticket_handler(ac, peer_type);
1352     + if (IS_ERR(th))
1353     + return PTR_ERR(th);
1354     +
1355     + au = (struct ceph_x_authorizer *)auth->authorizer;
1356     + if (au->secret_id < th->secret_id) {
1357     + dout("ceph_x_update_authorizer service %u secret %llu < %llu\n",
1358     + au->service, au->secret_id, th->secret_id);
1359     + return ceph_x_build_authorizer(ac, th, au);
1360     + }
1361     + return 0;
1362     +}
1363     +
1364     static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac,
1365     struct ceph_authorizer *a, size_t len)
1366     {
1367     @@ -630,7 +651,7 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
1368    
1369     th = get_ticket_handler(ac, peer_type);
1370     if (!IS_ERR(th))
1371     - remove_ticket_handler(ac, th);
1372     + memset(&th->validity, 0, sizeof(th->validity));
1373     }
1374    
1375    
1376     @@ -641,6 +662,7 @@ static const struct ceph_auth_client_ops ceph_x_ops = {
1377     .build_request = ceph_x_build_request,
1378     .handle_reply = ceph_x_handle_reply,
1379     .create_authorizer = ceph_x_create_authorizer,
1380     + .update_authorizer = ceph_x_update_authorizer,
1381     .verify_authorizer_reply = ceph_x_verify_authorizer_reply,
1382     .destroy_authorizer = ceph_x_destroy_authorizer,
1383     .invalidate_authorizer = ceph_x_invalidate_authorizer,
1384     diff --git a/net/ceph/auth_x.h b/net/ceph/auth_x.h
1385     index e02da7a..5c2ad4e 100644
1386     --- a/net/ceph/auth_x.h
1387     +++ b/net/ceph/auth_x.h
1388     @@ -29,6 +29,7 @@ struct ceph_x_authorizer {
1389     struct ceph_buffer *buf;
1390     unsigned service;
1391     u64 nonce;
1392     + u64 secret_id;
1393     char reply_buf[128]; /* big enough for encrypted blob */
1394     };
1395    
1396     diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
1397     index ba1037c..7f703ae 100644
1398     --- a/net/ceph/messenger.c
1399     +++ b/net/ceph/messenger.c
1400     @@ -1542,7 +1542,6 @@ static int process_connect(struct ceph_connection *con)
1401     con->error_msg = "connect authorization failure";
1402     return -1;
1403     }
1404     - con->auth_retry = 1;
1405     con_out_kvec_reset(con);
1406     ret = prepare_write_connect(con);
1407     if (ret < 0)
1408     @@ -1627,7 +1626,7 @@ static int process_connect(struct ceph_connection *con)
1409    
1410     WARN_ON(con->state != CON_STATE_NEGOTIATING);
1411     con->state = CON_STATE_OPEN;
1412     -
1413     + con->auth_retry = 0; /* we authenticated; clear flag */
1414     con->peer_global_seq = le32_to_cpu(con->in_reply.global_seq);
1415     con->connect_seq++;
1416     con->peer_features = server_feat;
1417     diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
1418     index 89a6409..6765da3 100644
1419     --- a/net/ceph/mon_client.c
1420     +++ b/net/ceph/mon_client.c
1421     @@ -737,7 +737,7 @@ static void delayed_work(struct work_struct *work)
1422    
1423     __validate_auth(monc);
1424    
1425     - if (monc->auth->ops->is_authenticated(monc->auth))
1426     + if (ceph_auth_is_authenticated(monc->auth))
1427     __send_subscribe(monc);
1428     }
1429     __schedule_delayed(monc);
1430     @@ -893,8 +893,7 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
1431    
1432     mutex_lock(&monc->mutex);
1433     had_debugfs_info = have_debugfs_info(monc);
1434     - if (monc->auth->ops)
1435     - was_auth = monc->auth->ops->is_authenticated(monc->auth);
1436     + was_auth = ceph_auth_is_authenticated(monc->auth);
1437     monc->pending_auth = 0;
1438     ret = ceph_handle_auth_reply(monc->auth, msg->front.iov_base,
1439     msg->front.iov_len,
1440     @@ -905,7 +904,7 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
1441     wake_up_all(&monc->client->auth_wq);
1442     } else if (ret > 0) {
1443     __send_prepared_auth_request(monc, ret);
1444     - } else if (!was_auth && monc->auth->ops->is_authenticated(monc->auth)) {
1445     + } else if (!was_auth && ceph_auth_is_authenticated(monc->auth)) {
1446     dout("authenticated, starting session\n");
1447    
1448     monc->client->msgr.inst.name.type = CEPH_ENTITY_TYPE_CLIENT;
1449     diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
1450     index b16dfa2..8e3aa4d 100644
1451     --- a/net/ceph/osd_client.c
1452     +++ b/net/ceph/osd_client.c
1453     @@ -671,8 +671,7 @@ static void put_osd(struct ceph_osd *osd)
1454     if (atomic_dec_and_test(&osd->o_ref) && osd->o_auth.authorizer) {
1455     struct ceph_auth_client *ac = osd->o_osdc->client->monc.auth;
1456    
1457     - if (ac->ops && ac->ops->destroy_authorizer)
1458     - ac->ops->destroy_authorizer(ac, osd->o_auth.authorizer);
1459     + ceph_auth_destroy_authorizer(ac, osd->o_auth.authorizer);
1460     kfree(osd);
1461     }
1462     }
1463     @@ -1337,13 +1336,13 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
1464     __register_request(osdc, req);
1465     __unregister_linger_request(osdc, req);
1466     }
1467     + reset_changed_osds(osdc);
1468     mutex_unlock(&osdc->request_mutex);
1469    
1470     if (needmap) {
1471     dout("%d requests for down osds, need new map\n", needmap);
1472     ceph_monc_request_next_osdmap(&osdc->client->monc);
1473     }
1474     - reset_changed_osds(osdc);
1475     }
1476    
1477    
1478     @@ -2127,13 +2126,17 @@ static struct ceph_auth_handshake *get_authorizer(struct ceph_connection *con,
1479     struct ceph_auth_handshake *auth = &o->o_auth;
1480    
1481     if (force_new && auth->authorizer) {
1482     - if (ac->ops && ac->ops->destroy_authorizer)
1483     - ac->ops->destroy_authorizer(ac, auth->authorizer);
1484     + ceph_auth_destroy_authorizer(ac, auth->authorizer);
1485     auth->authorizer = NULL;
1486     }
1487     - if (!auth->authorizer && ac->ops && ac->ops->create_authorizer) {
1488     - int ret = ac->ops->create_authorizer(ac, CEPH_ENTITY_TYPE_OSD,
1489     - auth);
1490     + if (!auth->authorizer) {
1491     + int ret = ceph_auth_create_authorizer(ac, CEPH_ENTITY_TYPE_OSD,
1492     + auth);
1493     + if (ret)
1494     + return ERR_PTR(ret);
1495     + } else {
1496     + int ret = ceph_auth_update_authorizer(ac, CEPH_ENTITY_TYPE_OSD,
1497     + auth);
1498     if (ret)
1499     return ERR_PTR(ret);
1500     }
1501     @@ -2149,11 +2152,7 @@ static int verify_authorizer_reply(struct ceph_connection *con, int len)
1502     struct ceph_osd_client *osdc = o->o_osdc;
1503     struct ceph_auth_client *ac = osdc->client->monc.auth;
1504    
1505     - /*
1506     - * XXX If ac->ops or ac->ops->verify_authorizer_reply is null,
1507     - * XXX which do we do: succeed or fail?
1508     - */
1509     - return ac->ops->verify_authorizer_reply(ac, o->o_auth.authorizer, len);
1510     + return ceph_auth_verify_authorizer_reply(ac, o->o_auth.authorizer, len);
1511     }
1512    
1513     static int invalidate_authorizer(struct ceph_connection *con)
1514     @@ -2162,9 +2161,7 @@ static int invalidate_authorizer(struct ceph_connection *con)
1515     struct ceph_osd_client *osdc = o->o_osdc;
1516     struct ceph_auth_client *ac = osdc->client->monc.auth;
1517    
1518     - if (ac->ops && ac->ops->invalidate_authorizer)
1519     - ac->ops->invalidate_authorizer(ac, CEPH_ENTITY_TYPE_OSD);
1520     -
1521     + ceph_auth_invalidate_authorizer(ac, CEPH_ENTITY_TYPE_OSD);
1522     return ceph_monc_validate_auth(&osdc->client->monc);
1523     }
1524