1 // SPDX-License-Identifier: GPL-2.0-only
3 * V9FS cache definitions.
5 * Copyright (C) 2009 by Abhishek Kulkarni <adkulkar@umail.iu.edu>
8 #include <linux/jiffies.h>
9 #include <linux/file.h>
10 #include <linux/slab.h>
11 #include <linux/stat.h>
12 #include <linux/sched.h>
14 #include <net/9p/9p.h>
19 int v9fs_cache_session_get_cookie(struct v9fs_session_info
*v9ses
,
22 struct fscache_volume
*vcookie
;
25 name
= kasprintf(GFP_KERNEL
, "9p,%s,%s",
26 dev_name
, v9ses
->cachetag
?: v9ses
->aname
);
30 for (p
= name
; *p
; p
++)
34 vcookie
= fscache_acquire_volume(name
, NULL
, NULL
, 0);
35 p9_debug(P9_DEBUG_FSC
, "session %p get volume %p (%s)\n",
36 v9ses
, vcookie
, name
);
37 if (IS_ERR(vcookie
)) {
38 if (vcookie
!= ERR_PTR(-EBUSY
)) {
40 return PTR_ERR(vcookie
);
42 pr_err("Cache volume key already in use (%s)\n", name
);
45 v9ses
->fscache
= vcookie
;
50 void v9fs_cache_inode_get_cookie(struct inode
*inode
)
52 struct v9fs_inode
*v9inode
= V9FS_I(inode
);
53 struct v9fs_session_info
*v9ses
;
57 if (!S_ISREG(inode
->i_mode
))
59 if (WARN_ON(v9fs_inode_cookie(v9inode
)))
62 version
= cpu_to_le32(v9inode
->qid
.version
);
63 path
= cpu_to_le64(v9inode
->qid
.path
);
64 v9ses
= v9fs_inode2v9ses(inode
);
65 v9inode
->netfs
.cache
=
66 fscache_acquire_cookie(v9fs_session_cache(v9ses
),
69 &version
, sizeof(version
),
70 i_size_read(&v9inode
->netfs
.inode
));
71 if (v9inode
->netfs
.cache
)
72 mapping_set_release_always(inode
->i_mapping
);
74 p9_debug(P9_DEBUG_FSC
, "inode %p get cookie %p\n",
75 inode
, v9fs_inode_cookie(v9inode
));