Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
06f13aa
smb: client: split cached_fid bitfields to avoid shared-byte RMW races
hac-v Jan 27, 2026
c40f9a2
ksmbd: fix infinite loop caused by next_smb2_rcv_hdr_off reset in err…
namjaejeon Jan 24, 2026
c3d3ad1
smb: server: fix leak of active_num_conn in ksmbd_tcp_new_connection()
hac-v Feb 4, 2026
186b6f2
driver core: enforce device_lock for driver_match_device()
2045gemini Jan 13, 2026
95f1b1c
Bluetooth: btusb: Add USB ID 7392:e611 for Edimax EW-7611UXB
a5a5aa555oo Jan 29, 2026
290716e
crypto: octeontx - Fix length check to avoid truncation in ucode_load…
toblux Nov 26, 2025
fde02f0
crypto: omap - Allocate OMAP_CRYPTO_FORCE_COPY scatterlists correctly
kees Feb 7, 2026
f78bd7c
crypto: virtio - Add spinlock protection with virtqueue notification
bibo-mao Jan 13, 2026
454e262
crypto: virtio - Remove duplicated virtqueue_kick in virtio_crypto_sk…
bibo-mao Jan 13, 2026
ba26b5d
nilfs2: Fix potential block overflow that cause system hang
ea1davis Dec 19, 2025
3d944a9
wifi: rtw88: Fix alignment fault in rtw_core_enable_beacon()
Dec 23, 2025
71f445b
scsi: qla2xxx: Validate sp before freeing associated memory
Dec 10, 2025
a6673bf
scsi: qla2xxx: Allow recovery for tape devices
Dec 10, 2025
c77e169
scsi: qla2xxx: Delay module unload while fabric scan in progress
Dec 10, 2025
cebf78e
scsi: qla2xxx: Free sp in error path to fix system crash
Dec 10, 2025
5e653a0
scsi: qla2xxx: Query FW again before proceeding with login
Dec 10, 2025
9b1b53f
net: sfp: Fix quirk for Ubiquiti U-Fiber Instant SFP module
elkablo Jan 29, 2026
62a78dc
nfsd: don't ignore the return code of svc_proc_register()
jtlayton Feb 6, 2025
74dc36b
netfilter: nf_tables: missing objects with no memcg accounting
ummakynes Sep 18, 2024
25e794f
netfilter: nft_set_pipapo: prevent overflow in lookup table allocation
ummakynes Apr 22, 2025
9027fb8
vsock/test: verify socket options after setting them
Dec 3, 2024
cf6241f
spi: cadence-quadspi: Implement refcount to handle unbind during busy
kromli Aug 26, 2025
0074c7c
selftests: mptcp: pm: ensure unknown flags are ignored
matttbe Dec 5, 2025
2781e90
mptcp: fix race in mptcp_pm_nl_flush_addrs_doit()
edumazet Jan 24, 2026
7a7fd5c
gpio: omap: do not register driver in probe()
Jan 27, 2026
13d795b
Linux 6.6.125
gregkh Feb 16, 2026
bd23811
Revert "driver core: enforce device_lock for driver_match_device()"
gregkh Feb 16, 2026
3120bf1
Linux 6.6.126
gregkh Feb 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 6
PATCHLEVEL = 6
SUBLEVEL = 124
SUBLEVEL = 126
EXTRAVERSION =
NAME = Pinguïn Aangedreven

Expand Down
2 changes: 2 additions & 0 deletions drivers/bluetooth/btusb.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,8 @@ static const struct usb_device_id quirks_table[] = {
BTUSB_WIDEBAND_SPEECH },
{ USB_DEVICE(0x2001, 0x332a), .driver_info = BTUSB_REALTEK |
BTUSB_WIDEBAND_SPEECH },
{ USB_DEVICE(0x7392, 0xe611), .driver_info = BTUSB_REALTEK |
BTUSB_WIDEBAND_SPEECH },

/* Realtek 8852AE Bluetooth devices */
{ USB_DEVICE(0x0bda, 0x2852), .driver_info = BTUSB_REALTEK |
Expand Down
2 changes: 1 addition & 1 deletion drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1336,7 +1336,7 @@ static ssize_t ucode_load_store(struct device *dev,
int del_grp_idx = -1;
int ucode_idx = 0;

if (strlen(buf) > OTX_CPT_UCODE_NAME_LENGTH)
if (count >= OTX_CPT_UCODE_NAME_LENGTH)
return -EINVAL;

eng_grps = container_of(attr, struct otx_cpt_eng_grps, ucode_load_attr);
Expand Down
2 changes: 1 addition & 1 deletion drivers/crypto/omap-crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ static int omap_crypto_copy_sg_lists(int total, int bs,
struct scatterlist *tmp;

if (!(flags & OMAP_CRYPTO_FORCE_SINGLE_ENTRY)) {
new_sg = kmalloc_array(n, sizeof(*sg), GFP_KERNEL);
new_sg = kmalloc_array(n, sizeof(*new_sg), GFP_KERNEL);
if (!new_sg)
return -ENOMEM;

Expand Down
5 changes: 5 additions & 0 deletions drivers/crypto/virtio/virtio_crypto_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,20 @@ static void virtcrypto_done_task(unsigned long data)
struct data_queue *data_vq = (struct data_queue *)data;
struct virtqueue *vq = data_vq->vq;
struct virtio_crypto_request *vc_req;
unsigned long flags;
unsigned int len;

spin_lock_irqsave(&data_vq->lock, flags);
do {
virtqueue_disable_cb(vq);
while ((vc_req = virtqueue_get_buf(vq, &len)) != NULL) {
spin_unlock_irqrestore(&data_vq->lock, flags);
if (vc_req->alg_cb)
vc_req->alg_cb(vc_req, len);
spin_lock_irqsave(&data_vq->lock, flags);
}
} while (!virtqueue_enable_cb(vq));
spin_unlock_irqrestore(&data_vq->lock, flags);
}

static void virtcrypto_dataq_callback(struct virtqueue *vq)
Expand Down
2 changes: 0 additions & 2 deletions drivers/crypto/virtio/virtio_crypto_skcipher_algs.c
Original file line number Diff line number Diff line change
Expand Up @@ -550,8 +550,6 @@ int virtio_crypto_skcipher_crypt_req(
if (ret < 0)
return ret;

virtqueue_kick(data_vq->vq);

return 0;
}

Expand Down
22 changes: 18 additions & 4 deletions drivers/gpio/gpio-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -799,10 +799,13 @@ static struct platform_device omap_mpuio_device = {

static inline void omap_mpuio_init(struct gpio_bank *bank)
{
platform_set_drvdata(&omap_mpuio_device, bank);
static bool registered;

if (platform_driver_register(&omap_mpuio_driver) == 0)
(void) platform_device_register(&omap_mpuio_device);
platform_set_drvdata(&omap_mpuio_device, bank);
if (!registered) {
(void)platform_device_register(&omap_mpuio_device);
registered = true;
}
}

/*---------------------------------------------------------------------*/
Expand Down Expand Up @@ -1575,13 +1578,24 @@ static struct platform_driver omap_gpio_driver = {
*/
static int __init omap_gpio_drv_reg(void)
{
return platform_driver_register(&omap_gpio_driver);
int ret;

ret = platform_driver_register(&omap_mpuio_driver);
if (ret)
return ret;

ret = platform_driver_register(&omap_gpio_driver);
if (ret)
platform_driver_unregister(&omap_mpuio_driver);

return ret;
}
postcore_initcall(omap_gpio_drv_reg);

static void __exit omap_gpio_exit(void)
{
platform_driver_unregister(&omap_gpio_driver);
platform_driver_unregister(&omap_mpuio_driver);
}
module_exit(omap_gpio_exit);

Expand Down
2 changes: 2 additions & 0 deletions drivers/net/phy/sfp.c
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,8 @@ static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id *id,
*/
linkmode_zero(modes);
linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT, modes);
phy_interface_zero(interfaces);
__set_bit(PHY_INTERFACE_MODE_1000BASEX, interfaces);
}

#define SFP_QUIRK(_v, _p, _m, _f) \
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/realtek/rtw88/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2405,10 +2405,10 @@ void rtw_core_enable_beacon(struct rtw_dev *rtwdev, bool enable)

if (enable) {
rtw_write32_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION);
rtw_write32_clr(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);
rtw_write8_clr(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);
} else {
rtw_write32_clr(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION);
rtw_write32_set(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);
rtw_write8_set(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);
}
}

Expand Down
41 changes: 20 additions & 21 deletions drivers/scsi/qla2xxx/qla_gs.c
Original file line number Diff line number Diff line change
Expand Up @@ -3356,9 +3356,6 @@ void qla_fab_scan_finish(scsi_qla_host_t *vha, srb_t *sp)
atomic_read(&fcport->state) == FCS_ONLINE) ||
do_delete) {
if (fcport->loop_id != FC_NO_LOOP_ID) {
if (fcport->flags & FCF_FCP2_DEVICE)
continue;

ql_log(ql_log_warn, vha, 0x20f0,
"%s %d %8phC post del sess\n",
__func__, __LINE__,
Expand Down Expand Up @@ -3625,8 +3622,8 @@ int qla_fab_async_scan(scsi_qla_host_t *vha, srb_t *sp)
if (vha->scan.scan_flags & SF_SCANNING) {
spin_unlock_irqrestore(&vha->work_lock, flags);
ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0x2012,
"%s: scan active\n", __func__);
return rval;
"%s: scan active for sp:%p\n", __func__, sp);
goto done_free_sp;
}
vha->scan.scan_flags |= SF_SCANNING;
if (!sp)
Expand Down Expand Up @@ -3791,23 +3788,25 @@ int qla_fab_async_scan(scsi_qla_host_t *vha, srb_t *sp)
return rval;

done_free_sp:
if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev,
sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL;
}
if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev,
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL;
}
if (sp) {
if (sp->u.iocb_cmd.u.ctarg.req) {
dma_free_coherent(&vha->hw->pdev->dev,
sp->u.iocb_cmd.u.ctarg.req_allocated_size,
sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.req_dma);
sp->u.iocb_cmd.u.ctarg.req = NULL;
}
if (sp->u.iocb_cmd.u.ctarg.rsp) {
dma_free_coherent(&vha->hw->pdev->dev,
sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
sp->u.iocb_cmd.u.ctarg.rsp,
sp->u.iocb_cmd.u.ctarg.rsp_dma);
sp->u.iocb_cmd.u.ctarg.rsp = NULL;
}

/* ref: INIT */
kref_put(&sp->cmd_kref, qla2x00_sp_release);
/* ref: INIT */
kref_put(&sp->cmd_kref, qla2x00_sp_release);
}

spin_lock_irqsave(&vha->work_lock, flags);
vha->scan.scan_flags &= ~SF_SCANNING;
Expand Down
28 changes: 17 additions & 11 deletions drivers/scsi/qla2xxx/qla_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1859,15 +1859,6 @@ void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea)
case RSCN_PORT_ADDR:
fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1);
if (fcport) {
if (ql2xfc2target &&
fcport->flags & FCF_FCP2_DEVICE &&
atomic_read(&fcport->state) == FCS_ONLINE) {
ql_dbg(ql_dbg_disc, vha, 0x2115,
"Delaying session delete for FCP2 portid=%06x %8phC ",
fcport->d_id.b24, fcport->port_name);
return;
}

if (vha->hw->flags.edif_enabled && DBELL_ACTIVE(vha)) {
/*
* On ipsec start by remote port, Target port
Expand Down Expand Up @@ -2471,8 +2462,23 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
ea->sp->gen1, fcport->rscn_gen,
ea->data[0], ea->data[1], ea->iop[0], ea->iop[1]);

if ((fcport->fw_login_state == DSC_LS_PLOGI_PEND) ||
(fcport->fw_login_state == DSC_LS_PRLI_PEND)) {
if (fcport->fw_login_state == DSC_LS_PLOGI_PEND) {
ql_dbg(ql_dbg_disc, vha, 0x20ea,
"%s %d %8phC Remote is trying to login\n",
__func__, __LINE__, fcport->port_name);
/*
* If we get here, there is port thats already logged in,
* but it's state has not moved ahead. Recheck with FW on
* what state it is in and proceed ahead
*/
if (!N2N_TOPO(vha->hw)) {
fcport->fw_login_state = DSC_LS_PRLI_COMP;
qla24xx_post_gpdb_work(vha, fcport, 0);
}
return;
}

if (fcport->fw_login_state == DSC_LS_PRLI_PEND) {
ql_dbg(ql_dbg_disc, vha, 0x20ea,
"%s %d %8phC Remote is trying to login\n",
__func__, __LINE__, fcport->port_name);
Expand Down
19 changes: 17 additions & 2 deletions drivers/scsi/qla2xxx/qla_isr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1676,13 +1676,28 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)

/* Port logout */
fcport = qla2x00_find_fcport_by_loopid(vha, mb[1]);
if (!fcport)
if (!fcport) {
ql_dbg(ql_dbg_async, vha, 0x5011,
"Could not find fcport:%04x %04x %04x\n",
mb[1], mb[2], mb[3]);
break;
if (atomic_read(&fcport->state) != FCS_ONLINE)
}

if (atomic_read(&fcport->state) != FCS_ONLINE) {
ql_dbg(ql_dbg_async, vha, 0x5012,
"Port state is not online State:0x%x \n",

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing space before the newline escape character. The comment should have a space between "State:0x%x" and "\n" for consistency with standard formatting.

Copilot uses AI. Check for mistakes.
atomic_read(&fcport->state));
ql_dbg(ql_dbg_async, vha, 0x5012,
"Scheduling session for deletion \n");

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing space before the newline escape character. The comment should have a space between "deletion" and "\n" for consistency with standard formatting.

Suggested change
"Scheduling session for deletion \n");
"Scheduling session for deletion\n");

Copilot uses AI. Check for mistakes.
fcport->logout_on_delete = 0;
qlt_schedule_sess_for_deletion(fcport);
break;
}

ql_dbg(ql_dbg_async, vha, 0x508a,
"Marking port lost loopid=%04x portid=%06x.\n",
fcport->loop_id, fcport->d_id.b24);

if (qla_ini_mode_enabled(vha)) {
fcport->logout_on_delete = 0;
qlt_schedule_sess_for_deletion(fcport);
Expand Down
3 changes: 2 additions & 1 deletion drivers/scsi/qla2xxx/qla_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -1194,7 +1194,8 @@ qla2x00_wait_for_hba_ready(scsi_qla_host_t *vha)
while ((qla2x00_reset_active(vha) || ha->dpc_active ||
ha->flags.mbox_busy) ||
test_bit(FX00_RESET_RECOVERY, &vha->dpc_flags) ||
test_bit(FX00_TARGET_SCAN, &vha->dpc_flags)) {
test_bit(FX00_TARGET_SCAN, &vha->dpc_flags) ||
(vha->scan.scan_flags & SF_SCANNING)) {
if (test_bit(UNLOADING, &base_vha->dpc_flags))
break;
msleep(1000);
Expand Down
34 changes: 34 additions & 0 deletions drivers/spi/spi-cadence-quadspi.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ struct cqspi_st {
bool apb_ahb_hazard;

bool is_jh7110; /* Flag for StarFive JH7110 SoC */
refcount_t refcount;
refcount_t inflight_ops;
};

struct cqspi_driver_platdata {
Expand Down Expand Up @@ -705,6 +707,9 @@ static int cqspi_indirect_read_execute(struct cqspi_flash_pdata *f_pdata,
u8 *rxbuf_end = rxbuf + n_rx;
int ret = 0;

if (!refcount_read(&cqspi->refcount))
return -ENODEV;

writel(from_addr, reg_base + CQSPI_REG_INDIRECTRDSTARTADDR);
writel(remaining, reg_base + CQSPI_REG_INDIRECTRDBYTES);

Expand Down Expand Up @@ -1021,6 +1026,9 @@ static int cqspi_indirect_write_execute(struct cqspi_flash_pdata *f_pdata,
unsigned int write_bytes;
int ret;

if (!refcount_read(&cqspi->refcount))
return -ENODEV;

writel(to_addr, reg_base + CQSPI_REG_INDIRECTWRSTARTADDR);
writel(remaining, reg_base + CQSPI_REG_INDIRECTWRBYTES);

Expand Down Expand Up @@ -1412,11 +1420,29 @@ static int cqspi_mem_process(struct spi_mem *mem, const struct spi_mem_op *op)
static int cqspi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op)
{
int ret;
struct cqspi_st *cqspi = spi_controller_get_devdata(mem->spi->controller);

if (refcount_read(&cqspi->inflight_ops) == 0)
return -ENODEV;

if (!refcount_read(&cqspi->refcount))
return -EBUSY;

refcount_inc(&cqspi->inflight_ops);

if (!refcount_read(&cqspi->refcount)) {
if (refcount_read(&cqspi->inflight_ops))
refcount_dec(&cqspi->inflight_ops);
return -EBUSY;
}

ret = cqspi_mem_process(mem, op);
if (ret)
dev_err(&mem->spi->dev, "operation failed with %d\n", ret);

if (refcount_read(&cqspi->inflight_ops) > 1)
refcount_dec(&cqspi->inflight_ops);
Comment on lines +1443 to +1444

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The refcount_dec operation should be unconditional, not conditional on refcount > 1. Since refcount_inc was called unconditionally at line 1431, the decrement should also be unconditional. The current logic could cause the inflight_ops counter to become unbalanced, leading to resource leaks or preventing future operations. The check at line 1443 should be removed, and refcount_dec should always be called to match the increment.

Suggested change
if (refcount_read(&cqspi->inflight_ops) > 1)
refcount_dec(&cqspi->inflight_ops);
refcount_dec(&cqspi->inflight_ops);

Copilot uses AI. Check for mistakes.

@opsiff opsiff Feb 26, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

refcount_set(&cqspi->inflight_ops, 1); will be run in cqspi_probe, need to be keep it.


return ret;
}

Expand Down Expand Up @@ -1847,6 +1873,9 @@ static int cqspi_probe(struct platform_device *pdev)
}
}

refcount_set(&cqspi->refcount, 1);
refcount_set(&cqspi->inflight_ops, 1);

ret = devm_request_irq(dev, irq, cqspi_irq_handler, 0,
pdev->name, cqspi);
if (ret) {
Expand Down Expand Up @@ -1899,6 +1928,11 @@ static void cqspi_remove(struct platform_device *pdev)
{
struct cqspi_st *cqspi = platform_get_drvdata(pdev);

refcount_set(&cqspi->refcount, 0);

if (!refcount_dec_and_test(&cqspi->inflight_ops))

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The refcount_dec_and_test logic appears inverted. Since inflight_ops is initialized to 1 and decremented here, the function should wait for idle when the test returns true (i.e., when the counter reaches 0), not when it returns false. The current logic will wait when there are still operations in flight but not wait when the counter has reached zero, which is backwards.

Suggested change
if (!refcount_dec_and_test(&cqspi->inflight_ops))
if (refcount_dec_and_test(&cqspi->inflight_ops))

Copilot uses AI. Check for mistakes.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

refcount_set(&cqspi->inflight_ops, 1); will be run in cqspi_probe, and if not wait "when the counter has reached zero" is not probed, so not need to cqspi_wait_idle

cqspi_wait_idle(cqspi);

spi_unregister_controller(cqspi->host);
cqspi_controller_enable(cqspi, 0);

Expand Down
9 changes: 8 additions & 1 deletion fs/nfsd/nfsctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1526,17 +1526,24 @@ static __net_init int nfsd_net_init(struct net *net)
retval = nfsd_stat_counters_init(nn);
if (retval)
goto out_repcache_error;

memset(&nn->nfsd_svcstats, 0, sizeof(nn->nfsd_svcstats));
nn->nfsd_svcstats.program = &nfsd_program;
if (!nfsd_proc_stat_init(net)) {
retval = -ENOMEM;
goto out_proc_error;
}

nn->nfsd_versions = NULL;
nn->nfsd4_minorversions = NULL;
nfsd4_init_leases_net(nn);
get_random_bytes(&nn->siphash_key, sizeof(nn->siphash_key));
seqlock_init(&nn->writeverf_lock);
nfsd_proc_stat_init(net);

return 0;

out_proc_error:
nfsd_stat_counters_destroy(nn);
out_repcache_error:
nfsd_idmap_shutdown(net);
out_idmap_error:
Expand Down
4 changes: 2 additions & 2 deletions fs/nfsd/stats.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,11 @@ void nfsd_stat_counters_destroy(struct nfsd_net *nn)
nfsd_percpu_counters_destroy(nn->counter, NFSD_STATS_COUNTERS_NUM);
}

void nfsd_proc_stat_init(struct net *net)
struct proc_dir_entry *nfsd_proc_stat_init(struct net *net)
{
struct nfsd_net *nn = net_generic(net, nfsd_net_id);

svc_proc_register(net, &nn->nfsd_svcstats, &nfsd_proc_ops);
return svc_proc_register(net, &nn->nfsd_svcstats, &nfsd_proc_ops);
}

void nfsd_proc_stat_shutdown(struct net *net)
Expand Down
Loading