blob: 57ac6c703f685883d3a15ebc1a5c7f6c298deb1b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _MM_SWAP_OPS_H
#define _MM_SWAP_OPS_H
#include <linux/swap.h> /* for SWAP_CLUSTER_MAX */
struct swap_iocb {
union {
struct kiocb iocb;
struct bio bio;
};
struct bio_vec bvecs[SWAP_CLUSTER_MAX];
int nr_bvecs;
int len;
};
struct swap_io_ctx {
struct swap_iocb *sio;
struct swap_info_struct *sis;
};
/*
* SWAP_OPS_F_REQUIRE_NOFS:
* When set, all reclaim operations must operated as GFS_NOFS and not
* just GFP_NOIO, as GFP_NOIO allocations could recourse into the
* file system backing this swap file.
*/
#define SWAP_OPS_F_REQUIRE_NOFS (1U << 0)
struct swap_ops {
unsigned int flags;
bool (*can_merge)(struct folio *folio, struct folio *prev_folio,
size_t prev_folio_size, int rw);
void (*submit_write)(struct swap_io_ctx *ctx);
void (*submit_read)(struct swap_io_ctx *ctx);
};
void swap_fs_prepare_rw(struct swap_io_ctx *ctx, int rw, struct iov_iter *iter);
bool swap_fs_can_merge(struct folio *folio, struct folio *prev_folio,
size_t prev_folio_size, int rw);
int swap_fs_activate(struct swap_info_struct *sis, const struct swap_ops *ops);
#endif /* _MM_SWAP_OPS_H */
|