#ifndef _CODA_INT_ #define _CODA_INT_ struct dentry; struct file; extern struct file_system_type coda_fs_type; extern unsigned long coda_timeout; extern int coda_hard; extern int coda_fake_statfs; void coda_destroy_inodecache(void); int __init coda_init_inodecache(void); int coda_fsync(struct file *coda_file, loff_t start, loff_t end, int datasync); void coda_sysctl_init(void); void coda_sysctl_clean(void); #endif /* _CODA_INT_ */ stanz.ch/cgit.cgi/linux/net-next.git' title='net-next.git Git repository'/>
summaryrefslogtreecommitdiff
path: root/tools
ted='selected'>3
ModeNameSize
space:
mode:
authorIdo Schimmel <idosch@mellanox.com>2016-12-03 16:45:01 +0100
committerDavid S. Miller <davem@davemloft.net>2016-12-03 19:29:35 -0500
commit3057224e014c14921de5ab534d5147eb109fd12b (patch)
treefe8bfff09e3c4c6850fd7fb5b40222070fc88f6b
parenta3832b31898f6936816257c020b1d4f1a07622f7 (diff)
mlxsw: spectrum_router: Implement FIB offload in deferred work
FIB offload is currently done in process context with RTNL held, but we're about to dump the FIB tables in RCU critical section, so we can no longer sleep. Instead, defer the operation to process context using deferred work. Make sure fib info isn't freed while the work is queued by taking a reference on it and releasing it after the operation is done. Deferring the operation is valid because the upper layers always assume the operation was successful. If it's not, then the driver-specific abort mechanism is called and all routed traffic is directed to slow path. The work items are submitted to an ordered workqueue to prevent a mismatch between the kernel's FIB table and the device's. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c72
1 files changed, 62 insertions, 10 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c