Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
fuse
fuse_i.h
Go to the documentation of this file.
1
/*
2
FUSE: Filesystem in Userspace
3
Copyright (C) 2001-2008 Miklos Szeredi <
[email protected]
>
4
5
This program can be distributed under the terms of the GNU GPL.
6
See the file COPYING.
7
*/
8
9
#ifndef _FS_FUSE_I_H
10
#define _FS_FUSE_I_H
11
12
#include <
linux/fuse.h
>
13
#include <linux/fs.h>
14
#include <
linux/mount.h
>
15
#include <linux/wait.h>
16
#include <linux/list.h>
17
#include <
linux/spinlock.h
>
18
#include <
linux/mm.h
>
19
#include <
linux/backing-dev.h
>
20
#include <
linux/mutex.h
>
21
#include <
linux/rwsem.h
>
22
#include <linux/rbtree.h>
23
#include <linux/poll.h>
24
#include <
linux/workqueue.h
>
25
27
#define FUSE_MAX_PAGES_PER_REQ 32
28
30
#define FUSE_NOWRITE INT_MIN
31
33
#define FUSE_NAME_MAX 1024
34
36
#define FUSE_CTL_NUM_DENTRIES 5
37
41
#define FUSE_DEFAULT_PERMISSIONS (1 << 0)
42
45
#define FUSE_ALLOW_OTHER (1 << 1)
46
48
extern
struct
list_head
fuse_conn_list
;
49
51
extern
struct
mutex
fuse_mutex
;
52
54
extern
unsigned
max_user_bgreq
;
55
extern
unsigned
max_user_congthresh
;
56
57
/* One forget request */
58
struct
fuse_forget_link
{
59
struct
fuse_forget_one
forget_one
;
60
struct
fuse_forget_link
*
next
;
61
};
62
64
struct
fuse_inode
{
66
struct
inode
inode
;
67
70
u64
nodeid
;
71
73
u64
nlookup
;
74
76
struct
fuse_forget_link
*
forget
;
77
79
u64
i_time
;
80
83
umode_t
orig_i_mode
;
84
86
u64
orig_ino
;
87
89
u64
attr_version
;
90
92
struct
list_head
write_files
;
93
95
struct
list_head
queued_writes
;
96
99
int
writectr
;
100
102
wait_queue_head_t
page_waitq
;
103
105
struct
list_head
writepages
;
106
};
107
108
struct
fuse_conn
;
109
111
struct
fuse_file
{
113
struct
fuse_conn
*
fc
;
114
116
struct
fuse_req
*
reserved_req
;
117
119
u64
kh
;
120
122
u64
fh
;
123
125
u64
nodeid
;
126
128
atomic_t
count
;
129
131
u32
open_flags
;
132
134
struct
list_head
write_entry
;
135
137
struct
rb_node
polled_node
;
138
140
wait_queue_head_t
poll_wait
;
141
143
bool
flock
:1;
144
};
145
147
struct
fuse_in_arg
{
148
unsigned
size
;
149
const
void
*
value
;
150
};
151
153
struct
fuse_in
{
155
struct
fuse_in_header
h
;
156
158
unsigned
argpages
:1;
159
161
unsigned
numargs
;
162
164
struct
fuse_in_arg
args
[3];
165
};
166
168
struct
fuse_arg
{
169
unsigned
size
;
170
void
*
value
;
171
};
172
174
struct
fuse_out
{
176
struct
fuse_out_header
h
;
177
178
/*
179
* The following bitfields are not changed during the request
180
* processing
181
*/
182
185
unsigned
argvar
:1;
186
188
unsigned
argpages
:1;
189
191
unsigned
page_zeroing
:1;
192
194
unsigned
page_replace
:1;
195
197
unsigned
numargs
;
198
200
struct
fuse_arg
args
[3];
201
};
202
204
enum
fuse_req_state
{
205
FUSE_REQ_INIT
= 0,
206
FUSE_REQ_PENDING
,
207
FUSE_REQ_READING
,
208
FUSE_REQ_SENT
,
209
FUSE_REQ_WRITING
,
210
FUSE_REQ_FINISHED
211
};
212
216
struct
fuse_req
{
219
struct
list_head
list
;
220
222
struct
list_head
intr_entry
;
223
225
atomic_t
count
;
226
228
u64
intr_unique
;
229
230
/*
231
* The following bitfields are either set once before the
232
* request is queued or setting/clearing them is protected by
233
* fuse_conn->lock
234
*/
235
237
unsigned
isreply
:1;
238
240
unsigned
force
:1;
241
243
unsigned
aborted
:1;
244
246
unsigned
background
:1;
247
249
unsigned
interrupted
:1;
250
252
unsigned
locked
:1;
253
255
unsigned
waiting
:1;
256
258
enum
fuse_req_state
state
;
259
261
struct
fuse_in
in
;
262
264
struct
fuse_out
out
;
265
267
wait_queue_head_t
waitq
;
268
270
union
{
271
struct
{
272
union
{
273
struct
fuse_release_in
in
;
274
struct
work_struct
work
;
275
};
276
struct
path
path
;
277
}
release
;
278
struct
fuse_init_in
init_in
;
279
struct
fuse_init_out
init_out
;
280
struct
cuse_init_in
cuse_init_in
;
281
struct
{
282
struct
fuse_read_in
in
;
283
u64
attr_ver
;
284
}
read
;
285
struct
{
286
struct
fuse_write_in
in
;
287
struct
fuse_write_out
out
;
288
}
write
;
289
struct
fuse_notify_retrieve_in
retrieve_in
;
290
struct
fuse_lk_in
lk_in
;
291
}
misc
;
292
294
struct
page
*
pages
[
FUSE_MAX_PAGES_PER_REQ
];
295
297
unsigned
num_pages
;
298
300
unsigned
page_offset
;
301
303
struct
fuse_file
*
ff
;
304
306
struct
inode
*
inode
;
307
309
struct
list_head
writepages_entry
;
310
312
void
(*
end
)(
struct
fuse_conn
*,
struct
fuse_req
*);
313
315
struct
file
*
stolen_file
;
316
};
317
325
struct
fuse_conn
{
327
spinlock_t
lock
;
328
330
struct
mutex
inst_mutex
;
331
333
atomic_t
count
;
334
336
uid_t
user_id
;
337
339
gid_t
group_id
;
340
342
unsigned
flags
;
343
345
unsigned
max_read
;
346
348
unsigned
max_write
;
349
351
wait_queue_head_t
waitq
;
352
354
struct
list_head
pending
;
355
357
struct
list_head
processing
;
358
360
struct
list_head
io
;
361
363
u64
khctr
;
364
366
struct
rb_root
polled_files
;
367
369
unsigned
max_background
;
370
372
unsigned
congestion_threshold
;
373
375
unsigned
num_background
;
376
378
unsigned
active_background
;
379
381
struct
list_head
bg_queue
;
382
384
struct
list_head
interrupts
;
385
387
struct
fuse_forget_link
forget_list_head
;
388
struct
fuse_forget_link
*
forget_list_tail
;
389
391
int
forget_batch
;
392
396
int
blocked
;
397
399
wait_queue_head_t
blocked_waitq
;
400
402
wait_queue_head_t
reserved_req_waitq
;
403
405
u64
reqctr
;
406
409
unsigned
connected
;
410
414
unsigned
conn_error
:1;
415
417
unsigned
conn_init
:1;
418
420
unsigned
async_read
:1;
421
423
unsigned
atomic_o_trunc
:1;
424
426
unsigned
export_support
:1;
427
429
unsigned
bdi_initialized
:1;
430
431
/*
432
* The following bitfields are only for optimization purposes
433
* and hence races in setting them will not cause malfunction
434
*/
435
437
unsigned
no_fsync
:1;
438
440
unsigned
no_fsyncdir
:1;
441
443
unsigned
no_flush
:1;
444
446
unsigned
no_setxattr
:1;
447
449
unsigned
no_getxattr
:1;
450
452
unsigned
no_listxattr
:1;
453
455
unsigned
no_removexattr
:1;
456
458
unsigned
no_lock
:1;
459
461
unsigned
no_access
:1;
462
464
unsigned
no_create
:1;
465
467
unsigned
no_interrupt
:1;
468
470
unsigned
no_bmap
:1;
471
473
unsigned
no_poll
:1;
474
476
unsigned
big_writes
:1;
477
479
unsigned
dont_mask
:1;
480
482
unsigned
no_flock
:1;
483
485
unsigned
no_fallocate
:1;
486
488
unsigned
auto_inval_data
:1;
489
491
atomic_t
num_waiting
;
492
494
unsigned
minor
;
495
497
struct
backing_dev_info
bdi
;
498
500
struct
list_head
entry
;
501
503
dev_t
dev
;
504
506
struct
dentry
*
ctl_dentry
[
FUSE_CTL_NUM_DENTRIES
];
507
509
int
ctl_ndents
;
510
512
struct
fasync_struct
*
fasync
;
513
515
u32
scramble_key
[4];
516
518
struct
fuse_req
*
destroy_req
;
519
521
u64
attr_version
;
522
524
void
(*
release
)(
struct
fuse_conn
*);
525
527
struct
super_block
*
sb
;
528
530
struct
rw_semaphore
killsb
;
531
};
532
533
static
inline
struct
fuse_conn
*get_fuse_conn_super(
struct
super_block
*
sb
)
534
{
535
return
sb->
s_fs_info
;
536
}
537
538
static
inline
struct
fuse_conn
*get_fuse_conn(
struct
inode
*
inode
)
539
{
540
return
get_fuse_conn_super(inode->
i_sb
);
541
}
542
543
static
inline
struct
fuse_inode
*get_fuse_inode(
struct
inode
*
inode
)
544
{
545
return
container_of
(inode,
struct
fuse_inode
, inode);
546
}
547
548
static
inline
u64
get_node_id(
struct
inode
*
inode
)
549
{
550
return
get_fuse_inode(inode)->nodeid;
551
}
552
554
extern
const
struct
file_operations
fuse_dev_operations
;
555
556
extern
const
struct
dentry_operations
fuse_dentry_operations
;
557
561
int
fuse_inode_eq
(
struct
inode
*
inode
,
void
*_nodeidp);
562
566
struct
inode
*
fuse_iget
(
struct
super_block
*
sb
,
u64
nodeid,
567
int
generation
,
struct
fuse_attr
*
attr
,
568
u64
attr_valid,
u64
attr_version);
569
570
int
fuse_lookup_name
(
struct
super_block
*
sb
,
u64
nodeid,
struct
qstr
*
name
,
571
struct
fuse_entry_out
*outarg,
struct
inode
**
inode
);
572
576
void
fuse_queue_forget
(
struct
fuse_conn
*
fc
,
struct
fuse_forget_link
*forget,
577
u64
nodeid,
u64
nlookup);
578
579
struct
fuse_forget_link
*
fuse_alloc_forget
(
void
);
580
584
void
fuse_read_fill
(
struct
fuse_req
*
req
,
struct
file
*
file
,
585
loff_t
pos
,
size_t
count
,
int
opcode
);
586
590
int
fuse_open_common
(
struct
inode
*
inode
,
struct
file
*
file
,
bool
isdir);
591
592
struct
fuse_file
*
fuse_file_alloc
(
struct
fuse_conn
*
fc
);
593
struct
fuse_file
*
fuse_file_get
(
struct
fuse_file
*ff);
594
void
fuse_file_free
(
struct
fuse_file
*ff);
595
void
fuse_finish_open
(
struct
inode
*
inode
,
struct
file
*
file
);
596
597
void
fuse_sync_release
(
struct
fuse_file
*ff,
int
flags
);
598
602
void
fuse_release_common
(
struct
file
*
file
,
int
opcode
);
603
607
int
fuse_fsync_common
(
struct
file
*
file
, loff_t
start
, loff_t
end
,
608
int
datasync,
int
isdir);
609
613
int
fuse_notify_poll_wakeup
(
struct
fuse_conn
*
fc
,
614
struct
fuse_notify_poll_wakeup_out
*outarg);
615
619
void
fuse_init_file_inode
(
struct
inode
*
inode
);
620
624
void
fuse_init_common
(
struct
inode
*
inode
);
625
629
void
fuse_init_dir
(
struct
inode
*
inode
);
630
634
void
fuse_init_symlink
(
struct
inode
*
inode
);
635
639
void
fuse_change_attributes
(
struct
inode
*
inode
,
struct
fuse_attr
*
attr
,
640
u64
attr_valid,
u64
attr_version);
641
642
void
fuse_change_attributes_common
(
struct
inode
*
inode
,
struct
fuse_attr
*
attr
,
643
u64
attr_valid);
644
648
int
fuse_dev_init
(
void
);
649
653
void
fuse_dev_cleanup
(
void
);
654
655
int
fuse_ctl_init
(
void
);
656
void
fuse_ctl_cleanup
(
void
);
657
661
struct
fuse_req
*
fuse_request_alloc
(
void
);
662
663
struct
fuse_req
*
fuse_request_alloc_nofs
(
void
);
664
668
void
fuse_request_free
(
struct
fuse_req
*
req
);
669
673
struct
fuse_req
*
fuse_get_req
(
struct
fuse_conn
*
fc
);
674
678
struct
fuse_req
*
fuse_get_req_nofail
(
struct
fuse_conn
*
fc
,
struct
file
*
file
);
679
684
void
fuse_put_request
(
struct
fuse_conn
*
fc
,
struct
fuse_req
*
req
);
685
689
void
fuse_request_send
(
struct
fuse_conn
*
fc
,
struct
fuse_req
*
req
);
690
694
void
fuse_request_send_background
(
struct
fuse_conn
*
fc
,
struct
fuse_req
*
req
);
695
696
void
fuse_request_send_background_locked
(
struct
fuse_conn
*
fc
,
697
struct
fuse_req
*
req
);
698
699
/* Abort all requests */
700
void
fuse_abort_conn
(
struct
fuse_conn
*
fc
);
701
705
void
fuse_invalidate_attr
(
struct
inode
*
inode
);
706
707
void
fuse_invalidate_entry_cache
(
struct
dentry
*
entry
);
708
712
struct
fuse_conn
*
fuse_conn_get
(
struct
fuse_conn
*
fc
);
713
714
void
fuse_conn_kill
(
struct
fuse_conn
*
fc
);
715
719
void
fuse_conn_init
(
struct
fuse_conn
*
fc
);
720
724
void
fuse_conn_put
(
struct
fuse_conn
*
fc
);
725
729
int
fuse_ctl_add_conn
(
struct
fuse_conn
*
fc
);
730
734
void
fuse_ctl_remove_conn
(
struct
fuse_conn
*
fc
);
735
739
int
fuse_valid_type
(
int
m
);
740
744
int
fuse_allow_task
(
struct
fuse_conn
*
fc
,
struct
task_struct
*
task
);
745
746
u64
fuse_lock_owner_id
(
struct
fuse_conn
*
fc
,
fl_owner_t
id
);
747
748
int
fuse_update_attributes
(
struct
inode
*
inode
,
struct
kstat
*
stat
,
749
struct
file
*
file
,
bool
*refreshed);
750
751
void
fuse_flush_writepages
(
struct
inode
*
inode
);
752
753
void
fuse_set_nowrite
(
struct
inode
*
inode
);
754
void
fuse_release_nowrite
(
struct
inode
*
inode
);
755
756
u64
fuse_get_attr_version
(
struct
fuse_conn
*
fc
);
757
761
int
fuse_reverse_inval_inode
(
struct
super_block
*
sb
,
u64
nodeid,
762
loff_t
offset
, loff_t len);
763
774
int
fuse_reverse_inval_entry
(
struct
super_block
*
sb
,
u64
parent_nodeid,
775
u64
child_nodeid,
struct
qstr
*
name
);
776
777
int
fuse_do_open
(
struct
fuse_conn
*
fc
,
u64
nodeid,
struct
file
*
file
,
778
bool
isdir);
779
ssize_t
fuse_direct_io
(
struct
file
*
file
,
const
char
__user *
buf
,
780
size_t
count
, loff_t *ppos,
int
write
);
781
long
fuse_do_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
,
782
unsigned
int
flags
);
783
long
fuse_ioctl_common
(
struct
file
*
file
,
unsigned
int
cmd
,
784
unsigned
long
arg
,
unsigned
int
flags
);
785
unsigned
fuse_file_poll
(
struct
file
*
file
,
poll_table
*
wait
);
786
int
fuse_dev_release
(
struct
inode
*
inode
,
struct
file
*
file
);
787
788
void
fuse_write_update_size
(
struct
inode
*
inode
, loff_t
pos
);
789
790
#endif
/* _FS_FUSE_I_H */
Generated on Thu Jan 10 2013 14:47:10 for Linux Kernel by
1.8.2