From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org,
alan@lxorguk.ukuu.org.uk, Jeff Layton <jlayton@redhat.com>,
Jian Li <jiali@redhat.com>, Steve French <smfrench@gmail.com>
Subject: [ 061/108] cifs: on CONFIG_HIGHMEM machines, limit the rsize/wsize to the kmap space
Date: Mon, 23 Jul 2012 02:07:52 +0100 [thread overview]
Message-ID: <20120723010700.740777909@decadent.org.uk> (raw)
In-Reply-To: <20120723010651.408577075@decadent.org.uk>
3.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Layton <jlayton@redhat.com>
commit 3ae629d98bd5ed77585a878566f04f310adbc591 upstream.
We currently rely on being able to kmap all of the pages in an async
read or write request. If you're on a machine that has CONFIG_HIGHMEM
set then that kmap space is limited, sometimes to as low as 512 slots.
With 512 slots, we can only support up to a 2M r/wsize, and that's
assuming that we can get our greedy little hands on all of them. There
are other users however, so it's possible we'll end up stuck with a
size that large.
Since we can't handle a rsize or wsize larger than that currently, cap
those options at the number of kmap slots we have. We could consider
capping it even lower, but we currently default to a max of 1M. Might as
well allow those luddites on 32 bit arches enough rope to hang
themselves.
A more robust fix would be to teach the send and receive routines how
to contend with an array of pages so we don't need to marshal up a kvec
array at all. That's a fairly significant overhaul though, so we'll need
this limit in place until that's ready.
Reported-by: Jian Li <jiali@redhat.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <smfrench@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
fs/cifs/connect.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 0ae86dd..94b7788 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -3445,6 +3445,18 @@ void cifs_setup_cifs_sb(struct smb_vol *pvolume_info,
#define CIFS_DEFAULT_NON_POSIX_RSIZE (60 * 1024)
#define CIFS_DEFAULT_NON_POSIX_WSIZE (65536)
+/*
+ * On hosts with high memory, we can't currently support wsize/rsize that are
+ * larger than we can kmap at once. Cap the rsize/wsize at
+ * LAST_PKMAP * PAGE_SIZE. We'll never be able to fill a read or write request
+ * larger than that anyway.
+ */
+#ifdef CONFIG_HIGHMEM
+#define CIFS_KMAP_SIZE_LIMIT (LAST_PKMAP * PAGE_CACHE_SIZE)
+#else /* CONFIG_HIGHMEM */
+#define CIFS_KMAP_SIZE_LIMIT (1<<24)
+#endif /* CONFIG_HIGHMEM */
+
static unsigned int
cifs_negotiate_wsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
{
@@ -3475,6 +3487,9 @@ cifs_negotiate_wsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
wsize = min_t(unsigned int, wsize,
server->maxBuf - sizeof(WRITE_REQ) + 4);
+ /* limit to the amount that we can kmap at once */
+ wsize = min_t(unsigned int, wsize, CIFS_KMAP_SIZE_LIMIT);
+
/* hard limit of CIFS_MAX_WSIZE */
wsize = min_t(unsigned int, wsize, CIFS_MAX_WSIZE);
@@ -3516,6 +3531,9 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
if (!(server->capabilities & CAP_LARGE_READ_X))
rsize = min_t(unsigned int, CIFSMaxBufSize, rsize);
+ /* limit to the amount that we can kmap at once */
+ rsize = min_t(unsigned int, rsize, CIFS_KMAP_SIZE_LIMIT);
+
/* hard limit of CIFS_MAX_RSIZE */
rsize = min_t(unsigned int, rsize, CIFS_MAX_RSIZE);
next prev parent reply other threads:[~2012-07-23 1:54 UTC|newest]
Thread overview: 116+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-23 1:06 [ 000/108] 3.2.24-stable review Ben Hutchings
2012-07-23 1:06 ` [ 001/108] samsung-laptop: make the dmi check less strict Ben Hutchings
2012-07-23 1:06 ` [ 002/108] raid5: delayed stripe fix Ben Hutchings
2012-07-23 1:06 ` [ 003/108] tcp: drop SYN+FIN messages Ben Hutchings
2012-07-23 1:06 ` [ 004/108] tg3: Apply short DMA frag workaround to 5906 Ben Hutchings
2012-07-23 1:06 ` [ 005/108] rtl8187: ->brightness_set can not sleep Ben Hutchings
2012-07-23 1:06 ` [ 006/108] net/wireless: ipw2x00: add supported cipher suites to wiphy initialization Ben Hutchings
2012-07-23 1:06 ` [ 007/108] drm/i915: do not enable RC6p on Sandy Bridge Ben Hutchings
2012-07-23 1:06 ` [ 008/108] drm/i915: fix operator precedence when enabling RC6p Ben Hutchings
2012-07-23 1:07 ` [ 009/108] kbuild: do not check for ancient modutils tools Ben Hutchings
2012-07-23 1:07 ` [ 010/108] brcmsmac: "INTERMEDIATE but not AMPDU" only when tracing Ben Hutchings
2012-07-23 1:07 ` [ 011/108] NFSv4: Rate limit the state manager for lock reclaim warning messages Ben Hutchings
2012-07-23 1:07 ` [ 012/108] ext4: Report max_batch_time option correctly Ben Hutchings
2012-07-23 1:07 ` [ 013/108] hugepages: fix use after free bug in "quota" handling Ben Hutchings
2012-07-23 1:07 ` [ 014/108] NFSv4: Reduce the footprint of the idmapper Ben Hutchings
2012-07-23 1:07 ` [ 015/108] NFSv4: Further reduce " Ben Hutchings
2012-07-23 1:07 ` [ 016/108] macvtap: zerocopy: fix offset calculation when building skb Ben Hutchings
2012-07-23 1:07 ` [ 017/108] macvtap: zerocopy: fix truesize underestimation Ben Hutchings
2012-07-23 1:07 ` [ 018/108] macvtap: zerocopy: put page when fail to get all requested user pages Ben Hutchings
2012-07-23 1:07 ` [ 019/108] macvtap: zerocopy: set SKBTX_DEV_ZEROCOPY only when skb is built successfully Ben Hutchings
2012-07-23 1:07 ` [ 020/108] macvtap: zerocopy: validate vectors before building skb Ben Hutchings
2012-07-23 1:07 ` [ 021/108] KVM: Fix buffer overflow in kvm_set_irq() Ben Hutchings
2012-07-23 1:07 ` [ 022/108] scsi: Silence unnecessary warnings about ioctl to partition Ben Hutchings
2012-07-23 7:31 ` Paolo Bonzini
2012-07-23 1:07 ` [ 023/108] epoll: clear the tfile_check_list on -ELOOP Ben Hutchings
2012-07-23 1:07 ` [ 024/108] iommu/amd: Fix missing iommu_shutdown initialization in passthrough mode Ben Hutchings
2012-07-23 1:07 ` [ 025/108] iommu/amd: Initialize dma_ops for hotplug and sriov devices Ben Hutchings
2012-07-23 1:07 ` [ 026/108] usb: Add support for root hub port status CAS Ben Hutchings
2012-07-23 1:07 ` [ 027/108] gpiolib: wm8994: Pay attention to the value set when enabling as output Ben Hutchings
2012-07-23 1:07 ` [ 028/108] sched/nohz: Rewrite and fix load-avg computation -- again Ben Hutchings
2012-07-24 14:06 ` Ben Hutchings
2012-07-26 21:25 ` Peter Zijlstra
2012-07-26 22:01 ` Ben Hutchings
2012-07-26 22:02 ` Peter Zijlstra
2012-07-23 1:07 ` [ 029/108] USB: option: add ZTE MF60 Ben Hutchings
2012-07-23 1:07 ` [ 030/108] USB: option: Add MEDIATEK product ids Ben Hutchings
2012-07-23 1:07 ` [ 031/108] USB: cdc-wdm: fix lockup on error in wdm_read Ben Hutchings
2012-07-23 1:07 ` [ 032/108] mtd: nandsim: dont open code a do_div helper Ben Hutchings
2012-07-23 1:07 ` [ 033/108] [media] dvb-core: Release semaphore on error path dvb_register_device() Ben Hutchings
2012-07-23 1:07 ` [ 034/108] hwspinlock/core: use global ID to register hwspinlocks on multiple devices Ben Hutchings
2012-07-23 1:07 ` [ 035/108] [SCSI] libsas: fix taskfile corruption in sas_ata_qc_fill_rtf Ben Hutchings
2012-07-23 1:07 ` [ 036/108] md/raid1: fix use-after-free bug in RAID1 data-check code Ben Hutchings
2012-07-23 1:07 ` [ 037/108] PCI: EHCI: fix crash during suspend on ASUS computers Ben Hutchings
2012-07-23 1:07 ` [ 038/108] memory hotplug: fix invalid memory access caused by stale kswapd pointer Ben Hutchings
2012-07-23 1:07 ` [ 039/108] ocfs2: fix NULL pointer dereference in __ocfs2_change_file_space() Ben Hutchings
2012-07-23 1:07 ` [ 040/108] mm, thp: abort compaction if migration page cannot be charged to memcg Ben Hutchings
2012-07-23 1:07 ` [ 041/108] drivers/rtc/rtc-mxc.c: fix irq enabled interrupts warning Ben Hutchings
2012-07-23 1:07 ` [ 042/108] fs: ramfs: file-nommu: add SetPageUptodate() Ben Hutchings
2012-07-23 1:07 ` [ 043/108] cpufreq / ACPI: Fix not loading acpi-cpufreq driver regression Ben Hutchings
2012-07-23 1:07 ` [ 044/108] hwmon: (it87) Preserve configuration register bits on init Ben Hutchings
2012-07-23 1:07 ` [ 045/108] ARM: SAMSUNG: fix race in s3c_adc_start for ADC Ben Hutchings
2012-07-23 1:07 ` [ 046/108] block: fix infinite loop in __getblk_slow Ben Hutchings
2012-07-23 1:07 ` [ 047/108] Remove easily user-triggerable BUG from generic_setlease Ben Hutchings
2012-07-23 1:07 ` [ 048/108] NFC: Export nfc.h to userland Ben Hutchings
2012-07-23 1:07 ` [ 049/108] PM / Hibernate: Hibernate/thaw fixes/improvements Ben Hutchings
2012-07-23 1:07 ` [ 050/108] cfg80211: check iface combinations only when iface is running Ben Hutchings
2012-07-23 1:07 ` [ 051/108] intel_ips: blacklist HP ProBook laptops Ben Hutchings
2012-07-23 1:07 ` [ 052/108] atl1c: fix issue of transmit queue 0 timed out Ben Hutchings
2012-07-23 1:07 ` [ 053/108] rt2x00usb: fix indexes ordering on RX queue kick Ben Hutchings
2012-07-23 1:07 ` [ 054/108] iwlegacy: always monitor for stuck queues Ben Hutchings
2012-07-23 1:07 ` [ 055/108] iwlegacy: dont mess up the SCD when removing a key Ben Hutchings
2012-07-23 1:07 ` [ 056/108] e1000e: Correct link check logic for 82571 serdes Ben Hutchings
2012-07-23 1:07 ` [ 057/108] tcm_fc: Fix crash seen with aborts and large reads Ben Hutchings
2012-07-23 1:07 ` [ 058/108] fifo: Do not restart open() if it already found a partner Ben Hutchings
2012-07-23 1:07 ` [ 059/108] target: Clean up returning errors in PR handling code Ben Hutchings
2012-07-23 1:07 ` [ 060/108] target: Fix range calculation in WRITE SAME emulation when num blocks == 0 Ben Hutchings
2012-07-23 1:07 ` Ben Hutchings [this message]
2012-07-23 1:07 ` [ 062/108] cifs: always update the inode cache with the results from a FIND_* Ben Hutchings
2012-07-23 1:07 ` [ 063/108] mm: fix lost kswapd wakeup in kswapd_stop() Ben Hutchings
2012-07-23 1:07 ` [ 064/108] md: avoid crash when stopping md array races with closing other open fds Ben Hutchings
2012-07-23 1:07 ` [ 065/108] md/raid1: close some possible races on write errors during resync Ben Hutchings
2012-07-23 1:07 ` [ 066/108] MIPS: Properly align the .data..init_task section Ben Hutchings
2012-07-23 1:07 ` [ 067/108] UBIFS: fix a bug in empty space fix-up Ben Hutchings
2012-07-23 1:07 ` [ 068/108] ore: Fix NFS crash by supporting any unaligned RAID IO Ben Hutchings
2012-07-23 1:08 ` [ 069/108] ore: Remove support of partial IO request (NFS crash) Ben Hutchings
2012-07-23 1:08 ` [ 070/108] pnfs-obj: dont leak objio_state if ore_write/read fails Ben Hutchings
2012-07-23 1:08 ` [ 071/108] pnfs-obj: Fix __r4w_get_page when offset is beyond i_size Ben Hutchings
2012-07-23 1:08 ` [ 072/108] dm raid1: fix crash with mirror recovery and discard Ben Hutchings
2012-07-23 1:08 ` [ 073/108] dm raid1: set discard_zeroes_data_unsupported Ben Hutchings
2012-07-23 1:08 ` [ 074/108] ntp: Fix leap-second hrtimer livelock Ben Hutchings
2012-07-23 1:08 ` [ 075/108] ntp: Correct TAI offset during leap second Ben Hutchings
2012-07-23 1:08 ` [ 076/108] timekeeping: Fix CLOCK_MONOTONIC inconsistency during leapsecond Ben Hutchings
2012-07-23 1:08 ` [ 077/108] time: Move common updates to a function Ben Hutchings
2012-07-23 1:08 ` [ 078/108] hrtimer: Provide clock_was_set_delayed() Ben Hutchings
2012-07-23 1:08 ` [ 079/108] timekeeping: Fix leapsecond triggered load spike issue Ben Hutchings
2012-07-23 1:08 ` [ 080/108] timekeeping: Maintain ktime_t based offsets for hrtimers Ben Hutchings
2012-07-23 1:08 ` [ 081/108] hrtimers: Move lock held region in hrtimer_interrupt() Ben Hutchings
2012-07-23 1:08 ` [ 082/108] timekeeping: Provide hrtimer update function Ben Hutchings
2012-07-23 1:08 ` [ 083/108] hrtimer: Update hrtimer base offsets each hrtimer_interrupt Ben Hutchings
2012-07-23 1:08 ` [ 084/108] timekeeping: Add missing update call in timekeeping_resume() Ben Hutchings
2012-07-23 1:08 ` [ 085/108] powerpc: Fix wrong divisor in usecs_to_cputime Ben Hutchings
2012-07-23 1:08 ` [ 086/108] vhost: dont forget to schedule() Ben Hutchings
2012-07-23 1:08 ` [ 087/108] r8169: call netif_napi_del at errpaths and at driver unload Ben Hutchings
2012-07-23 1:08 ` [ 088/108] bnx2x: fix checksum validation Ben Hutchings
2012-07-23 1:08 ` [ 089/108] bnx2x: fix panic when TX ring is full Ben Hutchings
2012-07-23 1:08 ` [ 090/108] net: remove skb_orphan_try() Ben Hutchings
2012-07-23 1:08 ` [ 091/108] ACPI: Make acpi_skip_timer_override cover all source_irq==0 cases Ben Hutchings
2012-07-23 1:08 ` [ 092/108] ACPI: Remove one board specific WARN when ignoring timer overriding Ben Hutchings
2012-07-23 1:08 ` [ 093/108] ACPI: Add a quirk for "AMILO PRO V2030" to ignore the " Ben Hutchings
2012-07-23 1:08 ` [ 094/108] ACPI, x86: fix Dell M6600 ACPI reboot regression via DMI Ben Hutchings
2012-07-23 1:08 ` [ 095/108] ACPI sysfs.c strlen fix Ben Hutchings
2012-07-23 1:08 ` [ 096/108] eCryptfs: Gracefully refuse miscdev file ops on inherited/passed files Ben Hutchings
2012-07-23 1:08 ` [ 097/108] eCryptfs: Fix lockdep warning in miscdev operations Ben Hutchings
2012-07-23 1:08 ` [ 098/108] eCryptfs: Properly check for O_RDONLY flag before doing privileged open Ben Hutchings
2012-07-23 1:08 ` [ 099/108] ACPI / PM: Make acpi_pm_device_sleep_state() follow the specification Ben Hutchings
2012-07-23 1:08 ` [ 100/108] ipheth: add support for iPad Ben Hutchings
2012-07-23 1:08 ` [ 101/108] stmmac: Fix for nfs hang on multiple reboot Ben Hutchings
2012-07-23 1:08 ` [ 102/108] bonding: debugfs and network namespaces are incompatible Ben Hutchings
2012-07-23 1:08 ` [ 103/108] bonding: Manage /proc/net/bonding/ entries from the netdev events Ben Hutchings
2012-07-23 1:08 ` [ 104/108] Input: bcm5974 - Add support for 2012 MacBook Pro Retina Ben Hutchings
2012-07-23 1:08 ` [ 105/108] Input: xpad - handle all variations of Mad Catz Beat Pad Ben Hutchings
2012-07-23 1:08 ` [ 106/108] Input: xpad - add signature for Razer Onza Tournament Edition Ben Hutchings
2012-07-23 1:08 ` [ 107/108] Input: xpad - add Andamiro Pump It Up pad Ben Hutchings
2012-07-23 1:08 ` [ 108/108] HID: add support for 2012 MacBook Pro Retina Ben Hutchings
2012-07-23 1:51 ` [ 000/108] 3.2.24-stable review Ben Hutchings
[not found] ` <CAD9gYJKwrcovmGcDJoCMAzQF=zfT2jnk9ghctejWAX1R5ifB=w@mail.gmail.com>
2012-07-30 1:37 ` Ben Hutchings
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120723010700.740777909@decadent.org.uk \
--to=ben@decadent.org.uk \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=jiali@redhat.com \
--cc=jlayton@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=smfrench@gmail.com \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®