Commit graph

594405 commits

Author SHA1 Message Date
Eric Dumazet
be9994817a ipv6: fix typo in fib6_net_exit()
[ Upstream commit 32a805baf0fb70b6dbedefcd7249ac7f580f9e3b ]

IPv6 FIB should use FIB6_TABLE_HASHSZ, not FIB_TABLE_HASHSZ.

Fixes: ba1cc08d9488 ("ipv6: fix memory leak with multiple tables during netns destruction")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:12 +02:00
Sabrina Dubroca
70479eafe3 ipv6: fix memory leak with multiple tables during netns destruction
[ Upstream commit ba1cc08d9488c94cb8d94f545305688b72a2a300 ]

fib6_net_exit only frees the main and local tables. If another table was
created with fib6_alloc_table, we leak it when the netns is destroyed.

Fix this in the same way ip_fib_net_exit cleans up tables, by walking
through the whole hashtable of fib6_table's. We can get rid of the
special cases for local and main, since they're also part of the
hashtable.

Reproducer:
    ip netns add x
    ip -net x -6 rule add from 6003:1::/64 table 100
    ip netns del x

Reported-by: Jianlin Shi <jishi@redhat.com>
Fixes: 58f09b78b7 ("[NETNS][IPV6] ip6_fib - make it per network namespace")
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:11 +02:00
Claudiu Manoil
9b5e5d8a00 gianfar: Fix Tx flow control deactivation
[ Upstream commit 5d621672bc1a1e5090c1ac5432a18c79e0e13e03 ]

The wrong register is checked for the Tx flow control bit,
it should have been maccfg1 not maccfg2.
This went unnoticed for so long probably because the impact is
hardly visible, not to mention the tangled code from adjust_link().
First, link flow control (i.e. handling of Rx/Tx link level pause frames)
is disabled by default (needs to be enabled via 'ethtool -A').
Secondly, maccfg2 always returns 0 for tx_flow_oldval (except for a few
old boards), which results in Tx flow control remaining always on
once activated.

Fixes: 45b679c9a3 ("gianfar: Implement PAUSE frame generation support")
Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:11 +02:00
Jesper Dangaard Brouer
5f529e0d78 Revert "net: fix percpu memory leaks"
[ Upstream commit 5a63643e583b6a9789d7a225ae076fb4e603991c ]

This reverts commit 1d6119baf0.

After reverting commit 6d7b857d54 ("net: use lib/percpu_counter API
for fragmentation mem accounting") then here is no need for this
fix-up patch.  As percpu_counter is no longer used, it cannot
memory leak it any-longer.

Fixes: 6d7b857d54 ("net: use lib/percpu_counter API for fragmentation mem accounting")
Fixes: 1d6119baf0 ("net: fix percpu memory leaks")
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:11 +02:00
Jesper Dangaard Brouer
40bc5355e1 Revert "net: use lib/percpu_counter API for fragmentation mem accounting"
[ Upstream commit fb452a1aa3fd4034d7999e309c5466ff2d7005aa ]

This reverts commit 6d7b857d54.

There is a bug in fragmentation codes use of the percpu_counter API,
that can cause issues on systems with many CPUs.

The frag_mem_limit() just reads the global counter (fbc->count),
without considering other CPUs can have upto batch size (130K) that
haven't been subtracted yet.  Due to the 3MBytes lower thresh limit,
this become dangerous at >=24 CPUs (3*1024*1024/130000=24).

The correct API usage would be to use __percpu_counter_compare() which
does the right thing, and takes into account the number of (online)
CPUs and batch size, to account for this and call __percpu_counter_sum()
when needed.

We choose to revert the use of the lib/percpu_counter API for frag
memory accounting for several reasons:

1) On systems with CPUs > 24, the heavier fully locked
   __percpu_counter_sum() is always invoked, which will be more
   expensive than the atomic_t that is reverted to.

Given systems with more than 24 CPUs are becoming common this doesn't
seem like a good option.  To mitigate this, the batch size could be
decreased and thresh be increased.

2) The add_frag_mem_limit+sub_frag_mem_limit pairs happen on the RX
   CPU, before SKBs are pushed into sockets on remote CPUs.  Given
   NICs can only hash on L2 part of the IP-header, the NIC-RXq's will
   likely be limited.  Thus, a fair chance that atomic add+dec happen
   on the same CPU.

Revert note that commit 1d6119baf0 ("net: fix percpu memory leaks")
removed init_frag_mem_limit() and instead use inet_frags_init_net().
After this revert, inet_frags_uninit_net() becomes empty.

Fixes: 6d7b857d54 ("net: use lib/percpu_counter API for fragmentation mem accounting")
Fixes: 1d6119baf0 ("net: fix percpu memory leaks")
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:11 +02:00
Wei Wang
611a98c8ec tcp: initialize rcv_mss to TCP_MIN_MSS instead of 0
[ Upstream commit 499350a5a6e7512d9ed369ed63a4244b6536f4f8 ]

When tcp_disconnect() is called, inet_csk_delack_init() sets
icsk->icsk_ack.rcv_mss to 0.
This could potentially cause tcp_recvmsg() => tcp_cleanup_rbuf() =>
__tcp_select_window() call path to have division by 0 issue.
So this patch initializes rcv_mss to TCP_MIN_MSS instead of 0.

Reported-by: Andrey Konovalov  <andreyknvl@google.com>
Signed-off-by: Wei Wang <weiwan@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:11 +02:00
Florian Fainelli
081be8c9ef Revert "net: phy: Correctly process PHY_HALTED in phy_stop_machine()"
[ Upstream commit ebc8254aeae34226d0bc8fda309fd9790d4dccfe ]

This reverts commit 7ad813f208533cebfcc32d3d7474dc1677d1b09a ("net: phy:
Correctly process PHY_HALTED in phy_stop_machine()") because it is
creating the possibility for a NULL pointer dereference.

David Daney provide the following call trace and diagram of events:

When ndo_stop() is called we call:

 phy_disconnect()
    +---> phy_stop_interrupts() implies: phydev->irq = PHY_POLL;
    +---> phy_stop_machine()
    |      +---> phy_state_machine()
    |              +----> queue_delayed_work(): Work queued.
    +--->phy_detach() implies: phydev->attached_dev = NULL;

Now at a later time the queued work does:

 phy_state_machine()
    +---->netif_carrier_off(phydev->attached_dev): Oh no! It is NULL:

 CPU 12 Unable to handle kernel paging request at virtual address
0000000000000048, epc == ffffffff80de37ec, ra == ffffffff80c7c
Oops[#1]:
CPU: 12 PID: 1502 Comm: kworker/12:1 Not tainted 4.9.43-Cavium-Octeon+ #1
Workqueue: events_power_efficient phy_state_machine
task: 80000004021ed100 task.stack: 8000000409d70000
$ 0   : 0000000000000000 ffffffff84720060 0000000000000048 0000000000000004
$ 4   : 0000000000000000 0000000000000001 0000000000000004 0000000000000000
$ 8   : 0000000000000000 0000000000000000 00000000ffff98f3 0000000000000000
$12   : 8000000409d73fe0 0000000000009c00 ffffffff846547c8 000000000000af3b
$16   : 80000004096bab68 80000004096babd0 0000000000000000 80000004096ba800
$20   : 0000000000000000 0000000000000000 ffffffff81090000 0000000000000008
$24   : 0000000000000061 ffffffff808637b0
$28   : 8000000409d70000 8000000409d73cf0 80000000271bd300 ffffffff80c7804c
Hi    : 000000000000002a
Lo    : 000000000000003f
epc   : ffffffff80de37ec netif_carrier_off+0xc/0x58
ra    : ffffffff80c7804c phy_state_machine+0x48c/0x4f8
Status: 14009ce3        KX SX UX KERNEL EXL IE
Cause : 00800008 (ExcCode 02)
BadVA : 0000000000000048
PrId  : 000d9501 (Cavium Octeon III)
Modules linked in:
Process kworker/12:1 (pid: 1502, threadinfo=8000000409d70000,
task=80000004021ed100, tls=0000000000000000)
Stack : 8000000409a54000 80000004096bab68 80000000271bd300 80000000271c1e00
        0000000000000000 ffffffff808a1708 8000000409a54000 80000000271bd300
        80000000271bd320 8000000409a54030 ffffffff80ff0f00 0000000000000001
        ffffffff81090000 ffffffff808a1ac0 8000000402182080 ffffffff84650000
        8000000402182080 ffffffff84650000 ffffffff80ff0000 8000000409a54000
        ffffffff808a1970 0000000000000000 80000004099e8000 8000000402099240
        0000000000000000 ffffffff808a8598 0000000000000000 8000000408eeeb00
        8000000409a54000 00000000810a1d00 0000000000000000 8000000409d73de8
        8000000409d73de8 0000000000000088 000000000c009c00 8000000409d73e08
        8000000409d73e08 8000000402182080 ffffffff808a84d0 8000000402182080
        ...
Call Trace:
[<ffffffff80de37ec>] netif_carrier_off+0xc/0x58
[<ffffffff80c7804c>] phy_state_machine+0x48c/0x4f8
[<ffffffff808a1708>] process_one_work+0x158/0x368
[<ffffffff808a1ac0>] worker_thread+0x150/0x4c0
[<ffffffff808a8598>] kthread+0xc8/0xe0
[<ffffffff808617f0>] ret_from_kernel_thread+0x14/0x1c

The original motivation for this change originated from Marc Gonzales
indicating that his network driver did not have its adjust_link callback
executing with phydev->link = 0 while he was expecting it.

PHYLIB has never made any such guarantees ever because phy_stop() merely just
tells the workqueue to move into PHY_HALTED state which will happen
asynchronously.

Reported-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reported-by: David Daney <ddaney.cavm@gmail.com>
Fixes: 7ad813f20853 ("net: phy: Correctly process PHY_HALTED in phy_stop_machine()")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:11 +02:00
Arnd Bergmann
6d8c8fd1c4 qlge: avoid memcpy buffer overflow
[ Upstream commit e58f95831e7468d25eb6e41f234842ecfe6f014f ]

gcc-8.0.0 (snapshot) points out that we copy a variable-length string
into a fixed length field using memcpy() with the destination length,
and that ends up copying whatever follows the string:

    inlined from 'ql_core_dump' at drivers/net/ethernet/qlogic/qlge/qlge_dbg.c:1106:2:
drivers/net/ethernet/qlogic/qlge/qlge_dbg.c:708:2: error: 'memcpy' reading 15 bytes from a region of size 14 [-Werror=stringop-overflow=]
  memcpy(seg_hdr->description, desc, (sizeof(seg_hdr->description)) - 1);

Changing it to use strncpy() will instead zero-pad the destination,
which seems to be the right thing to do here.

The bug is probably harmless, but it seems like a good idea to address
it in stable kernels as well, if only for the purpose of building with
gcc-8 without warnings.

Fixes: a61f802613 ("qlge: Add ethtool register dump function.")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:11 +02:00
Wei Wang
354d36b746 ipv6: fix sparse warning on rt6i_node
[ Upstream commit 4e587ea71bf924f7dac621f1351653bd41e446cb ]

Commit c5cff8561d2d adds rcu grace period before freeing fib6_node. This
generates a new sparse warning on rt->rt6i_node related code:
  net/ipv6/route.c:1394:30: error: incompatible types in comparison
  expression (different address spaces)
  ./include/net/ip6_fib.h:187:14: error: incompatible types in comparison
  expression (different address spaces)

This commit adds "__rcu" tag for rt6i_node and makes sure corresponding
rcu API is used for it.
After this fix, sparse no longer generates the above warning.

Fixes: c5cff8561d2d ("ipv6: add rcu grace period before freeing fib6_node")
Signed-off-by: Wei Wang <weiwan@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:10 +02:00
Wei Wang
e51bf99be7 ipv6: add rcu grace period before freeing fib6_node
[ Upstream commit c5cff8561d2d0006e972bd114afd51f082fee77c ]

We currently keep rt->rt6i_node pointing to the fib6_node for the route.
And some functions make use of this pointer to dereference the fib6_node
from rt structure, e.g. rt6_check(). However, as there is neither
refcount nor rcu taken when dereferencing rt->rt6i_node, it could
potentially cause crashes as rt->rt6i_node could be set to NULL by other
CPUs when doing a route deletion.
This patch introduces an rcu grace period before freeing fib6_node and
makes sure the functions that dereference it takes rcu_read_lock().

Note: there is no "Fixes" tag because this bug was there in a very
early stage.

Signed-off-by: Wei Wang <weiwan@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:10 +02:00
Stefano Brivio
6eb7ae1223 ipv6: accept 64k - 1 packet length in ip6_find_1stfragopt()
[ Upstream commit 3de33e1ba0506723ab25734e098cf280ecc34756 ]

A packet length of exactly IPV6_MAXPLEN is allowed, we should
refuse parsing options only if the size is 64KiB or more.

While at it, remove one extra variable and one assignment which
were also introduced by the commit that introduced the size
check. Checking the sum 'offset + len' and only later adding
'len' to 'offset' doesn't provide any advantage over directly
summing to 'offset' and checking it.

Fixes: 6399f1fae4ec ("ipv6: avoid overflow of offset in ip6_find_1stfragopt")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-09-27 11:00:10 +02:00
Vatsal Bucha
59996159bf ASoC: codecs: Fix pop noise in HPH plus LO4 concurrent usecase
Pop sound happens after start playback on HPH when
ultrasound playback on LO4 is enabled.
This is because CnP is sequence dependent and enabling
design blocks in specified order is causing minimum CnP.

CRs-Fixed: 2100346
Change-Id: If10f9013cc1a2aa61fe9c719d3190f2df0b00950
Signed-off-by: Vatsal Bucha <vbucha@codeaurora.org>
2017-09-27 14:04:56 +05:30
Archana Sriram
8662023651 msm: kgsl: Fix calculation of size in _load_regfile
During firmware load, there could be data over reads
due to calculation of lm_size and lm_sequence from
block and block_size. Added bounds checking to prevent
this and improved the size calculation.

CRs-Fixed: 2107981
Change-Id: Ib4283951b0d6c8fb699af1f85e657981ad4c0318
Signed-off-by: Archana Sriram <apsrir@codeaurora.org>
2017-09-26 23:12:04 -07:00
Ajay Agarwal
30dd41caee ARM: dts: msm: Allow pm_suspend in host mode for msm8996 ADP
This change adds device tree flag to allow system suspend
on automotive platform with USB devices connected that do
not support runtime suspend.

Change-Id: I3ddda5052c866e16c46e5a46255acc28ab6f9363
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2017-09-27 11:23:58 +05:30
Vatsal Bucha
5cca96ffa7 ARM: dts: msm: Add AFE clock version for primary auxpcm
Kernel crash is observed when trying to access component
because wcd_dsp_ctl is deregistered. This is due to failure in
soundcard registration. The failure occurs due to msm
unable to set aanc version. Update afe clock version for
primary auxpcm resolves the issue.

CRs-Fixed: 2113187
Change-Id: I8bb3c9a6946f1c1af88a62d7ee154b6e7ff904f4
Signed-off-by: Vatsal Bucha <vbucha@codeaurora.org>
2017-09-27 11:16:42 +05:30
Ajay Agarwal
c97f5a36d5 usb: dwc3-msm: Allow PM suspend in host mode irrespective of runtimePM
DWC3 driver uses wakeup_source and allows pm_suspend only after
entering low power mode as part of runtime suspend. This prevents
PM suspend in host mode if connected device's driver doesn't
support runtime or selective suspend.
Add support in driver where user can specify using dtsi attribute
to not use wakeup source in host mode. It will allow system to enter
deep sleep or pm_suspend irrespective of runtime PM state of XHCI.
On high level below are the changes in default behavior:
 -Do not use wakeup_source for DWC3 when operating in host mode.
 -For host mode, devices will suspend upon PM suspend and resumed
  after PM resume.

Change-Id: Ia1d450e6dd99e094e48caf9723a355b7870b54dd
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2017-09-27 11:13:37 +05:30
Linux Build Service Account
22b400edb3 Merge "scsi: ufshcd: Flush exception event before suspend" 2017-09-26 21:50:09 -07:00
Linux Build Service Account
ac9cb81445 Merge "mdss: mdp: Validate null commit for secure display" 2017-09-26 21:49:58 -07:00
Linux Build Service Account
7498a748e3 Merge "msm: kgsl: Don't read stale crashdumper data" 2017-09-26 21:49:57 -07:00
Linux Build Service Account
a77b833858 Merge "ath10k: Fix unwanted probe requests sent during p2p scan" 2017-09-26 21:49:55 -07:00
Linux Build Service Account
6696828627 Merge "ARM: dts: msm: disable secondary adv7533 on msm8996 lite board" 2017-09-26 21:49:53 -07:00
Linux Build Service Account
8abd424c59 Merge "battery: reduce SMB only for taper stepper" 2017-09-26 21:49:51 -07:00
Linux Build Service Account
07c0eb6c3b Merge "drm/msm: add HDCP_VERSION property for connector" 2017-09-26 21:49:50 -07:00
Linux Build Service Account
151d9db74b Merge "qseecom: check return value of __qseecom_process_reentrancy" 2017-09-26 21:49:49 -07:00
Linux Build Service Account
c31369585f Merge "ARM: dts: msm: Add laser LED support on MSM8998 MTP" 2017-09-26 21:49:48 -07:00
Ankit Jain
ce81b24589 mmc: core: add mmc flush detect work.
Block device should be available before mounting of
root device. In some cases block device is not available
at the time of root device mounting because mmc detect
work is not completed by that time which is causing mount
failure. To fix this, flush mmc detect work after device
probe completion.

Change-Id: I785a1e01a691652cfdb5a82acee2475e23fe3766
Signed-off-by: Ankit Jain <jankit@codeaurora.org>
2017-09-26 21:35:05 -07:00
Fenglin Wu
8b42673d20 pwm: pwm-qpnp: Fix uninitialized variable use
Fix uninitialized variable use which would cause unexpected return
value.

CRs-Fixed: 2070945
Change-Id: I874ec28904149061246fb4c2b24444a4c33e0116
Signed-off-by: Fenglin Wu <fenglinw@codeaurora.org>
2017-09-27 12:31:08 +08:00
Sriharsha Allenki
8b53c3c3d6 platform: msm: Fix USB device does not enumerate in SS mode
The max speed for the USB device is high speed. So
the device is always enumerated in high speed indpendent
of the connection. Fix this by setting the EXTCON_USB_SPEED
to 1 which in turn sets the max speed as super speed.

CRs-Fixed: 2108100
Change-Id: I8f313cc3ee015a1340ab78650e17334ca85ddd27
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
2017-09-26 12:09:55 -07:00
Sriharsha Allenki
3ef7befadd platform: msm: Check USB ID state on probe
If the device is booted up with OTG cable connected,
the device does not switch to host mode. The trigger
is lost because the irqs are enabled at a later time.
Fix this by checking the ID state during probe.

CRs-Fixed: 2106351
Change-Id: I742d0839832219e757348e102252f97d95a8335b
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
2017-09-26 12:09:44 -07:00
Rakesh Pillai
75ab52cc23 ath10k: Fix unwanted probe requests sent during p2p scan
During p2p find unwanted probe requests with broadcast SSID is
sent along with the probe requests with p2p wildcard SSID.

The addition of survey report flag in scan flags initiates an
active scan along with the p2p scan, due to which we see probe
requests with broadcast SSID along with the probe requests having
p2p wildcard SSID.

Fix the flags sent during scan command for p2p scan.

CRs-Fixed: 2093805
Change-Id: I7c2a1502ef86bc5151e8c86f4a89f073e75a925d
Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
2017-09-25 23:42:39 -07:00
Rakesh Pillai
8e65f8799f ath10k: Fix p2p_listen for wcn3990
p2p_listen not working due to inncorrect scan flags
passed to firmware.

Disable the fitlering out of probe request flag in
scan flag during remain on channel in p2p listen.

CRs-Fixed: 2095628
Change-Id: Ie39222c487160ba4001771fc8e1c6f6f161dfb65
Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
2017-09-25 23:41:37 -07:00
Linux Build Service Account
b56464c7cb Merge "drm/msm: fix zero device count HDCP repeater test cases" 2017-09-25 20:52:54 -07:00
Linux Build Service Account
d9918fae67 Merge "ath10k: skip sending default IE in scan request added by firmware" 2017-09-25 20:52:52 -07:00
Linux Build Service Account
f6a77ac2d8 Merge "battery: wait 500mS between steps for taper stepper" 2017-09-25 20:52:51 -07:00
Linux Build Service Account
46c0ea4e45 Merge "smb-lib: allow reading vbus without presence" 2017-09-25 20:52:51 -07:00
Abhinav Kumar
c6535223b7 drm/msm: add HDCP_VERSION property for connector
Expose a HDCP_VERSION property for the connector.
This property is used by the userspace to decide the
proper handling of secure streams based on HDCP version
of the sink.

This also guarantees that sinks do not receive
secure content higher than their capability.

Change-Id: Ia4ada2f26a5cde088b24c8792c10c9f9097602b1
Signed-off-by: Abhinav Kumar <abhinavk@codeaurora.org>
2017-09-25 19:42:30 -07:00
Abhijeet Dharmapurikar
eea89ab36f step-chg-jeita: run only when charging
Currently the code ends up holding a wakelock even while discharging.
There is no need to hold wakelock or handle stepcharging/jeita
situations while discharging.

Change-Id: I0edfd16cef88ec45b0f0ebb80533b62c6e775116
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
2017-09-25 18:12:29 -07:00
Yunlei He
02dcb93a1d f2fs: fix a missing size change in f2fs_setattr
commit c0ed4405a99ec9be2a0f062eaafc002d8d26c99f upstream.

This patch fix a missing size change in f2fs_setattr

Signed-off-by: Yunlei He <heyunlei@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:04 -07:00
Jaegeuk Kim
be4b849217 f2fs: fix to access nullified flush_cmd_control pointer
commit 5eba8c5d1fb3af28b2073ba5228d4998196c1bcc upstream.

f2fs_sync_file()             remount_ro
 - f2fs_readonly
                               - destroy_flush_cmd_control
 - f2fs_issue_flush
   - no fcc pointer!

So, this patch doesn't free fcc in this case, but just stop its kernel thread
which sends flush commands.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:03 -07:00
Jaegeuk Kim
80ea4ddbb0 f2fs: free meta pages if sanity check for ckpt is failed
commit a2125ff7dd1ed3a2a53cdc1f8f9c9cec9cfaa7ab upstream.

This fixes missing freeing meta pages in the error case.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:02 -07:00
Jaegeuk Kim
5b80a5e2be f2fs: detect wrong layout
commit 2040fce83fe17763b07c97c1f691da2bb85e4135 upstream.

Previous mkfs.f2fs allows small partition inappropriately, so f2fs should detect
that as well.

Refer this in f2fs-tools.

mkfs.f2fs: detect small partition by overprovision ratio and # of segments

Reported-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:02 -07:00
Jaegeuk Kim
d1c2c35718 f2fs: call sync_fs when f2fs is idle
commit f455c8a5f0a24090e99249eb7280012376adec2c upstream.

The sync_fs in f2fs_balance_fs_bg must avoid interrupting current user requests.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:01 -07:00
Jaegeuk Kim
036ed1b8eb Revert "f2fs: use percpu_counter for # of dirty pages in inode"
commit 204706c7accfabb67b97eef9f9a28361b6201199 upstream.

This reverts commit 1beba1b3a953107c3ff5448ab4e4297db4619c76.

The perpcu_counter doesn't provide atomicity in single core and consume more
DRAM. That incurs fs_mark test failure due to ENOMEM.

Cc: stable@vger.kernel.org # 4.7+
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:01 -07:00
Chao Yu
9a82dd23e4 f2fs: return AOP_WRITEPAGE_ACTIVATE for writepage
commit 0002b61bdaac732bcff364a18f5bd57c95def0a5 upstream.

We should use AOP_WRITEPAGE_ACTIVATE when we bypass writing pages.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Miao Xie <miaoxie@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:00 -07:00
Jaegeuk Kim
9f495d826b f2fs: do not activate auto_recovery for fallocated i_size
commit 26787236b36660baf4d136281d40b5bb33a570ec upstream.

If a file needs to keep its i_size by fallocate, we need to turn off auto
recovery during roll-forward recovery.

This will resolve the below scenario.

1. xfs_io -f /mnt/f2fs/file -c "pwrite 0 4096" -c "fsync"
2. xfs_io -f /mnt/f2fs/file -c "falloc -k 4096 4096" -c "fsync"
3. md5sum /mnt/f2fs/file;
4. godown /mnt/f2fs/
5. umount /mnt/f2fs/
6. mount -t f2fs /dev/sdx /mnt/f2fs
7. md5sum /mnt/f2fs/file

Reported-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:37:00 -07:00
Arnd Bergmann
55342cce61 f2fs: fix 32-bit build
commit 19c526515f6b998039d5d71fea879d255f173746 upstream.

The addition of multiple-device support broke CONFIG_BLK_DEV_ZONED
on 32-bit machines because of a 64-bit division:

fs/f2fs/f2fs.o: In function `__issue_discard_async':
extent_cache.c:(.text.__issue_discard_async+0xd4): undefined reference to `__aeabi_uldivmod'

Fortunately, bdev_zone_size() is guaranteed to return a power-of-two
number, so we can replace the % operator with a cheaper bit mask.

Fixes: 792b84b74b54 ("f2fs: support multiple devices")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:36:59 -07:00
Chao Yu
a680707a3f f2fs: fix incorrect free inode count in ->statfs
commit b08b12d2ddc85b977a0531470cf6a7158289aaaf upstream.

While calculating inode count that we can create at most in the left space,
we should consider space which data/node blocks occupied, since we create
data/node mixly in main area. So fix the wrong calculation in ->statfs.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:36:59 -07:00
Geliang Tang
23eb517756 f2fs: drop duplicate header timer.h
commit b4ceec29219e340178baa9c5f17bf97a42951cc8 upstream.

Drop duplicate header timer.h from segment.c.

Signed-off-by: Geliang Tang <geliangtang@gmail.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:36:58 -07:00
Jaegeuk Kim
7ce8cbc7fa f2fs: fix wrong AUTO_RECOVER condition
commit 97dd26ad834739d4e4ea35fd7ab5f92824de4cbb upstream.

If i_size is not aligned to the f2fs's block size, we should not skip inode
update during fsync.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:36:58 -07:00
Jaegeuk Kim
7ab9a6acd0 f2fs: do not recover i_size if it's valid
commit 3a3a5ead7b6d2c9a29f493791ba23f264052db34 upstream.

If i_size is already valid during roll_forward recovery, we should not update
it according to the block alignment.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-09-25 15:36:57 -07:00