diff options
Diffstat (limited to 'include/linux')
127 files changed, 5422 insertions, 1276 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index f7a52e19b4be..a1155a2beb32 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -46,6 +46,7 @@ header-y += coff.h | |||
46 | header-y += comstats.h | 46 | header-y += comstats.h |
47 | header-y += consolemap.h | 47 | header-y += consolemap.h |
48 | header-y += cycx_cfm.h | 48 | header-y += cycx_cfm.h |
49 | header-y += dlm_device.h | ||
49 | header-y += dm-ioctl.h | 50 | header-y += dm-ioctl.h |
50 | header-y += dn.h | 51 | header-y += dn.h |
51 | header-y += dqblk_v1.h | 52 | header-y += dqblk_v1.h |
@@ -99,11 +100,11 @@ header-y += ipx.h | |||
99 | header-y += irda.h | 100 | header-y += irda.h |
100 | header-y += isdn_divertif.h | 101 | header-y += isdn_divertif.h |
101 | header-y += iso_fs.h | 102 | header-y += iso_fs.h |
102 | header-y += ite_gpio.h | ||
103 | header-y += ixjuser.h | 103 | header-y += ixjuser.h |
104 | header-y += jffs2.h | 104 | header-y += jffs2.h |
105 | header-y += keyctl.h | 105 | header-y += keyctl.h |
106 | header-y += limits.h | 106 | header-y += limits.h |
107 | header-y += lock_dlm_plock.h | ||
107 | header-y += magic.h | 108 | header-y += magic.h |
108 | header-y += major.h | 109 | header-y += major.h |
109 | header-y += matroxfb.h | 110 | header-y += matroxfb.h |
@@ -119,6 +120,7 @@ header-y += netrom.h | |||
119 | header-y += nfs2.h | 120 | header-y += nfs2.h |
120 | header-y += nfs4_mount.h | 121 | header-y += nfs4_mount.h |
121 | header-y += nfs_mount.h | 122 | header-y += nfs_mount.h |
123 | header-y += oom.h | ||
122 | header-y += param.h | 124 | header-y += param.h |
123 | header-y += pci_ids.h | 125 | header-y += pci_ids.h |
124 | header-y += pci_regs.h | 126 | header-y += pci_regs.h |
@@ -156,12 +158,10 @@ header-y += toshiba.h | |||
156 | header-y += ultrasound.h | 158 | header-y += ultrasound.h |
157 | header-y += un.h | 159 | header-y += un.h |
158 | header-y += utime.h | 160 | header-y += utime.h |
159 | header-y += utsname.h | ||
160 | header-y += video_decoder.h | 161 | header-y += video_decoder.h |
161 | header-y += video_encoder.h | 162 | header-y += video_encoder.h |
162 | header-y += videotext.h | 163 | header-y += videotext.h |
163 | header-y += vt.h | 164 | header-y += vt.h |
164 | header-y += wavefront.h | ||
165 | header-y += wireless.h | 165 | header-y += wireless.h |
166 | header-y += xattr.h | 166 | header-y += xattr.h |
167 | header-y += x25.h | 167 | header-y += x25.h |
@@ -194,6 +194,7 @@ unifdef-y += cyclades.h | |||
194 | unifdef-y += dccp.h | 194 | unifdef-y += dccp.h |
195 | unifdef-y += dirent.h | 195 | unifdef-y += dirent.h |
196 | unifdef-y += divert.h | 196 | unifdef-y += divert.h |
197 | unifdef-y += dlm.h | ||
197 | unifdef-y += elfcore.h | 198 | unifdef-y += elfcore.h |
198 | unifdef-y += errno.h | 199 | unifdef-y += errno.h |
199 | unifdef-y += errqueue.h | 200 | unifdef-y += errqueue.h |
@@ -210,6 +211,7 @@ unifdef-y += ftape.h | |||
210 | unifdef-y += gameport.h | 211 | unifdef-y += gameport.h |
211 | unifdef-y += generic_serial.h | 212 | unifdef-y += generic_serial.h |
212 | unifdef-y += genhd.h | 213 | unifdef-y += genhd.h |
214 | unifdef-y += gfs2_ondisk.h | ||
213 | unifdef-y += hayesesp.h | 215 | unifdef-y += hayesesp.h |
214 | unifdef-y += hdlcdrv.h | 216 | unifdef-y += hdlcdrv.h |
215 | unifdef-y += hdlc.h | 217 | unifdef-y += hdlc.h |
@@ -333,6 +335,7 @@ unifdef-y += unistd.h | |||
333 | unifdef-y += usb_ch9.h | 335 | unifdef-y += usb_ch9.h |
334 | unifdef-y += usbdevice_fs.h | 336 | unifdef-y += usbdevice_fs.h |
335 | unifdef-y += user.h | 337 | unifdef-y += user.h |
338 | unifdef-y += utsname.h | ||
336 | unifdef-y += videodev2.h | 339 | unifdef-y += videodev2.h |
337 | unifdef-y += videodev.h | 340 | unifdef-y += videodev.h |
338 | unifdef-y += wait.h | 341 | unifdef-y += wait.h |
diff --git a/include/linux/ac97_codec.h b/include/linux/ac97_codec.h index 2ed2fd855133..22eb9367235a 100644 --- a/include/linux/ac97_codec.h +++ b/include/linux/ac97_codec.h | |||
@@ -331,8 +331,6 @@ extern int ac97_read_proc (char *page_out, char **start, off_t off, | |||
331 | extern int ac97_probe_codec(struct ac97_codec *); | 331 | extern int ac97_probe_codec(struct ac97_codec *); |
332 | extern unsigned int ac97_set_adc_rate(struct ac97_codec *codec, unsigned int rate); | 332 | extern unsigned int ac97_set_adc_rate(struct ac97_codec *codec, unsigned int rate); |
333 | extern unsigned int ac97_set_dac_rate(struct ac97_codec *codec, unsigned int rate); | 333 | extern unsigned int ac97_set_dac_rate(struct ac97_codec *codec, unsigned int rate); |
334 | extern int ac97_save_state(struct ac97_codec *codec); | ||
335 | extern int ac97_restore_state(struct ac97_codec *codec); | ||
336 | 334 | ||
337 | extern struct ac97_codec *ac97_alloc_codec(void); | 335 | extern struct ac97_codec *ac97_alloc_codec(void); |
338 | extern void ac97_release_codec(struct ac97_codec *codec); | 336 | extern void ac97_release_codec(struct ac97_codec *codec); |
@@ -346,9 +344,6 @@ struct ac97_driver { | |||
346 | void (*remove) (struct ac97_codec *codec, struct ac97_driver *driver); | 344 | void (*remove) (struct ac97_codec *codec, struct ac97_driver *driver); |
347 | }; | 345 | }; |
348 | 346 | ||
349 | extern int ac97_register_driver(struct ac97_driver *driver); | ||
350 | extern void ac97_unregister_driver(struct ac97_driver *driver); | ||
351 | |||
352 | /* quirk types */ | 347 | /* quirk types */ |
353 | enum { | 348 | enum { |
354 | AC97_TUNE_DEFAULT = -1, /* use default from quirk list (not valid in list) */ | 349 | AC97_TUNE_DEFAULT = -1, /* use default from quirk list (not valid in list) */ |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 88b5dfd8ee12..2b0c955590fe 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
@@ -494,6 +494,9 @@ void acpi_pci_unregister_driver(struct acpi_pci_driver *driver); | |||
494 | 494 | ||
495 | extern int ec_read(u8 addr, u8 *val); | 495 | extern int ec_read(u8 addr, u8 *val); |
496 | extern int ec_write(u8 addr, u8 val); | 496 | extern int ec_write(u8 addr, u8 val); |
497 | extern int ec_transaction(u8 command, | ||
498 | const u8 *wdata, unsigned wdata_len, | ||
499 | u8 *rdata, unsigned rdata_len); | ||
497 | 500 | ||
498 | #endif /*CONFIG_ACPI_EC*/ | 501 | #endif /*CONFIG_ACPI_EC*/ |
499 | 502 | ||
diff --git a/include/linux/adb.h b/include/linux/adb.h index b7305b178279..64d8878e1444 100644 --- a/include/linux/adb.h +++ b/include/linux/adb.h | |||
@@ -90,10 +90,10 @@ extern struct blocking_notifier_head adb_client_list; | |||
90 | int adb_request(struct adb_request *req, void (*done)(struct adb_request *), | 90 | int adb_request(struct adb_request *req, void (*done)(struct adb_request *), |
91 | int flags, int nbytes, ...); | 91 | int flags, int nbytes, ...); |
92 | int adb_register(int default_id,int handler_id,struct adb_ids *ids, | 92 | int adb_register(int default_id,int handler_id,struct adb_ids *ids, |
93 | void (*handler)(unsigned char *, int, struct pt_regs *, int)); | 93 | void (*handler)(unsigned char *, int, int)); |
94 | int adb_unregister(int index); | 94 | int adb_unregister(int index); |
95 | void adb_poll(void); | 95 | void adb_poll(void); |
96 | void adb_input(unsigned char *, int, struct pt_regs *, int); | 96 | void adb_input(unsigned char *, int, int); |
97 | int adb_reset_bus(void); | 97 | int adb_reset_bus(void); |
98 | 98 | ||
99 | int adb_try_handler_change(int address, int new_id); | 99 | int adb_try_handler_change(int address, int new_id); |
diff --git a/include/linux/arcdevice.h b/include/linux/arcdevice.h index 231ba090ae34..2f85049cfb3d 100644 --- a/include/linux/arcdevice.h +++ b/include/linux/arcdevice.h | |||
@@ -334,7 +334,7 @@ void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc); | |||
334 | #endif | 334 | #endif |
335 | 335 | ||
336 | void arcnet_unregister_proto(struct ArcProto *proto); | 336 | void arcnet_unregister_proto(struct ArcProto *proto); |
337 | irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 337 | irqreturn_t arcnet_interrupt(int irq, void *dev_id); |
338 | struct net_device *alloc_arcdev(char *name); | 338 | struct net_device *alloc_arcdev(char *name); |
339 | 339 | ||
340 | #endif /* __KERNEL__ */ | 340 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/audit.h b/include/linux/audit.h index c3aa09751814..b2ca666d9997 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
@@ -75,7 +75,7 @@ | |||
75 | #define AUDIT_DAEMON_CONFIG 1203 /* Daemon config change */ | 75 | #define AUDIT_DAEMON_CONFIG 1203 /* Daemon config change */ |
76 | 76 | ||
77 | #define AUDIT_SYSCALL 1300 /* Syscall event */ | 77 | #define AUDIT_SYSCALL 1300 /* Syscall event */ |
78 | #define AUDIT_FS_WATCH 1301 /* Filesystem watch event */ | 78 | /* #define AUDIT_FS_WATCH 1301 * Deprecated */ |
79 | #define AUDIT_PATH 1302 /* Filename path information */ | 79 | #define AUDIT_PATH 1302 /* Filename path information */ |
80 | #define AUDIT_IPC 1303 /* IPC record */ | 80 | #define AUDIT_IPC 1303 /* IPC record */ |
81 | #define AUDIT_SOCKETCALL 1304 /* sys_socketcall arguments */ | 81 | #define AUDIT_SOCKETCALL 1304 /* sys_socketcall arguments */ |
@@ -88,6 +88,7 @@ | |||
88 | #define AUDIT_MQ_SENDRECV 1313 /* POSIX MQ send/receive record type */ | 88 | #define AUDIT_MQ_SENDRECV 1313 /* POSIX MQ send/receive record type */ |
89 | #define AUDIT_MQ_NOTIFY 1314 /* POSIX MQ notify record type */ | 89 | #define AUDIT_MQ_NOTIFY 1314 /* POSIX MQ notify record type */ |
90 | #define AUDIT_MQ_GETSETATTR 1315 /* POSIX MQ get/set attribute record type */ | 90 | #define AUDIT_MQ_GETSETATTR 1315 /* POSIX MQ get/set attribute record type */ |
91 | #define AUDIT_KERNEL_OTHER 1316 /* For use by 3rd party modules */ | ||
91 | 92 | ||
92 | #define AUDIT_AVC 1400 /* SE Linux avc denial or grant */ | 93 | #define AUDIT_AVC 1400 /* SE Linux avc denial or grant */ |
93 | #define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */ | 94 | #define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */ |
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index f7a1390d67f5..7011d6255593 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
@@ -10,6 +10,8 @@ | |||
10 | 10 | ||
11 | #include <asm/atomic.h> | 11 | #include <asm/atomic.h> |
12 | 12 | ||
13 | struct page; | ||
14 | |||
13 | /* | 15 | /* |
14 | * Bits in backing_dev_info.state | 16 | * Bits in backing_dev_info.state |
15 | */ | 17 | */ |
@@ -88,6 +90,11 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi) | |||
88 | (1 << BDI_write_congested)); | 90 | (1 << BDI_write_congested)); |
89 | } | 91 | } |
90 | 92 | ||
93 | void clear_bdi_congested(struct backing_dev_info *bdi, int rw); | ||
94 | void set_bdi_congested(struct backing_dev_info *bdi, int rw); | ||
95 | long congestion_wait(int rw, long timeout); | ||
96 | void congestion_end(int rw); | ||
97 | |||
91 | #define bdi_cap_writeback_dirty(bdi) \ | 98 | #define bdi_cap_writeback_dirty(bdi) \ |
92 | (!((bdi)->capabilities & BDI_CAP_NO_WRITEBACK)) | 99 | (!((bdi)->capabilities & BDI_CAP_NO_WRITEBACK)) |
93 | 100 | ||
diff --git a/include/linux/bio.h b/include/linux/bio.h index 711c321a7011..092dbd0e7658 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -70,7 +70,8 @@ typedef void (bio_destructor_t) (struct bio *); | |||
70 | * stacking drivers) | 70 | * stacking drivers) |
71 | */ | 71 | */ |
72 | struct bio { | 72 | struct bio { |
73 | sector_t bi_sector; | 73 | sector_t bi_sector; /* device address in 512 byte |
74 | sectors */ | ||
74 | struct bio *bi_next; /* request queue link */ | 75 | struct bio *bi_next; /* request queue link */ |
75 | struct block_device *bi_bdev; | 76 | struct block_device *bi_bdev; |
76 | unsigned long bi_flags; /* status, command, etc */ | 77 | unsigned long bi_flags; /* status, command, etc */ |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index dcc5de7cc487..64b4641904fe 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
@@ -46,7 +46,8 @@ | |||
46 | * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) | 46 | * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) |
47 | * bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) | 47 | * bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) |
48 | * bitmap_scnprintf(buf, len, src, nbits) Print bitmap src to buf | 48 | * bitmap_scnprintf(buf, len, src, nbits) Print bitmap src to buf |
49 | * bitmap_parse(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf | 49 | * bitmap_parse(buf, buflen, dst, nbits) Parse bitmap dst from kernel buf |
50 | * bitmap_parse_user(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf | ||
50 | * bitmap_scnlistprintf(buf, len, src, nbits) Print bitmap src as list to buf | 51 | * bitmap_scnlistprintf(buf, len, src, nbits) Print bitmap src as list to buf |
51 | * bitmap_parselist(buf, dst, nbits) Parse bitmap dst from list | 52 | * bitmap_parselist(buf, dst, nbits) Parse bitmap dst from list |
52 | * bitmap_find_free_region(bitmap, bits, order) Find and allocate bit region | 53 | * bitmap_find_free_region(bitmap, bits, order) Find and allocate bit region |
@@ -106,7 +107,9 @@ extern int __bitmap_weight(const unsigned long *bitmap, int bits); | |||
106 | 107 | ||
107 | extern int bitmap_scnprintf(char *buf, unsigned int len, | 108 | extern int bitmap_scnprintf(char *buf, unsigned int len, |
108 | const unsigned long *src, int nbits); | 109 | const unsigned long *src, int nbits); |
109 | extern int bitmap_parse(const char __user *ubuf, unsigned int ulen, | 110 | extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user, |
111 | unsigned long *dst, int nbits); | ||
112 | extern int bitmap_parse_user(const char __user *ubuf, unsigned int ulen, | ||
110 | unsigned long *dst, int nbits); | 113 | unsigned long *dst, int nbits); |
111 | extern int bitmap_scnlistprintf(char *buf, unsigned int len, | 114 | extern int bitmap_scnlistprintf(char *buf, unsigned int len, |
112 | const unsigned long *src, int nbits); | 115 | const unsigned long *src, int nbits); |
@@ -270,6 +273,12 @@ static inline void bitmap_shift_left(unsigned long *dst, | |||
270 | __bitmap_shift_left(dst, src, n, nbits); | 273 | __bitmap_shift_left(dst, src, n, nbits); |
271 | } | 274 | } |
272 | 275 | ||
276 | static inline int bitmap_parse(const char *buf, unsigned int buflen, | ||
277 | unsigned long *maskp, int nmaskbits) | ||
278 | { | ||
279 | return __bitmap_parse(buf, buflen, 0, maskp, nmaskbits); | ||
280 | } | ||
281 | |||
273 | #endif /* __ASSEMBLY__ */ | 282 | #endif /* __ASSEMBLY__ */ |
274 | 283 | ||
275 | #endif /* __LINUX_BITMAP_H */ | 284 | #endif /* __LINUX_BITMAP_H */ |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 1d79b8d4ca6d..7bfcde2d5578 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -157,6 +157,7 @@ enum rq_cmd_type_bits { | |||
157 | REQ_TYPE_ATA_CMD, | 157 | REQ_TYPE_ATA_CMD, |
158 | REQ_TYPE_ATA_TASK, | 158 | REQ_TYPE_ATA_TASK, |
159 | REQ_TYPE_ATA_TASKFILE, | 159 | REQ_TYPE_ATA_TASKFILE, |
160 | REQ_TYPE_ATA_PC, | ||
160 | }; | 161 | }; |
161 | 162 | ||
162 | /* | 163 | /* |
@@ -650,6 +651,26 @@ extern void blk_recount_segments(request_queue_t *, struct bio *); | |||
650 | extern int scsi_cmd_ioctl(struct file *, struct gendisk *, unsigned int, void __user *); | 651 | extern int scsi_cmd_ioctl(struct file *, struct gendisk *, unsigned int, void __user *); |
651 | extern int sg_scsi_ioctl(struct file *, struct request_queue *, | 652 | extern int sg_scsi_ioctl(struct file *, struct request_queue *, |
652 | struct gendisk *, struct scsi_ioctl_command __user *); | 653 | struct gendisk *, struct scsi_ioctl_command __user *); |
654 | |||
655 | /* | ||
656 | * A queue has just exitted congestion. Note this in the global counter of | ||
657 | * congested queues, and wake up anyone who was waiting for requests to be | ||
658 | * put back. | ||
659 | */ | ||
660 | static inline void blk_clear_queue_congested(request_queue_t *q, int rw) | ||
661 | { | ||
662 | clear_bdi_congested(&q->backing_dev_info, rw); | ||
663 | } | ||
664 | |||
665 | /* | ||
666 | * A queue has just entered congestion. Flag that in the queue's VM-visible | ||
667 | * state flags and increment the global gounter of congested queues. | ||
668 | */ | ||
669 | static inline void blk_set_queue_congested(request_queue_t *q, int rw) | ||
670 | { | ||
671 | set_bdi_congested(&q->backing_dev_info, rw); | ||
672 | } | ||
673 | |||
653 | extern void blk_start_queue(request_queue_t *q); | 674 | extern void blk_start_queue(request_queue_t *q); |
654 | extern void blk_stop_queue(request_queue_t *q); | 675 | extern void blk_stop_queue(request_queue_t *q); |
655 | extern void blk_sync_queue(struct request_queue *q); | 676 | extern void blk_sync_queue(struct request_queue *q); |
@@ -764,10 +785,16 @@ extern int blk_queue_init_tags(request_queue_t *, int, struct blk_queue_tag *); | |||
764 | extern void blk_queue_free_tags(request_queue_t *); | 785 | extern void blk_queue_free_tags(request_queue_t *); |
765 | extern int blk_queue_resize_tags(request_queue_t *, int); | 786 | extern int blk_queue_resize_tags(request_queue_t *, int); |
766 | extern void blk_queue_invalidate_tags(request_queue_t *); | 787 | extern void blk_queue_invalidate_tags(request_queue_t *); |
767 | extern long blk_congestion_wait(int rw, long timeout); | ||
768 | extern struct blk_queue_tag *blk_init_tags(int); | 788 | extern struct blk_queue_tag *blk_init_tags(int); |
769 | extern void blk_free_tags(struct blk_queue_tag *); | 789 | extern void blk_free_tags(struct blk_queue_tag *); |
770 | extern void blk_congestion_end(int rw); | 790 | |
791 | static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | ||
792 | int tag) | ||
793 | { | ||
794 | if (unlikely(bqt == NULL || tag >= bqt->real_max_depth)) | ||
795 | return NULL; | ||
796 | return bqt->tag_index[tag]; | ||
797 | } | ||
771 | 798 | ||
772 | extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *); | 799 | extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *); |
773 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 800 | extern int blkdev_issue_flush(struct block_device *, sector_t *); |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 131ffd37e716..5d9fb0e94156 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
@@ -69,6 +69,8 @@ struct buffer_head { | |||
69 | bh_end_io_t *b_end_io; /* I/O completion */ | 69 | bh_end_io_t *b_end_io; /* I/O completion */ |
70 | void *b_private; /* reserved for b_end_io */ | 70 | void *b_private; /* reserved for b_end_io */ |
71 | struct list_head b_assoc_buffers; /* associated with another mapping */ | 71 | struct list_head b_assoc_buffers; /* associated with another mapping */ |
72 | struct address_space *b_assoc_map; /* mapping this buffer is | ||
73 | associated with */ | ||
72 | atomic_t b_count; /* users using this buffer_head */ | 74 | atomic_t b_count; /* users using this buffer_head */ |
73 | }; | 75 | }; |
74 | 76 | ||
diff --git a/include/linux/carta_random32.h b/include/linux/carta_random32.h new file mode 100644 index 000000000000..f6f3bd9f20b5 --- /dev/null +++ b/include/linux/carta_random32.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * Fast, simple, yet decent quality random number generator based on | ||
3 | * a paper by David G. Carta ("Two Fast Implementations of the | ||
4 | * `Minimal Standard' Random Number Generator," Communications of the | ||
5 | * ACM, January, 1990). | ||
6 | * | ||
7 | * Copyright (c) 2002-2006 Hewlett-Packard Development Company, L.P. | ||
8 | * Contributed by Stephane Eranian <eranian@hpl.hp.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of version 2 of the GNU General Public | ||
12 | * License as published by the Free Software Foundation. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
17 | * General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | ||
22 | * 02111-1307 USA | ||
23 | */ | ||
24 | #ifndef _LINUX_CARTA_RANDOM32_H_ | ||
25 | #define _LINUX_CARTA_RANDOM32_H_ | ||
26 | |||
27 | u64 carta_random32(u64 seed); | ||
28 | |||
29 | #endif /* _LINUX_CARTA_RANDOM32_H_ */ | ||
diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 3c9b0bc05123..bbbe7b4da0bb 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h | |||
@@ -749,7 +749,7 @@ struct request_sense { | |||
749 | #define MRW_MODE_PC 0x03 | 749 | #define MRW_MODE_PC 0x03 |
750 | 750 | ||
751 | struct mrw_feature_desc { | 751 | struct mrw_feature_desc { |
752 | __u16 feature_code; | 752 | __be16 feature_code; |
753 | #if defined(__BIG_ENDIAN_BITFIELD) | 753 | #if defined(__BIG_ENDIAN_BITFIELD) |
754 | __u8 reserved1 : 2; | 754 | __u8 reserved1 : 2; |
755 | __u8 feature_version : 4; | 755 | __u8 feature_version : 4; |
@@ -776,7 +776,7 @@ struct mrw_feature_desc { | |||
776 | 776 | ||
777 | /* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */ | 777 | /* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */ |
778 | struct rwrt_feature_desc { | 778 | struct rwrt_feature_desc { |
779 | __u16 feature_code; | 779 | __be16 feature_code; |
780 | #if defined(__BIG_ENDIAN_BITFIELD) | 780 | #if defined(__BIG_ENDIAN_BITFIELD) |
781 | __u8 reserved1 : 2; | 781 | __u8 reserved1 : 2; |
782 | __u8 feature_version : 4; | 782 | __u8 feature_version : 4; |
@@ -803,7 +803,7 @@ struct rwrt_feature_desc { | |||
803 | }; | 803 | }; |
804 | 804 | ||
805 | typedef struct { | 805 | typedef struct { |
806 | __u16 disc_information_length; | 806 | __be16 disc_information_length; |
807 | #if defined(__BIG_ENDIAN_BITFIELD) | 807 | #if defined(__BIG_ENDIAN_BITFIELD) |
808 | __u8 reserved1 : 3; | 808 | __u8 reserved1 : 3; |
809 | __u8 erasable : 1; | 809 | __u8 erasable : 1; |
@@ -849,7 +849,7 @@ typedef struct { | |||
849 | } disc_information; | 849 | } disc_information; |
850 | 850 | ||
851 | typedef struct { | 851 | typedef struct { |
852 | __u16 track_information_length; | 852 | __be16 track_information_length; |
853 | __u8 track_lsb; | 853 | __u8 track_lsb; |
854 | __u8 session_lsb; | 854 | __u8 session_lsb; |
855 | __u8 reserved1; | 855 | __u8 reserved1; |
@@ -880,12 +880,12 @@ typedef struct { | |||
880 | __u8 lra_v : 1; | 880 | __u8 lra_v : 1; |
881 | __u8 reserved3 : 6; | 881 | __u8 reserved3 : 6; |
882 | #endif | 882 | #endif |
883 | __u32 track_start; | 883 | __be32 track_start; |
884 | __u32 next_writable; | 884 | __be32 next_writable; |
885 | __u32 free_blocks; | 885 | __be32 free_blocks; |
886 | __u32 fixed_packet_size; | 886 | __be32 fixed_packet_size; |
887 | __u32 track_size; | 887 | __be32 track_size; |
888 | __u32 last_rec_address; | 888 | __be32 last_rec_address; |
889 | } track_information; | 889 | } track_information; |
890 | 890 | ||
891 | struct feature_header { | 891 | struct feature_header { |
@@ -896,12 +896,12 @@ struct feature_header { | |||
896 | }; | 896 | }; |
897 | 897 | ||
898 | struct mode_page_header { | 898 | struct mode_page_header { |
899 | __u16 mode_data_length; | 899 | __be16 mode_data_length; |
900 | __u8 medium_type; | 900 | __u8 medium_type; |
901 | __u8 reserved1; | 901 | __u8 reserved1; |
902 | __u8 reserved2; | 902 | __u8 reserved2; |
903 | __u8 reserved3; | 903 | __u8 reserved3; |
904 | __u16 desc_length; | 904 | __be16 desc_length; |
905 | }; | 905 | }; |
906 | 906 | ||
907 | #ifdef __KERNEL__ | 907 | #ifdef __KERNEL__ |
@@ -1106,7 +1106,7 @@ typedef struct { | |||
1106 | #endif | 1106 | #endif |
1107 | __u8 session_format; | 1107 | __u8 session_format; |
1108 | __u8 reserved6; | 1108 | __u8 reserved6; |
1109 | __u32 packet_size; | 1109 | __be32 packet_size; |
1110 | __u16 audio_pause; | 1110 | __u16 audio_pause; |
1111 | __u8 mcn[16]; | 1111 | __u8 mcn[16]; |
1112 | __u8 isrc[16]; | 1112 | __u8 isrc[16]; |
@@ -1151,7 +1151,7 @@ typedef struct { | |||
1151 | } rpc_state_t; | 1151 | } rpc_state_t; |
1152 | 1152 | ||
1153 | struct event_header { | 1153 | struct event_header { |
1154 | __u16 data_len; | 1154 | __be16 data_len; |
1155 | #if defined(__BIG_ENDIAN_BITFIELD) | 1155 | #if defined(__BIG_ENDIAN_BITFIELD) |
1156 | __u8 nea : 1; | 1156 | __u8 nea : 1; |
1157 | __u8 reserved1 : 4; | 1157 | __u8 reserved1 : 4; |
diff --git a/include/linux/compat.h b/include/linux/compat.h index ef5cd192784c..f4ebf96f5308 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -163,7 +163,7 @@ asmlinkage long | |||
163 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, | 163 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, |
164 | compat_size_t len); | 164 | compat_size_t len); |
165 | asmlinkage long | 165 | asmlinkage long |
166 | compat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr, | 166 | compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, |
167 | compat_size_t __user *len_ptr); | 167 | compat_size_t __user *len_ptr); |
168 | 168 | ||
169 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); | 169 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); |
diff --git a/include/linux/compat_ioctl.h b/include/linux/compat_ioctl.h index 4e1663d7691e..cfdb4f6a89d4 100644 --- a/include/linux/compat_ioctl.h +++ b/include/linux/compat_ioctl.h | |||
@@ -61,17 +61,23 @@ COMPATIBLE_IOCTL(FIGETBSZ) | |||
61 | * Some need translations, these do not. | 61 | * Some need translations, these do not. |
62 | */ | 62 | */ |
63 | COMPATIBLE_IOCTL(HDIO_GET_IDENTITY) | 63 | COMPATIBLE_IOCTL(HDIO_GET_IDENTITY) |
64 | COMPATIBLE_IOCTL(HDIO_SET_DMA) | ||
65 | COMPATIBLE_IOCTL(HDIO_SET_UNMASKINTR) | ||
66 | COMPATIBLE_IOCTL(HDIO_SET_NOWERR) | ||
67 | COMPATIBLE_IOCTL(HDIO_SET_32BIT) | ||
68 | COMPATIBLE_IOCTL(HDIO_SET_MULTCOUNT) | ||
69 | COMPATIBLE_IOCTL(HDIO_DRIVE_CMD) | ||
70 | COMPATIBLE_IOCTL(HDIO_DRIVE_TASK) | 64 | COMPATIBLE_IOCTL(HDIO_DRIVE_TASK) |
71 | COMPATIBLE_IOCTL(HDIO_SET_PIO_MODE) | 65 | COMPATIBLE_IOCTL(HDIO_DRIVE_CMD) |
72 | COMPATIBLE_IOCTL(HDIO_SET_NICE) | 66 | ULONG_IOCTL(HDIO_SET_MULTCOUNT) |
73 | COMPATIBLE_IOCTL(HDIO_SET_KEEPSETTINGS) | 67 | ULONG_IOCTL(HDIO_SET_UNMASKINTR) |
68 | ULONG_IOCTL(HDIO_SET_KEEPSETTINGS) | ||
69 | ULONG_IOCTL(HDIO_SET_32BIT) | ||
70 | ULONG_IOCTL(HDIO_SET_NOWERR) | ||
71 | ULONG_IOCTL(HDIO_SET_DMA) | ||
72 | ULONG_IOCTL(HDIO_SET_PIO_MODE) | ||
73 | ULONG_IOCTL(HDIO_SET_NICE) | ||
74 | ULONG_IOCTL(HDIO_SET_WCACHE) | ||
75 | ULONG_IOCTL(HDIO_SET_ACOUSTIC) | ||
76 | ULONG_IOCTL(HDIO_SET_BUSSTATE) | ||
77 | ULONG_IOCTL(HDIO_SET_ADDRESS) | ||
74 | COMPATIBLE_IOCTL(HDIO_SCAN_HWIF) | 78 | COMPATIBLE_IOCTL(HDIO_SCAN_HWIF) |
79 | /* 0x330 is reserved -- it used to be HDIO_GETGEO_BIG */ | ||
80 | COMPATIBLE_IOCTL(0x330) | ||
75 | /* 0x02 -- Floppy ioctls */ | 81 | /* 0x02 -- Floppy ioctls */ |
76 | COMPATIBLE_IOCTL(FDMSGON) | 82 | COMPATIBLE_IOCTL(FDMSGON) |
77 | COMPATIBLE_IOCTL(FDMSGOFF) | 83 | COMPATIBLE_IOCTL(FDMSGOFF) |
diff --git a/include/linux/config.h b/include/linux/config.h deleted file mode 100644 index a91f5e55b525..000000000000 --- a/include/linux/config.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef _LINUX_CONFIG_H | ||
2 | #define _LINUX_CONFIG_H | ||
3 | /* This file is no longer in use and kept only for backward compatibility. | ||
4 | * autoconf.h is now included via -imacros on the commandline | ||
5 | */ | ||
6 | #include <linux/autoconf.h> | ||
7 | |||
8 | #endif | ||
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index b268a3c0c376..d0e8c8b0e34d 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * See detailed comments in the file linux/bitmap.h describing the | 8 | * See detailed comments in the file linux/bitmap.h describing the |
9 | * data type on which these cpumasks are based. | 9 | * data type on which these cpumasks are based. |
10 | * | 10 | * |
11 | * For details of cpumask_scnprintf() and cpumask_parse(), | 11 | * For details of cpumask_scnprintf() and cpumask_parse_user(), |
12 | * see bitmap_scnprintf() and bitmap_parse() in lib/bitmap.c. | 12 | * see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c. |
13 | * For details of cpulist_scnprintf() and cpulist_parse(), see | 13 | * For details of cpulist_scnprintf() and cpulist_parse(), see |
14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. | 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. |
15 | * For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c | 15 | * For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c |
@@ -49,7 +49,7 @@ | |||
49 | * unsigned long *cpus_addr(mask) Array of unsigned long's in mask | 49 | * unsigned long *cpus_addr(mask) Array of unsigned long's in mask |
50 | * | 50 | * |
51 | * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing | 51 | * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing |
52 | * int cpumask_parse(ubuf, ulen, mask) Parse ascii string as cpumask | 52 | * int cpumask_parse_user(ubuf, ulen, mask) Parse ascii string as cpumask |
53 | * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing | 53 | * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing |
54 | * int cpulist_parse(buf, map) Parse ascii string as cpulist | 54 | * int cpulist_parse(buf, map) Parse ascii string as cpulist |
55 | * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) | 55 | * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) |
@@ -273,12 +273,12 @@ static inline int __cpumask_scnprintf(char *buf, int len, | |||
273 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); | 273 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); |
274 | } | 274 | } |
275 | 275 | ||
276 | #define cpumask_parse(ubuf, ulen, dst) \ | 276 | #define cpumask_parse_user(ubuf, ulen, dst) \ |
277 | __cpumask_parse((ubuf), (ulen), &(dst), NR_CPUS) | 277 | __cpumask_parse_user((ubuf), (ulen), &(dst), NR_CPUS) |
278 | static inline int __cpumask_parse(const char __user *buf, int len, | 278 | static inline int __cpumask_parse_user(const char __user *buf, int len, |
279 | cpumask_t *dstp, int nbits) | 279 | cpumask_t *dstp, int nbits) |
280 | { | 280 | { |
281 | return bitmap_parse(buf, len, dstp->bits, nbits); | 281 | return bitmap_parse_user(buf, len, dstp->bits, nbits); |
282 | } | 282 | } |
283 | 283 | ||
284 | #define cpulist_scnprintf(buf, len, src) \ | 284 | #define cpulist_scnprintf(buf, len, src) \ |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 44605be59409..63f64a9a5bf7 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -230,6 +230,7 @@ extern struct dentry * d_alloc_anon(struct inode *); | |||
230 | extern struct dentry * d_splice_alias(struct inode *, struct dentry *); | 230 | extern struct dentry * d_splice_alias(struct inode *, struct dentry *); |
231 | extern void shrink_dcache_sb(struct super_block *); | 231 | extern void shrink_dcache_sb(struct super_block *); |
232 | extern void shrink_dcache_parent(struct dentry *); | 232 | extern void shrink_dcache_parent(struct dentry *); |
233 | extern void shrink_dcache_for_umount(struct super_block *); | ||
233 | extern int d_invalidate(struct dentry *); | 234 | extern int d_invalidate(struct dentry *); |
234 | 235 | ||
235 | /* only used at mount-time */ | 236 | /* only used at mount-time */ |
diff --git a/include/linux/dccp.h b/include/linux/dccp.h index d6f4ec467a4b..53553c99cad6 100644 --- a/include/linux/dccp.h +++ b/include/linux/dccp.h | |||
@@ -191,7 +191,7 @@ enum { | |||
191 | /* this structure is argument to DCCP_SOCKOPT_CHANGE_X */ | 191 | /* this structure is argument to DCCP_SOCKOPT_CHANGE_X */ |
192 | struct dccp_so_feat { | 192 | struct dccp_so_feat { |
193 | __u8 dccpsf_feat; | 193 | __u8 dccpsf_feat; |
194 | __u8 *dccpsf_val; | 194 | __u8 __user *dccpsf_val; |
195 | __u8 dccpsf_len; | 195 | __u8 dccpsf_len; |
196 | }; | 196 | }; |
197 | 197 | ||
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index 88dafa246d87..952bee79a8f3 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h | |||
@@ -43,6 +43,8 @@ extern int debug_locks_off(void); | |||
43 | # define locking_selftest() do { } while (0) | 43 | # define locking_selftest() do { } while (0) |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | struct task_struct; | ||
47 | |||
46 | #ifdef CONFIG_LOCKDEP | 48 | #ifdef CONFIG_LOCKDEP |
47 | extern void debug_show_all_locks(void); | 49 | extern void debug_show_all_locks(void); |
48 | extern void debug_show_held_locks(struct task_struct *task); | 50 | extern void debug_show_held_locks(struct task_struct *task); |
diff --git a/include/linux/dlm.h b/include/linux/dlm.h new file mode 100644 index 000000000000..1b1dcb9a40bb --- /dev/null +++ b/include/linux/dlm.h | |||
@@ -0,0 +1,302 @@ | |||
1 | /****************************************************************************** | ||
2 | ******************************************************************************* | ||
3 | ** | ||
4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
5 | ** Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. | ||
6 | ** | ||
7 | ** This copyrighted material is made available to anyone wishing to use, | ||
8 | ** modify, copy, or redistribute it subject to the terms and conditions | ||
9 | ** of the GNU General Public License v.2. | ||
10 | ** | ||
11 | ******************************************************************************* | ||
12 | ******************************************************************************/ | ||
13 | |||
14 | #ifndef __DLM_DOT_H__ | ||
15 | #define __DLM_DOT_H__ | ||
16 | |||
17 | /* | ||
18 | * Interface to Distributed Lock Manager (DLM) | ||
19 | * routines and structures to use DLM lockspaces | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | * Lock Modes | ||
24 | */ | ||
25 | |||
26 | #define DLM_LOCK_IV -1 /* invalid */ | ||
27 | #define DLM_LOCK_NL 0 /* null */ | ||
28 | #define DLM_LOCK_CR 1 /* concurrent read */ | ||
29 | #define DLM_LOCK_CW 2 /* concurrent write */ | ||
30 | #define DLM_LOCK_PR 3 /* protected read */ | ||
31 | #define DLM_LOCK_PW 4 /* protected write */ | ||
32 | #define DLM_LOCK_EX 5 /* exclusive */ | ||
33 | |||
34 | /* | ||
35 | * Maximum size in bytes of a dlm_lock name | ||
36 | */ | ||
37 | |||
38 | #define DLM_RESNAME_MAXLEN 64 | ||
39 | |||
40 | /* | ||
41 | * Flags to dlm_lock | ||
42 | * | ||
43 | * DLM_LKF_NOQUEUE | ||
44 | * | ||
45 | * Do not queue the lock request on the wait queue if it cannot be granted | ||
46 | * immediately. If the lock cannot be granted because of this flag, DLM will | ||
47 | * either return -EAGAIN from the dlm_lock call or will return 0 from | ||
48 | * dlm_lock and -EAGAIN in the lock status block when the AST is executed. | ||
49 | * | ||
50 | * DLM_LKF_CANCEL | ||
51 | * | ||
52 | * Used to cancel a pending lock request or conversion. A converting lock is | ||
53 | * returned to its previously granted mode. | ||
54 | * | ||
55 | * DLM_LKF_CONVERT | ||
56 | * | ||
57 | * Indicates a lock conversion request. For conversions the name and namelen | ||
58 | * are ignored and the lock ID in the LKSB is used to identify the lock. | ||
59 | * | ||
60 | * DLM_LKF_VALBLK | ||
61 | * | ||
62 | * Requests DLM to return the current contents of the lock value block in the | ||
63 | * lock status block. When this flag is set in a lock conversion from PW or EX | ||
64 | * modes, DLM assigns the value specified in the lock status block to the lock | ||
65 | * value block of the lock resource. The LVB is a DLM_LVB_LEN size array | ||
66 | * containing application-specific information. | ||
67 | * | ||
68 | * DLM_LKF_QUECVT | ||
69 | * | ||
70 | * Force a conversion request to be queued, even if it is compatible with | ||
71 | * the granted modes of other locks on the same resource. | ||
72 | * | ||
73 | * DLM_LKF_IVVALBLK | ||
74 | * | ||
75 | * Invalidate the lock value block. | ||
76 | * | ||
77 | * DLM_LKF_CONVDEADLK | ||
78 | * | ||
79 | * Allows the dlm to resolve conversion deadlocks internally by demoting the | ||
80 | * granted mode of a converting lock to NL. The DLM_SBF_DEMOTED flag is | ||
81 | * returned for a conversion that's been effected by this. | ||
82 | * | ||
83 | * DLM_LKF_PERSISTENT | ||
84 | * | ||
85 | * Only relevant to locks originating in userspace. A persistent lock will not | ||
86 | * be removed if the process holding the lock exits. | ||
87 | * | ||
88 | * DLM_LKF_NODLKWT | ||
89 | * DLM_LKF_NODLCKBLK | ||
90 | * | ||
91 | * net yet implemented | ||
92 | * | ||
93 | * DLM_LKF_EXPEDITE | ||
94 | * | ||
95 | * Used only with new requests for NL mode locks. Tells the lock manager | ||
96 | * to grant the lock, ignoring other locks in convert and wait queues. | ||
97 | * | ||
98 | * DLM_LKF_NOQUEUEBAST | ||
99 | * | ||
100 | * Send blocking AST's before returning -EAGAIN to the caller. It is only | ||
101 | * used along with the NOQUEUE flag. Blocking AST's are not sent for failed | ||
102 | * NOQUEUE requests otherwise. | ||
103 | * | ||
104 | * DLM_LKF_HEADQUE | ||
105 | * | ||
106 | * Add a lock to the head of the convert or wait queue rather than the tail. | ||
107 | * | ||
108 | * DLM_LKF_NOORDER | ||
109 | * | ||
110 | * Disregard the standard grant order rules and grant a lock as soon as it | ||
111 | * is compatible with other granted locks. | ||
112 | * | ||
113 | * DLM_LKF_ORPHAN | ||
114 | * | ||
115 | * not yet implemented | ||
116 | * | ||
117 | * DLM_LKF_ALTPR | ||
118 | * | ||
119 | * If the requested mode cannot be granted immediately, try to grant the lock | ||
120 | * in PR mode instead. If this alternate mode is granted instead of the | ||
121 | * requested mode, DLM_SBF_ALTMODE is returned in the lksb. | ||
122 | * | ||
123 | * DLM_LKF_ALTCW | ||
124 | * | ||
125 | * The same as ALTPR, but the alternate mode is CW. | ||
126 | * | ||
127 | * DLM_LKF_FORCEUNLOCK | ||
128 | * | ||
129 | * Unlock the lock even if it is converting or waiting or has sublocks. | ||
130 | * Only really for use by the userland device.c code. | ||
131 | * | ||
132 | */ | ||
133 | |||
134 | #define DLM_LKF_NOQUEUE 0x00000001 | ||
135 | #define DLM_LKF_CANCEL 0x00000002 | ||
136 | #define DLM_LKF_CONVERT 0x00000004 | ||
137 | #define DLM_LKF_VALBLK 0x00000008 | ||
138 | #define DLM_LKF_QUECVT 0x00000010 | ||
139 | #define DLM_LKF_IVVALBLK 0x00000020 | ||
140 | #define DLM_LKF_CONVDEADLK 0x00000040 | ||
141 | #define DLM_LKF_PERSISTENT 0x00000080 | ||
142 | #define DLM_LKF_NODLCKWT 0x00000100 | ||
143 | #define DLM_LKF_NODLCKBLK 0x00000200 | ||
144 | #define DLM_LKF_EXPEDITE 0x00000400 | ||
145 | #define DLM_LKF_NOQUEUEBAST 0x00000800 | ||
146 | #define DLM_LKF_HEADQUE 0x00001000 | ||
147 | #define DLM_LKF_NOORDER 0x00002000 | ||
148 | #define DLM_LKF_ORPHAN 0x00004000 | ||
149 | #define DLM_LKF_ALTPR 0x00008000 | ||
150 | #define DLM_LKF_ALTCW 0x00010000 | ||
151 | #define DLM_LKF_FORCEUNLOCK 0x00020000 | ||
152 | |||
153 | /* | ||
154 | * Some return codes that are not in errno.h | ||
155 | */ | ||
156 | |||
157 | #define DLM_ECANCEL 0x10001 | ||
158 | #define DLM_EUNLOCK 0x10002 | ||
159 | |||
160 | typedef void dlm_lockspace_t; | ||
161 | |||
162 | /* | ||
163 | * Lock status block | ||
164 | * | ||
165 | * Use this structure to specify the contents of the lock value block. For a | ||
166 | * conversion request, this structure is used to specify the lock ID of the | ||
167 | * lock. DLM writes the status of the lock request and the lock ID assigned | ||
168 | * to the request in the lock status block. | ||
169 | * | ||
170 | * sb_lkid: the returned lock ID. It is set on new (non-conversion) requests. | ||
171 | * It is available when dlm_lock returns. | ||
172 | * | ||
173 | * sb_lvbptr: saves or returns the contents of the lock's LVB according to rules | ||
174 | * shown for the DLM_LKF_VALBLK flag. | ||
175 | * | ||
176 | * sb_flags: DLM_SBF_DEMOTED is returned if in the process of promoting a lock, | ||
177 | * it was first demoted to NL to avoid conversion deadlock. | ||
178 | * DLM_SBF_VALNOTVALID is returned if the resource's LVB is marked invalid. | ||
179 | * | ||
180 | * sb_status: the returned status of the lock request set prior to AST | ||
181 | * execution. Possible return values: | ||
182 | * | ||
183 | * 0 if lock request was successful | ||
184 | * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE | ||
185 | * -ENOMEM if there is no memory to process request | ||
186 | * -EINVAL if there are invalid parameters | ||
187 | * -DLM_EUNLOCK if unlock request was successful | ||
188 | * -DLM_ECANCEL if a cancel completed successfully | ||
189 | */ | ||
190 | |||
191 | #define DLM_SBF_DEMOTED 0x01 | ||
192 | #define DLM_SBF_VALNOTVALID 0x02 | ||
193 | #define DLM_SBF_ALTMODE 0x04 | ||
194 | |||
195 | struct dlm_lksb { | ||
196 | int sb_status; | ||
197 | uint32_t sb_lkid; | ||
198 | char sb_flags; | ||
199 | char * sb_lvbptr; | ||
200 | }; | ||
201 | |||
202 | |||
203 | #ifdef __KERNEL__ | ||
204 | |||
205 | #define DLM_LSFL_NODIR 0x00000001 | ||
206 | |||
207 | /* | ||
208 | * dlm_new_lockspace | ||
209 | * | ||
210 | * Starts a lockspace with the given name. If the named lockspace exists in | ||
211 | * the cluster, the calling node joins it. | ||
212 | */ | ||
213 | |||
214 | int dlm_new_lockspace(char *name, int namelen, dlm_lockspace_t **lockspace, | ||
215 | uint32_t flags, int lvblen); | ||
216 | |||
217 | /* | ||
218 | * dlm_release_lockspace | ||
219 | * | ||
220 | * Stop a lockspace. | ||
221 | */ | ||
222 | |||
223 | int dlm_release_lockspace(dlm_lockspace_t *lockspace, int force); | ||
224 | |||
225 | /* | ||
226 | * dlm_lock | ||
227 | * | ||
228 | * Make an asyncronous request to acquire or convert a lock on a named | ||
229 | * resource. | ||
230 | * | ||
231 | * lockspace: context for the request | ||
232 | * mode: the requested mode of the lock (DLM_LOCK_) | ||
233 | * lksb: lock status block for input and async return values | ||
234 | * flags: input flags (DLM_LKF_) | ||
235 | * name: name of the resource to lock, can be binary | ||
236 | * namelen: the length in bytes of the resource name (MAX_RESNAME_LEN) | ||
237 | * parent: the lock ID of a parent lock or 0 if none | ||
238 | * lockast: function DLM executes when it completes processing the request | ||
239 | * astarg: argument passed to lockast and bast functions | ||
240 | * bast: function DLM executes when this lock later blocks another request | ||
241 | * | ||
242 | * Returns: | ||
243 | * 0 if request is successfully queued for processing | ||
244 | * -EINVAL if any input parameters are invalid | ||
245 | * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE | ||
246 | * -ENOMEM if there is no memory to process request | ||
247 | * -ENOTCONN if there is a communication error | ||
248 | * | ||
249 | * If the call to dlm_lock returns an error then the operation has failed and | ||
250 | * the AST routine will not be called. If dlm_lock returns 0 it is still | ||
251 | * possible that the lock operation will fail. The AST routine will be called | ||
252 | * when the locking is complete and the status is returned in the lksb. | ||
253 | * | ||
254 | * If the AST routines or parameter are passed to a conversion operation then | ||
255 | * they will overwrite those values that were passed to a previous dlm_lock | ||
256 | * call. | ||
257 | * | ||
258 | * AST routines should not block (at least not for long), but may make | ||
259 | * any locking calls they please. | ||
260 | */ | ||
261 | |||
262 | int dlm_lock(dlm_lockspace_t *lockspace, | ||
263 | int mode, | ||
264 | struct dlm_lksb *lksb, | ||
265 | uint32_t flags, | ||
266 | void *name, | ||
267 | unsigned int namelen, | ||
268 | uint32_t parent_lkid, | ||
269 | void (*lockast) (void *astarg), | ||
270 | void *astarg, | ||
271 | void (*bast) (void *astarg, int mode)); | ||
272 | |||
273 | /* | ||
274 | * dlm_unlock | ||
275 | * | ||
276 | * Asynchronously release a lock on a resource. The AST routine is called | ||
277 | * when the resource is successfully unlocked. | ||
278 | * | ||
279 | * lockspace: context for the request | ||
280 | * lkid: the lock ID as returned in the lksb | ||
281 | * flags: input flags (DLM_LKF_) | ||
282 | * lksb: if NULL the lksb parameter passed to last lock request is used | ||
283 | * astarg: the arg used with the completion ast for the unlock | ||
284 | * | ||
285 | * Returns: | ||
286 | * 0 if request is successfully queued for processing | ||
287 | * -EINVAL if any input parameters are invalid | ||
288 | * -ENOTEMPTY if the lock still has sublocks | ||
289 | * -EBUSY if the lock is waiting for a remote lock operation | ||
290 | * -ENOTCONN if there is a communication error | ||
291 | */ | ||
292 | |||
293 | int dlm_unlock(dlm_lockspace_t *lockspace, | ||
294 | uint32_t lkid, | ||
295 | uint32_t flags, | ||
296 | struct dlm_lksb *lksb, | ||
297 | void *astarg); | ||
298 | |||
299 | #endif /* __KERNEL__ */ | ||
300 | |||
301 | #endif /* __DLM_DOT_H__ */ | ||
302 | |||
diff --git a/include/linux/dlm_device.h b/include/linux/dlm_device.h new file mode 100644 index 000000000000..2a2dd189b9fd --- /dev/null +++ b/include/linux/dlm_device.h | |||
@@ -0,0 +1,86 @@ | |||
1 | /****************************************************************************** | ||
2 | ******************************************************************************* | ||
3 | ** | ||
4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
5 | ** Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. | ||
6 | ** | ||
7 | ** This copyrighted material is made available to anyone wishing to use, | ||
8 | ** modify, copy, or redistribute it subject to the terms and conditions | ||
9 | ** of the GNU General Public License v.2. | ||
10 | ** | ||
11 | ******************************************************************************* | ||
12 | ******************************************************************************/ | ||
13 | |||
14 | /* This is the device interface for dlm, most users will use a library | ||
15 | * interface. | ||
16 | */ | ||
17 | |||
18 | #define DLM_USER_LVB_LEN 32 | ||
19 | |||
20 | /* Version of the device interface */ | ||
21 | #define DLM_DEVICE_VERSION_MAJOR 5 | ||
22 | #define DLM_DEVICE_VERSION_MINOR 0 | ||
23 | #define DLM_DEVICE_VERSION_PATCH 0 | ||
24 | |||
25 | /* struct passed to the lock write */ | ||
26 | struct dlm_lock_params { | ||
27 | __u8 mode; | ||
28 | __u8 namelen; | ||
29 | __u16 flags; | ||
30 | __u32 lkid; | ||
31 | __u32 parent; | ||
32 | void __user *castparam; | ||
33 | void __user *castaddr; | ||
34 | void __user *bastparam; | ||
35 | void __user *bastaddr; | ||
36 | struct dlm_lksb __user *lksb; | ||
37 | char lvb[DLM_USER_LVB_LEN]; | ||
38 | char name[0]; | ||
39 | }; | ||
40 | |||
41 | struct dlm_lspace_params { | ||
42 | __u32 flags; | ||
43 | __u32 minor; | ||
44 | char name[0]; | ||
45 | }; | ||
46 | |||
47 | struct dlm_write_request { | ||
48 | __u32 version[3]; | ||
49 | __u8 cmd; | ||
50 | __u8 is64bit; | ||
51 | __u8 unused[2]; | ||
52 | |||
53 | union { | ||
54 | struct dlm_lock_params lock; | ||
55 | struct dlm_lspace_params lspace; | ||
56 | } i; | ||
57 | }; | ||
58 | |||
59 | /* struct read from the "device" fd, | ||
60 | consists mainly of userspace pointers for the library to use */ | ||
61 | struct dlm_lock_result { | ||
62 | __u32 length; | ||
63 | void __user * user_astaddr; | ||
64 | void __user * user_astparam; | ||
65 | struct dlm_lksb __user * user_lksb; | ||
66 | struct dlm_lksb lksb; | ||
67 | __u8 bast_mode; | ||
68 | __u8 unused[3]; | ||
69 | /* Offsets may be zero if no data is present */ | ||
70 | __u32 lvb_offset; | ||
71 | }; | ||
72 | |||
73 | /* Commands passed to the device */ | ||
74 | #define DLM_USER_LOCK 1 | ||
75 | #define DLM_USER_UNLOCK 2 | ||
76 | #define DLM_USER_QUERY 3 | ||
77 | #define DLM_USER_CREATE_LOCKSPACE 4 | ||
78 | #define DLM_USER_REMOVE_LOCKSPACE 5 | ||
79 | |||
80 | /* Arbitrary length restriction */ | ||
81 | #define MAX_LS_NAME_LEN 64 | ||
82 | |||
83 | /* Lockspace flags */ | ||
84 | #define DLM_USER_LSFLG_AUTOFREE 1 | ||
85 | #define DLM_USER_LSFLG_FORCEFREE 2 | ||
86 | |||
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index b3370ef5164d..2fa9f1144228 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
@@ -70,7 +70,6 @@ struct elevator_type | |||
70 | { | 70 | { |
71 | struct list_head list; | 71 | struct list_head list; |
72 | struct elevator_ops ops; | 72 | struct elevator_ops ops; |
73 | struct elevator_type *elevator_type; | ||
74 | struct elv_fs_entry *elevator_attrs; | 73 | struct elv_fs_entry *elevator_attrs; |
75 | char elevator_name[ELV_NAME_MAX]; | 74 | char elevator_name[ELV_NAME_MAX]; |
76 | struct module *elevator_owner; | 75 | struct module *elevator_owner; |
diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h new file mode 100644 index 000000000000..498503ee613d --- /dev/null +++ b/include/linux/ext4_fs.h | |||
@@ -0,0 +1,994 @@ | |||
1 | /* | ||
2 | * linux/include/linux/ext4_fs.h | ||
3 | * | ||
4 | * Copyright (C) 1992, 1993, 1994, 1995 | ||
5 | * Remy Card (card@masi.ibp.fr) | ||
6 | * Laboratoire MASI - Institut Blaise Pascal | ||
7 | * Universite Pierre et Marie Curie (Paris VI) | ||
8 | * | ||
9 | * from | ||
10 | * | ||
11 | * linux/include/linux/minix_fs.h | ||
12 | * | ||
13 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
14 | */ | ||
15 | |||
16 | #ifndef _LINUX_EXT4_FS_H | ||
17 | #define _LINUX_EXT4_FS_H | ||
18 | |||
19 | #include <linux/types.h> | ||
20 | #include <linux/blkdev.h> | ||
21 | #include <linux/magic.h> | ||
22 | |||
23 | /* | ||
24 | * The second extended filesystem constants/structures | ||
25 | */ | ||
26 | |||
27 | /* | ||
28 | * Define EXT4FS_DEBUG to produce debug messages | ||
29 | */ | ||
30 | #undef EXT4FS_DEBUG | ||
31 | |||
32 | /* | ||
33 | * Define EXT4_RESERVATION to reserve data blocks for expanding files | ||
34 | */ | ||
35 | #define EXT4_DEFAULT_RESERVE_BLOCKS 8 | ||
36 | /*max window size: 1024(direct blocks) + 3([t,d]indirect blocks) */ | ||
37 | #define EXT4_MAX_RESERVE_BLOCKS 1027 | ||
38 | #define EXT4_RESERVE_WINDOW_NOT_ALLOCATED 0 | ||
39 | /* | ||
40 | * Always enable hashed directories | ||
41 | */ | ||
42 | #define CONFIG_EXT4_INDEX | ||
43 | |||
44 | /* | ||
45 | * Debug code | ||
46 | */ | ||
47 | #ifdef EXT4FS_DEBUG | ||
48 | #define ext4_debug(f, a...) \ | ||
49 | do { \ | ||
50 | printk (KERN_DEBUG "EXT4-fs DEBUG (%s, %d): %s:", \ | ||
51 | __FILE__, __LINE__, __FUNCTION__); \ | ||
52 | printk (KERN_DEBUG f, ## a); \ | ||
53 | } while (0) | ||
54 | #else | ||
55 | #define ext4_debug(f, a...) do {} while (0) | ||
56 | #endif | ||
57 | |||
58 | /* | ||
59 | * Special inodes numbers | ||
60 | */ | ||
61 | #define EXT4_BAD_INO 1 /* Bad blocks inode */ | ||
62 | #define EXT4_ROOT_INO 2 /* Root inode */ | ||
63 | #define EXT4_BOOT_LOADER_INO 5 /* Boot loader inode */ | ||
64 | #define EXT4_UNDEL_DIR_INO 6 /* Undelete directory inode */ | ||
65 | #define EXT4_RESIZE_INO 7 /* Reserved group descriptors inode */ | ||
66 | #define EXT4_JOURNAL_INO 8 /* Journal inode */ | ||
67 | |||
68 | /* First non-reserved inode for old ext4 filesystems */ | ||
69 | #define EXT4_GOOD_OLD_FIRST_INO 11 | ||
70 | |||
71 | /* | ||
72 | * Maximal count of links to a file | ||
73 | */ | ||
74 | #define EXT4_LINK_MAX 32000 | ||
75 | |||
76 | /* | ||
77 | * Macro-instructions used to manage several block sizes | ||
78 | */ | ||
79 | #define EXT4_MIN_BLOCK_SIZE 1024 | ||
80 | #define EXT4_MAX_BLOCK_SIZE 4096 | ||
81 | #define EXT4_MIN_BLOCK_LOG_SIZE 10 | ||
82 | #ifdef __KERNEL__ | ||
83 | # define EXT4_BLOCK_SIZE(s) ((s)->s_blocksize) | ||
84 | #else | ||
85 | # define EXT4_BLOCK_SIZE(s) (EXT4_MIN_BLOCK_SIZE << (s)->s_log_block_size) | ||
86 | #endif | ||
87 | #define EXT4_ADDR_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / sizeof (__u32)) | ||
88 | #ifdef __KERNEL__ | ||
89 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits) | ||
90 | #else | ||
91 | # define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) | ||
92 | #endif | ||
93 | #ifdef __KERNEL__ | ||
94 | #define EXT4_ADDR_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_addr_per_block_bits) | ||
95 | #define EXT4_INODE_SIZE(s) (EXT4_SB(s)->s_inode_size) | ||
96 | #define EXT4_FIRST_INO(s) (EXT4_SB(s)->s_first_ino) | ||
97 | #else | ||
98 | #define EXT4_INODE_SIZE(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \ | ||
99 | EXT4_GOOD_OLD_INODE_SIZE : \ | ||
100 | (s)->s_inode_size) | ||
101 | #define EXT4_FIRST_INO(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \ | ||
102 | EXT4_GOOD_OLD_FIRST_INO : \ | ||
103 | (s)->s_first_ino) | ||
104 | #endif | ||
105 | |||
106 | /* | ||
107 | * Macro-instructions used to manage fragments | ||
108 | */ | ||
109 | #define EXT4_MIN_FRAG_SIZE 1024 | ||
110 | #define EXT4_MAX_FRAG_SIZE 4096 | ||
111 | #define EXT4_MIN_FRAG_LOG_SIZE 10 | ||
112 | #ifdef __KERNEL__ | ||
113 | # define EXT4_FRAG_SIZE(s) (EXT4_SB(s)->s_frag_size) | ||
114 | # define EXT4_FRAGS_PER_BLOCK(s) (EXT4_SB(s)->s_frags_per_block) | ||
115 | #else | ||
116 | # define EXT4_FRAG_SIZE(s) (EXT4_MIN_FRAG_SIZE << (s)->s_log_frag_size) | ||
117 | # define EXT4_FRAGS_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / EXT4_FRAG_SIZE(s)) | ||
118 | #endif | ||
119 | |||
120 | /* | ||
121 | * Structure of a blocks group descriptor | ||
122 | */ | ||
123 | struct ext4_group_desc | ||
124 | { | ||
125 | __le32 bg_block_bitmap; /* Blocks bitmap block */ | ||
126 | __le32 bg_inode_bitmap; /* Inodes bitmap block */ | ||
127 | __le32 bg_inode_table; /* Inodes table block */ | ||
128 | __le16 bg_free_blocks_count; /* Free blocks count */ | ||
129 | __le16 bg_free_inodes_count; /* Free inodes count */ | ||
130 | __le16 bg_used_dirs_count; /* Directories count */ | ||
131 | __u16 bg_flags; | ||
132 | __u32 bg_reserved[3]; | ||
133 | __le32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */ | ||
134 | __le32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */ | ||
135 | __le32 bg_inode_table_hi; /* Inodes table block MSB */ | ||
136 | }; | ||
137 | |||
138 | #ifdef __KERNEL__ | ||
139 | #include <linux/ext4_fs_i.h> | ||
140 | #include <linux/ext4_fs_sb.h> | ||
141 | #endif | ||
142 | /* | ||
143 | * Macro-instructions used to manage group descriptors | ||
144 | */ | ||
145 | #define EXT4_MIN_DESC_SIZE 32 | ||
146 | #define EXT4_MIN_DESC_SIZE_64BIT 64 | ||
147 | #define EXT4_MAX_DESC_SIZE EXT4_MIN_BLOCK_SIZE | ||
148 | #define EXT4_DESC_SIZE(s) (EXT4_SB(s)->s_desc_size) | ||
149 | #ifdef __KERNEL__ | ||
150 | # define EXT4_BLOCKS_PER_GROUP(s) (EXT4_SB(s)->s_blocks_per_group) | ||
151 | # define EXT4_DESC_PER_BLOCK(s) (EXT4_SB(s)->s_desc_per_block) | ||
152 | # define EXT4_INODES_PER_GROUP(s) (EXT4_SB(s)->s_inodes_per_group) | ||
153 | # define EXT4_DESC_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_desc_per_block_bits) | ||
154 | #else | ||
155 | # define EXT4_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group) | ||
156 | # define EXT4_DESC_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / EXT4_DESC_SIZE(s)) | ||
157 | # define EXT4_INODES_PER_GROUP(s) ((s)->s_inodes_per_group) | ||
158 | #endif | ||
159 | |||
160 | /* | ||
161 | * Constants relative to the data blocks | ||
162 | */ | ||
163 | #define EXT4_NDIR_BLOCKS 12 | ||
164 | #define EXT4_IND_BLOCK EXT4_NDIR_BLOCKS | ||
165 | #define EXT4_DIND_BLOCK (EXT4_IND_BLOCK + 1) | ||
166 | #define EXT4_TIND_BLOCK (EXT4_DIND_BLOCK + 1) | ||
167 | #define EXT4_N_BLOCKS (EXT4_TIND_BLOCK + 1) | ||
168 | |||
169 | /* | ||
170 | * Inode flags | ||
171 | */ | ||
172 | #define EXT4_SECRM_FL 0x00000001 /* Secure deletion */ | ||
173 | #define EXT4_UNRM_FL 0x00000002 /* Undelete */ | ||
174 | #define EXT4_COMPR_FL 0x00000004 /* Compress file */ | ||
175 | #define EXT4_SYNC_FL 0x00000008 /* Synchronous updates */ | ||
176 | #define EXT4_IMMUTABLE_FL 0x00000010 /* Immutable file */ | ||
177 | #define EXT4_APPEND_FL 0x00000020 /* writes to file may only append */ | ||
178 | #define EXT4_NODUMP_FL 0x00000040 /* do not dump file */ | ||
179 | #define EXT4_NOATIME_FL 0x00000080 /* do not update atime */ | ||
180 | /* Reserved for compression usage... */ | ||
181 | #define EXT4_DIRTY_FL 0x00000100 | ||
182 | #define EXT4_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */ | ||
183 | #define EXT4_NOCOMPR_FL 0x00000400 /* Don't compress */ | ||
184 | #define EXT4_ECOMPR_FL 0x00000800 /* Compression error */ | ||
185 | /* End compression flags --- maybe not all used */ | ||
186 | #define EXT4_INDEX_FL 0x00001000 /* hash-indexed directory */ | ||
187 | #define EXT4_IMAGIC_FL 0x00002000 /* AFS directory */ | ||
188 | #define EXT4_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */ | ||
189 | #define EXT4_NOTAIL_FL 0x00008000 /* file tail should not be merged */ | ||
190 | #define EXT4_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ | ||
191 | #define EXT4_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ | ||
192 | #define EXT4_RESERVED_FL 0x80000000 /* reserved for ext4 lib */ | ||
193 | #define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ | ||
194 | |||
195 | #define EXT4_FL_USER_VISIBLE 0x000BDFFF /* User visible flags */ | ||
196 | #define EXT4_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */ | ||
197 | |||
198 | /* | ||
199 | * Inode dynamic state flags | ||
200 | */ | ||
201 | #define EXT4_STATE_JDATA 0x00000001 /* journaled data exists */ | ||
202 | #define EXT4_STATE_NEW 0x00000002 /* inode is newly created */ | ||
203 | #define EXT4_STATE_XATTR 0x00000004 /* has in-inode xattrs */ | ||
204 | |||
205 | /* Used to pass group descriptor data when online resize is done */ | ||
206 | struct ext4_new_group_input { | ||
207 | __u32 group; /* Group number for this data */ | ||
208 | __u64 block_bitmap; /* Absolute block number of block bitmap */ | ||
209 | __u64 inode_bitmap; /* Absolute block number of inode bitmap */ | ||
210 | __u64 inode_table; /* Absolute block number of inode table start */ | ||
211 | __u32 blocks_count; /* Total number of blocks in this group */ | ||
212 | __u16 reserved_blocks; /* Number of reserved blocks in this group */ | ||
213 | __u16 unused; | ||
214 | }; | ||
215 | |||
216 | /* The struct ext4_new_group_input in kernel space, with free_blocks_count */ | ||
217 | struct ext4_new_group_data { | ||
218 | __u32 group; | ||
219 | __u64 block_bitmap; | ||
220 | __u64 inode_bitmap; | ||
221 | __u64 inode_table; | ||
222 | __u32 blocks_count; | ||
223 | __u16 reserved_blocks; | ||
224 | __u16 unused; | ||
225 | __u32 free_blocks_count; | ||
226 | }; | ||
227 | |||
228 | |||
229 | /* | ||
230 | * ioctl commands | ||
231 | */ | ||
232 | #define EXT4_IOC_GETFLAGS FS_IOC_GETFLAGS | ||
233 | #define EXT4_IOC_SETFLAGS FS_IOC_SETFLAGS | ||
234 | #define EXT4_IOC_GETVERSION _IOR('f', 3, long) | ||
235 | #define EXT4_IOC_SETVERSION _IOW('f', 4, long) | ||
236 | #define EXT4_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long) | ||
237 | #define EXT4_IOC_GROUP_ADD _IOW('f', 8,struct ext4_new_group_input) | ||
238 | #define EXT4_IOC_GETVERSION_OLD FS_IOC_GETVERSION | ||
239 | #define EXT4_IOC_SETVERSION_OLD FS_IOC_SETVERSION | ||
240 | #ifdef CONFIG_JBD_DEBUG | ||
241 | #define EXT4_IOC_WAIT_FOR_READONLY _IOR('f', 99, long) | ||
242 | #endif | ||
243 | #define EXT4_IOC_GETRSVSZ _IOR('f', 5, long) | ||
244 | #define EXT4_IOC_SETRSVSZ _IOW('f', 6, long) | ||
245 | |||
246 | /* | ||
247 | * ioctl commands in 32 bit emulation | ||
248 | */ | ||
249 | #define EXT4_IOC32_GETFLAGS FS_IOC32_GETFLAGS | ||
250 | #define EXT4_IOC32_SETFLAGS FS_IOC32_SETFLAGS | ||
251 | #define EXT4_IOC32_GETVERSION _IOR('f', 3, int) | ||
252 | #define EXT4_IOC32_SETVERSION _IOW('f', 4, int) | ||
253 | #define EXT4_IOC32_GETRSVSZ _IOR('f', 5, int) | ||
254 | #define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int) | ||
255 | #define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int) | ||
256 | #ifdef CONFIG_JBD_DEBUG | ||
257 | #define EXT4_IOC32_WAIT_FOR_READONLY _IOR('f', 99, int) | ||
258 | #endif | ||
259 | #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION | ||
260 | #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION | ||
261 | |||
262 | |||
263 | /* | ||
264 | * Mount options | ||
265 | */ | ||
266 | struct ext4_mount_options { | ||
267 | unsigned long s_mount_opt; | ||
268 | uid_t s_resuid; | ||
269 | gid_t s_resgid; | ||
270 | unsigned long s_commit_interval; | ||
271 | #ifdef CONFIG_QUOTA | ||
272 | int s_jquota_fmt; | ||
273 | char *s_qf_names[MAXQUOTAS]; | ||
274 | #endif | ||
275 | }; | ||
276 | |||
277 | /* | ||
278 | * Structure of an inode on the disk | ||
279 | */ | ||
280 | struct ext4_inode { | ||
281 | __le16 i_mode; /* File mode */ | ||
282 | __le16 i_uid; /* Low 16 bits of Owner Uid */ | ||
283 | __le32 i_size; /* Size in bytes */ | ||
284 | __le32 i_atime; /* Access time */ | ||
285 | __le32 i_ctime; /* Creation time */ | ||
286 | __le32 i_mtime; /* Modification time */ | ||
287 | __le32 i_dtime; /* Deletion Time */ | ||
288 | __le16 i_gid; /* Low 16 bits of Group Id */ | ||
289 | __le16 i_links_count; /* Links count */ | ||
290 | __le32 i_blocks; /* Blocks count */ | ||
291 | __le32 i_flags; /* File flags */ | ||
292 | union { | ||
293 | struct { | ||
294 | __u32 l_i_reserved1; | ||
295 | } linux1; | ||
296 | struct { | ||
297 | __u32 h_i_translator; | ||
298 | } hurd1; | ||
299 | struct { | ||
300 | __u32 m_i_reserved1; | ||
301 | } masix1; | ||
302 | } osd1; /* OS dependent 1 */ | ||
303 | __le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */ | ||
304 | __le32 i_generation; /* File version (for NFS) */ | ||
305 | __le32 i_file_acl; /* File ACL */ | ||
306 | __le32 i_dir_acl; /* Directory ACL */ | ||
307 | __le32 i_faddr; /* Fragment address */ | ||
308 | union { | ||
309 | struct { | ||
310 | __u8 l_i_frag; /* Fragment number */ | ||
311 | __u8 l_i_fsize; /* Fragment size */ | ||
312 | __le16 l_i_file_acl_high; | ||
313 | __le16 l_i_uid_high; /* these 2 fields */ | ||
314 | __le16 l_i_gid_high; /* were reserved2[0] */ | ||
315 | __u32 l_i_reserved2; | ||
316 | } linux2; | ||
317 | struct { | ||
318 | __u8 h_i_frag; /* Fragment number */ | ||
319 | __u8 h_i_fsize; /* Fragment size */ | ||
320 | __u16 h_i_mode_high; | ||
321 | __u16 h_i_uid_high; | ||
322 | __u16 h_i_gid_high; | ||
323 | __u32 h_i_author; | ||
324 | } hurd2; | ||
325 | struct { | ||
326 | __u8 m_i_frag; /* Fragment number */ | ||
327 | __u8 m_i_fsize; /* Fragment size */ | ||
328 | __le16 m_i_file_acl_high; | ||
329 | __u32 m_i_reserved2[2]; | ||
330 | } masix2; | ||
331 | } osd2; /* OS dependent 2 */ | ||
332 | __le16 i_extra_isize; | ||
333 | __le16 i_pad1; | ||
334 | }; | ||
335 | |||
336 | #define i_size_high i_dir_acl | ||
337 | |||
338 | #if defined(__KERNEL__) || defined(__linux__) | ||
339 | #define i_reserved1 osd1.linux1.l_i_reserved1 | ||
340 | #define i_frag osd2.linux2.l_i_frag | ||
341 | #define i_fsize osd2.linux2.l_i_fsize | ||
342 | #define i_file_acl_high osd2.linux2.l_i_file_acl_high | ||
343 | #define i_uid_low i_uid | ||
344 | #define i_gid_low i_gid | ||
345 | #define i_uid_high osd2.linux2.l_i_uid_high | ||
346 | #define i_gid_high osd2.linux2.l_i_gid_high | ||
347 | #define i_reserved2 osd2.linux2.l_i_reserved2 | ||
348 | |||
349 | #elif defined(__GNU__) | ||
350 | |||
351 | #define i_translator osd1.hurd1.h_i_translator | ||
352 | #define i_frag osd2.hurd2.h_i_frag; | ||
353 | #define i_fsize osd2.hurd2.h_i_fsize; | ||
354 | #define i_uid_high osd2.hurd2.h_i_uid_high | ||
355 | #define i_gid_high osd2.hurd2.h_i_gid_high | ||
356 | #define i_author osd2.hurd2.h_i_author | ||
357 | |||
358 | #elif defined(__masix__) | ||
359 | |||
360 | #define i_reserved1 osd1.masix1.m_i_reserved1 | ||
361 | #define i_frag osd2.masix2.m_i_frag | ||
362 | #define i_fsize osd2.masix2.m_i_fsize | ||
363 | #define i_file_acl_high osd2.masix2.m_i_file_acl_high | ||
364 | #define i_reserved2 osd2.masix2.m_i_reserved2 | ||
365 | |||
366 | #endif /* defined(__KERNEL__) || defined(__linux__) */ | ||
367 | |||
368 | /* | ||
369 | * File system states | ||
370 | */ | ||
371 | #define EXT4_VALID_FS 0x0001 /* Unmounted cleanly */ | ||
372 | #define EXT4_ERROR_FS 0x0002 /* Errors detected */ | ||
373 | #define EXT4_ORPHAN_FS 0x0004 /* Orphans being recovered */ | ||
374 | |||
375 | /* | ||
376 | * Mount flags | ||
377 | */ | ||
378 | #define EXT4_MOUNT_CHECK 0x00001 /* Do mount-time checks */ | ||
379 | #define EXT4_MOUNT_OLDALLOC 0x00002 /* Don't use the new Orlov allocator */ | ||
380 | #define EXT4_MOUNT_GRPID 0x00004 /* Create files with directory's group */ | ||
381 | #define EXT4_MOUNT_DEBUG 0x00008 /* Some debugging messages */ | ||
382 | #define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */ | ||
383 | #define EXT4_MOUNT_ERRORS_RO 0x00020 /* Remount fs ro on errors */ | ||
384 | #define EXT4_MOUNT_ERRORS_PANIC 0x00040 /* Panic on errors */ | ||
385 | #define EXT4_MOUNT_MINIX_DF 0x00080 /* Mimics the Minix statfs */ | ||
386 | #define EXT4_MOUNT_NOLOAD 0x00100 /* Don't use existing journal*/ | ||
387 | #define EXT4_MOUNT_ABORT 0x00200 /* Fatal error detected */ | ||
388 | #define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */ | ||
389 | #define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */ | ||
390 | #define EXT4_MOUNT_ORDERED_DATA 0x00800 /* Flush data before commit */ | ||
391 | #define EXT4_MOUNT_WRITEBACK_DATA 0x00C00 /* No data ordering */ | ||
392 | #define EXT4_MOUNT_UPDATE_JOURNAL 0x01000 /* Update the journal format */ | ||
393 | #define EXT4_MOUNT_NO_UID32 0x02000 /* Disable 32-bit UIDs */ | ||
394 | #define EXT4_MOUNT_XATTR_USER 0x04000 /* Extended user attributes */ | ||
395 | #define EXT4_MOUNT_POSIX_ACL 0x08000 /* POSIX Access Control Lists */ | ||
396 | #define EXT4_MOUNT_RESERVATION 0x10000 /* Preallocation */ | ||
397 | #define EXT4_MOUNT_BARRIER 0x20000 /* Use block barriers */ | ||
398 | #define EXT4_MOUNT_NOBH 0x40000 /* No bufferheads */ | ||
399 | #define EXT4_MOUNT_QUOTA 0x80000 /* Some quota option set */ | ||
400 | #define EXT4_MOUNT_USRQUOTA 0x100000 /* "old" user quota */ | ||
401 | #define EXT4_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */ | ||
402 | #define EXT4_MOUNT_EXTENTS 0x400000 /* Extents support */ | ||
403 | |||
404 | /* Compatibility, for having both ext2_fs.h and ext4_fs.h included at once */ | ||
405 | #ifndef _LINUX_EXT2_FS_H | ||
406 | #define clear_opt(o, opt) o &= ~EXT4_MOUNT_##opt | ||
407 | #define set_opt(o, opt) o |= EXT4_MOUNT_##opt | ||
408 | #define test_opt(sb, opt) (EXT4_SB(sb)->s_mount_opt & \ | ||
409 | EXT4_MOUNT_##opt) | ||
410 | #else | ||
411 | #define EXT2_MOUNT_NOLOAD EXT4_MOUNT_NOLOAD | ||
412 | #define EXT2_MOUNT_ABORT EXT4_MOUNT_ABORT | ||
413 | #define EXT2_MOUNT_DATA_FLAGS EXT4_MOUNT_DATA_FLAGS | ||
414 | #endif | ||
415 | |||
416 | #define ext4_set_bit ext2_set_bit | ||
417 | #define ext4_set_bit_atomic ext2_set_bit_atomic | ||
418 | #define ext4_clear_bit ext2_clear_bit | ||
419 | #define ext4_clear_bit_atomic ext2_clear_bit_atomic | ||
420 | #define ext4_test_bit ext2_test_bit | ||
421 | #define ext4_find_first_zero_bit ext2_find_first_zero_bit | ||
422 | #define ext4_find_next_zero_bit ext2_find_next_zero_bit | ||
423 | |||
424 | /* | ||
425 | * Maximal mount counts between two filesystem checks | ||
426 | */ | ||
427 | #define EXT4_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */ | ||
428 | #define EXT4_DFL_CHECKINTERVAL 0 /* Don't use interval check */ | ||
429 | |||
430 | /* | ||
431 | * Behaviour when detecting errors | ||
432 | */ | ||
433 | #define EXT4_ERRORS_CONTINUE 1 /* Continue execution */ | ||
434 | #define EXT4_ERRORS_RO 2 /* Remount fs read-only */ | ||
435 | #define EXT4_ERRORS_PANIC 3 /* Panic */ | ||
436 | #define EXT4_ERRORS_DEFAULT EXT4_ERRORS_CONTINUE | ||
437 | |||
438 | /* | ||
439 | * Structure of the super block | ||
440 | */ | ||
441 | struct ext4_super_block { | ||
442 | /*00*/ __le32 s_inodes_count; /* Inodes count */ | ||
443 | __le32 s_blocks_count; /* Blocks count */ | ||
444 | __le32 s_r_blocks_count; /* Reserved blocks count */ | ||
445 | __le32 s_free_blocks_count; /* Free blocks count */ | ||
446 | /*10*/ __le32 s_free_inodes_count; /* Free inodes count */ | ||
447 | __le32 s_first_data_block; /* First Data Block */ | ||
448 | __le32 s_log_block_size; /* Block size */ | ||
449 | __le32 s_log_frag_size; /* Fragment size */ | ||
450 | /*20*/ __le32 s_blocks_per_group; /* # Blocks per group */ | ||
451 | __le32 s_frags_per_group; /* # Fragments per group */ | ||
452 | __le32 s_inodes_per_group; /* # Inodes per group */ | ||
453 | __le32 s_mtime; /* Mount time */ | ||
454 | /*30*/ __le32 s_wtime; /* Write time */ | ||
455 | __le16 s_mnt_count; /* Mount count */ | ||
456 | __le16 s_max_mnt_count; /* Maximal mount count */ | ||
457 | __le16 s_magic; /* Magic signature */ | ||
458 | __le16 s_state; /* File system state */ | ||
459 | __le16 s_errors; /* Behaviour when detecting errors */ | ||
460 | __le16 s_minor_rev_level; /* minor revision level */ | ||
461 | /*40*/ __le32 s_lastcheck; /* time of last check */ | ||
462 | __le32 s_checkinterval; /* max. time between checks */ | ||
463 | __le32 s_creator_os; /* OS */ | ||
464 | __le32 s_rev_level; /* Revision level */ | ||
465 | /*50*/ __le16 s_def_resuid; /* Default uid for reserved blocks */ | ||
466 | __le16 s_def_resgid; /* Default gid for reserved blocks */ | ||
467 | /* | ||
468 | * These fields are for EXT4_DYNAMIC_REV superblocks only. | ||
469 | * | ||
470 | * Note: the difference between the compatible feature set and | ||
471 | * the incompatible feature set is that if there is a bit set | ||
472 | * in the incompatible feature set that the kernel doesn't | ||
473 | * know about, it should refuse to mount the filesystem. | ||
474 | * | ||
475 | * e2fsck's requirements are more strict; if it doesn't know | ||
476 | * about a feature in either the compatible or incompatible | ||
477 | * feature set, it must abort and not try to meddle with | ||
478 | * things it doesn't understand... | ||
479 | */ | ||
480 | __le32 s_first_ino; /* First non-reserved inode */ | ||
481 | __le16 s_inode_size; /* size of inode structure */ | ||
482 | __le16 s_block_group_nr; /* block group # of this superblock */ | ||
483 | __le32 s_feature_compat; /* compatible feature set */ | ||
484 | /*60*/ __le32 s_feature_incompat; /* incompatible feature set */ | ||
485 | __le32 s_feature_ro_compat; /* readonly-compatible feature set */ | ||
486 | /*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */ | ||
487 | /*78*/ char s_volume_name[16]; /* volume name */ | ||
488 | /*88*/ char s_last_mounted[64]; /* directory where last mounted */ | ||
489 | /*C8*/ __le32 s_algorithm_usage_bitmap; /* For compression */ | ||
490 | /* | ||
491 | * Performance hints. Directory preallocation should only | ||
492 | * happen if the EXT4_FEATURE_COMPAT_DIR_PREALLOC flag is on. | ||
493 | */ | ||
494 | __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ | ||
495 | __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ | ||
496 | __le16 s_reserved_gdt_blocks; /* Per group desc for online growth */ | ||
497 | /* | ||
498 | * Journaling support valid if EXT4_FEATURE_COMPAT_HAS_JOURNAL set. | ||
499 | */ | ||
500 | /*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ | ||
501 | /*E0*/ __le32 s_journal_inum; /* inode number of journal file */ | ||
502 | __le32 s_journal_dev; /* device number of journal file */ | ||
503 | __le32 s_last_orphan; /* start of list of inodes to delete */ | ||
504 | __le32 s_hash_seed[4]; /* HTREE hash seed */ | ||
505 | __u8 s_def_hash_version; /* Default hash version to use */ | ||
506 | __u8 s_reserved_char_pad; | ||
507 | __le16 s_desc_size; /* size of group descriptor */ | ||
508 | /*100*/ __le32 s_default_mount_opts; | ||
509 | __le32 s_first_meta_bg; /* First metablock block group */ | ||
510 | __le32 s_mkfs_time; /* When the filesystem was created */ | ||
511 | __le32 s_jnl_blocks[17]; /* Backup of the journal inode */ | ||
512 | /* 64bit support valid if EXT4_FEATURE_COMPAT_64BIT */ | ||
513 | /*150*/ __le32 s_blocks_count_hi; /* Blocks count */ | ||
514 | __le32 s_r_blocks_count_hi; /* Reserved blocks count */ | ||
515 | __le32 s_free_blocks_count_hi; /* Free blocks count */ | ||
516 | __u32 s_reserved[169]; /* Padding to the end of the block */ | ||
517 | }; | ||
518 | |||
519 | #ifdef __KERNEL__ | ||
520 | static inline struct ext4_sb_info * EXT4_SB(struct super_block *sb) | ||
521 | { | ||
522 | return sb->s_fs_info; | ||
523 | } | ||
524 | static inline struct ext4_inode_info *EXT4_I(struct inode *inode) | ||
525 | { | ||
526 | return container_of(inode, struct ext4_inode_info, vfs_inode); | ||
527 | } | ||
528 | |||
529 | static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino) | ||
530 | { | ||
531 | return ino == EXT4_ROOT_INO || | ||
532 | ino == EXT4_JOURNAL_INO || | ||
533 | ino == EXT4_RESIZE_INO || | ||
534 | (ino >= EXT4_FIRST_INO(sb) && | ||
535 | ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count)); | ||
536 | } | ||
537 | #else | ||
538 | /* Assume that user mode programs are passing in an ext4fs superblock, not | ||
539 | * a kernel struct super_block. This will allow us to call the feature-test | ||
540 | * macros from user land. */ | ||
541 | #define EXT4_SB(sb) (sb) | ||
542 | #endif | ||
543 | |||
544 | #define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime | ||
545 | |||
546 | /* | ||
547 | * Codes for operating systems | ||
548 | */ | ||
549 | #define EXT4_OS_LINUX 0 | ||
550 | #define EXT4_OS_HURD 1 | ||
551 | #define EXT4_OS_MASIX 2 | ||
552 | #define EXT4_OS_FREEBSD 3 | ||
553 | #define EXT4_OS_LITES 4 | ||
554 | |||
555 | /* | ||
556 | * Revision levels | ||
557 | */ | ||
558 | #define EXT4_GOOD_OLD_REV 0 /* The good old (original) format */ | ||
559 | #define EXT4_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */ | ||
560 | |||
561 | #define EXT4_CURRENT_REV EXT4_GOOD_OLD_REV | ||
562 | #define EXT4_MAX_SUPP_REV EXT4_DYNAMIC_REV | ||
563 | |||
564 | #define EXT4_GOOD_OLD_INODE_SIZE 128 | ||
565 | |||
566 | /* | ||
567 | * Feature set definitions | ||
568 | */ | ||
569 | |||
570 | #define EXT4_HAS_COMPAT_FEATURE(sb,mask) \ | ||
571 | ( EXT4_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) ) | ||
572 | #define EXT4_HAS_RO_COMPAT_FEATURE(sb,mask) \ | ||
573 | ( EXT4_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) ) | ||
574 | #define EXT4_HAS_INCOMPAT_FEATURE(sb,mask) \ | ||
575 | ( EXT4_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) ) | ||
576 | #define EXT4_SET_COMPAT_FEATURE(sb,mask) \ | ||
577 | EXT4_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask) | ||
578 | #define EXT4_SET_RO_COMPAT_FEATURE(sb,mask) \ | ||
579 | EXT4_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask) | ||
580 | #define EXT4_SET_INCOMPAT_FEATURE(sb,mask) \ | ||
581 | EXT4_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask) | ||
582 | #define EXT4_CLEAR_COMPAT_FEATURE(sb,mask) \ | ||
583 | EXT4_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask) | ||
584 | #define EXT4_CLEAR_RO_COMPAT_FEATURE(sb,mask) \ | ||
585 | EXT4_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask) | ||
586 | #define EXT4_CLEAR_INCOMPAT_FEATURE(sb,mask) \ | ||
587 | EXT4_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask) | ||
588 | |||
589 | #define EXT4_FEATURE_COMPAT_DIR_PREALLOC 0x0001 | ||
590 | #define EXT4_FEATURE_COMPAT_IMAGIC_INODES 0x0002 | ||
591 | #define EXT4_FEATURE_COMPAT_HAS_JOURNAL 0x0004 | ||
592 | #define EXT4_FEATURE_COMPAT_EXT_ATTR 0x0008 | ||
593 | #define EXT4_FEATURE_COMPAT_RESIZE_INODE 0x0010 | ||
594 | #define EXT4_FEATURE_COMPAT_DIR_INDEX 0x0020 | ||
595 | |||
596 | #define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 | ||
597 | #define EXT4_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 | ||
598 | #define EXT4_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 | ||
599 | |||
600 | #define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001 | ||
601 | #define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002 | ||
602 | #define EXT4_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */ | ||
603 | #define EXT4_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */ | ||
604 | #define EXT4_FEATURE_INCOMPAT_META_BG 0x0010 | ||
605 | #define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ | ||
606 | #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 | ||
607 | |||
608 | #define EXT4_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR | ||
609 | #define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \ | ||
610 | EXT4_FEATURE_INCOMPAT_RECOVER| \ | ||
611 | EXT4_FEATURE_INCOMPAT_META_BG| \ | ||
612 | EXT4_FEATURE_INCOMPAT_EXTENTS| \ | ||
613 | EXT4_FEATURE_INCOMPAT_64BIT) | ||
614 | #define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
615 | EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
616 | EXT4_FEATURE_RO_COMPAT_BTREE_DIR) | ||
617 | |||
618 | /* | ||
619 | * Default values for user and/or group using reserved blocks | ||
620 | */ | ||
621 | #define EXT4_DEF_RESUID 0 | ||
622 | #define EXT4_DEF_RESGID 0 | ||
623 | |||
624 | /* | ||
625 | * Default mount options | ||
626 | */ | ||
627 | #define EXT4_DEFM_DEBUG 0x0001 | ||
628 | #define EXT4_DEFM_BSDGROUPS 0x0002 | ||
629 | #define EXT4_DEFM_XATTR_USER 0x0004 | ||
630 | #define EXT4_DEFM_ACL 0x0008 | ||
631 | #define EXT4_DEFM_UID16 0x0010 | ||
632 | #define EXT4_DEFM_JMODE 0x0060 | ||
633 | #define EXT4_DEFM_JMODE_DATA 0x0020 | ||
634 | #define EXT4_DEFM_JMODE_ORDERED 0x0040 | ||
635 | #define EXT4_DEFM_JMODE_WBACK 0x0060 | ||
636 | |||
637 | /* | ||
638 | * Structure of a directory entry | ||
639 | */ | ||
640 | #define EXT4_NAME_LEN 255 | ||
641 | |||
642 | struct ext4_dir_entry { | ||
643 | __le32 inode; /* Inode number */ | ||
644 | __le16 rec_len; /* Directory entry length */ | ||
645 | __le16 name_len; /* Name length */ | ||
646 | char name[EXT4_NAME_LEN]; /* File name */ | ||
647 | }; | ||
648 | |||
649 | /* | ||
650 | * The new version of the directory entry. Since EXT4 structures are | ||
651 | * stored in intel byte order, and the name_len field could never be | ||
652 | * bigger than 255 chars, it's safe to reclaim the extra byte for the | ||
653 | * file_type field. | ||
654 | */ | ||
655 | struct ext4_dir_entry_2 { | ||
656 | __le32 inode; /* Inode number */ | ||
657 | __le16 rec_len; /* Directory entry length */ | ||
658 | __u8 name_len; /* Name length */ | ||
659 | __u8 file_type; | ||
660 | char name[EXT4_NAME_LEN]; /* File name */ | ||
661 | }; | ||
662 | |||
663 | /* | ||
664 | * Ext4 directory file types. Only the low 3 bits are used. The | ||
665 | * other bits are reserved for now. | ||
666 | */ | ||
667 | #define EXT4_FT_UNKNOWN 0 | ||
668 | #define EXT4_FT_REG_FILE 1 | ||
669 | #define EXT4_FT_DIR 2 | ||
670 | #define EXT4_FT_CHRDEV 3 | ||
671 | #define EXT4_FT_BLKDEV 4 | ||
672 | #define EXT4_FT_FIFO 5 | ||
673 | #define EXT4_FT_SOCK 6 | ||
674 | #define EXT4_FT_SYMLINK 7 | ||
675 | |||
676 | #define EXT4_FT_MAX 8 | ||
677 | |||
678 | /* | ||
679 | * EXT4_DIR_PAD defines the directory entries boundaries | ||
680 | * | ||
681 | * NOTE: It must be a multiple of 4 | ||
682 | */ | ||
683 | #define EXT4_DIR_PAD 4 | ||
684 | #define EXT4_DIR_ROUND (EXT4_DIR_PAD - 1) | ||
685 | #define EXT4_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT4_DIR_ROUND) & \ | ||
686 | ~EXT4_DIR_ROUND) | ||
687 | /* | ||
688 | * Hash Tree Directory indexing | ||
689 | * (c) Daniel Phillips, 2001 | ||
690 | */ | ||
691 | |||
692 | #ifdef CONFIG_EXT4_INDEX | ||
693 | #define is_dx(dir) (EXT4_HAS_COMPAT_FEATURE(dir->i_sb, \ | ||
694 | EXT4_FEATURE_COMPAT_DIR_INDEX) && \ | ||
695 | (EXT4_I(dir)->i_flags & EXT4_INDEX_FL)) | ||
696 | #define EXT4_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT4_LINK_MAX) | ||
697 | #define EXT4_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1) | ||
698 | #else | ||
699 | #define is_dx(dir) 0 | ||
700 | #define EXT4_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT4_LINK_MAX) | ||
701 | #define EXT4_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2) | ||
702 | #endif | ||
703 | |||
704 | /* Legal values for the dx_root hash_version field: */ | ||
705 | |||
706 | #define DX_HASH_LEGACY 0 | ||
707 | #define DX_HASH_HALF_MD4 1 | ||
708 | #define DX_HASH_TEA 2 | ||
709 | |||
710 | #ifdef __KERNEL__ | ||
711 | |||
712 | /* hash info structure used by the directory hash */ | ||
713 | struct dx_hash_info | ||
714 | { | ||
715 | u32 hash; | ||
716 | u32 minor_hash; | ||
717 | int hash_version; | ||
718 | u32 *seed; | ||
719 | }; | ||
720 | |||
721 | #define EXT4_HTREE_EOF 0x7fffffff | ||
722 | |||
723 | /* | ||
724 | * Control parameters used by ext4_htree_next_block | ||
725 | */ | ||
726 | #define HASH_NB_ALWAYS 1 | ||
727 | |||
728 | |||
729 | /* | ||
730 | * Describe an inode's exact location on disk and in memory | ||
731 | */ | ||
732 | struct ext4_iloc | ||
733 | { | ||
734 | struct buffer_head *bh; | ||
735 | unsigned long offset; | ||
736 | unsigned long block_group; | ||
737 | }; | ||
738 | |||
739 | static inline struct ext4_inode *ext4_raw_inode(struct ext4_iloc *iloc) | ||
740 | { | ||
741 | return (struct ext4_inode *) (iloc->bh->b_data + iloc->offset); | ||
742 | } | ||
743 | |||
744 | /* | ||
745 | * This structure is stuffed into the struct file's private_data field | ||
746 | * for directories. It is where we put information so that we can do | ||
747 | * readdir operations in hash tree order. | ||
748 | */ | ||
749 | struct dir_private_info { | ||
750 | struct rb_root root; | ||
751 | struct rb_node *curr_node; | ||
752 | struct fname *extra_fname; | ||
753 | loff_t last_pos; | ||
754 | __u32 curr_hash; | ||
755 | __u32 curr_minor_hash; | ||
756 | __u32 next_hash; | ||
757 | }; | ||
758 | |||
759 | /* calculate the first block number of the group */ | ||
760 | static inline ext4_fsblk_t | ||
761 | ext4_group_first_block_no(struct super_block *sb, unsigned long group_no) | ||
762 | { | ||
763 | return group_no * (ext4_fsblk_t)EXT4_BLOCKS_PER_GROUP(sb) + | ||
764 | le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block); | ||
765 | } | ||
766 | |||
767 | /* | ||
768 | * Special error return code only used by dx_probe() and its callers. | ||
769 | */ | ||
770 | #define ERR_BAD_DX_DIR -75000 | ||
771 | |||
772 | void ext4_get_group_no_and_offset(struct super_block *sb, ext4_fsblk_t blocknr, | ||
773 | unsigned long *blockgrpp, ext4_grpblk_t *offsetp); | ||
774 | |||
775 | /* | ||
776 | * Function prototypes | ||
777 | */ | ||
778 | |||
779 | /* | ||
780 | * Ok, these declarations are also in <linux/kernel.h> but none of the | ||
781 | * ext4 source programs needs to include it so they are duplicated here. | ||
782 | */ | ||
783 | # define NORET_TYPE /**/ | ||
784 | # define ATTRIB_NORET __attribute__((noreturn)) | ||
785 | # define NORET_AND noreturn, | ||
786 | |||
787 | /* balloc.c */ | ||
788 | extern unsigned int ext4_block_group(struct super_block *sb, | ||
789 | ext4_fsblk_t blocknr); | ||
790 | extern ext4_grpblk_t ext4_block_group_offset(struct super_block *sb, | ||
791 | ext4_fsblk_t blocknr); | ||
792 | extern int ext4_bg_has_super(struct super_block *sb, int group); | ||
793 | extern unsigned long ext4_bg_num_gdb(struct super_block *sb, int group); | ||
794 | extern ext4_fsblk_t ext4_new_block (handle_t *handle, struct inode *inode, | ||
795 | ext4_fsblk_t goal, int *errp); | ||
796 | extern ext4_fsblk_t ext4_new_blocks (handle_t *handle, struct inode *inode, | ||
797 | ext4_fsblk_t goal, unsigned long *count, int *errp); | ||
798 | extern void ext4_free_blocks (handle_t *handle, struct inode *inode, | ||
799 | ext4_fsblk_t block, unsigned long count); | ||
800 | extern void ext4_free_blocks_sb (handle_t *handle, struct super_block *sb, | ||
801 | ext4_fsblk_t block, unsigned long count, | ||
802 | unsigned long *pdquot_freed_blocks); | ||
803 | extern ext4_fsblk_t ext4_count_free_blocks (struct super_block *); | ||
804 | extern void ext4_check_blocks_bitmap (struct super_block *); | ||
805 | extern struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb, | ||
806 | unsigned int block_group, | ||
807 | struct buffer_head ** bh); | ||
808 | extern int ext4_should_retry_alloc(struct super_block *sb, int *retries); | ||
809 | extern void ext4_init_block_alloc_info(struct inode *); | ||
810 | extern void ext4_rsv_window_add(struct super_block *sb, struct ext4_reserve_window_node *rsv); | ||
811 | |||
812 | /* dir.c */ | ||
813 | extern int ext4_check_dir_entry(const char *, struct inode *, | ||
814 | struct ext4_dir_entry_2 *, | ||
815 | struct buffer_head *, unsigned long); | ||
816 | extern int ext4_htree_store_dirent(struct file *dir_file, __u32 hash, | ||
817 | __u32 minor_hash, | ||
818 | struct ext4_dir_entry_2 *dirent); | ||
819 | extern void ext4_htree_free_dir_info(struct dir_private_info *p); | ||
820 | |||
821 | /* fsync.c */ | ||
822 | extern int ext4_sync_file (struct file *, struct dentry *, int); | ||
823 | |||
824 | /* hash.c */ | ||
825 | extern int ext4fs_dirhash(const char *name, int len, struct | ||
826 | dx_hash_info *hinfo); | ||
827 | |||
828 | /* ialloc.c */ | ||
829 | extern struct inode * ext4_new_inode (handle_t *, struct inode *, int); | ||
830 | extern void ext4_free_inode (handle_t *, struct inode *); | ||
831 | extern struct inode * ext4_orphan_get (struct super_block *, unsigned long); | ||
832 | extern unsigned long ext4_count_free_inodes (struct super_block *); | ||
833 | extern unsigned long ext4_count_dirs (struct super_block *); | ||
834 | extern void ext4_check_inodes_bitmap (struct super_block *); | ||
835 | extern unsigned long ext4_count_free (struct buffer_head *, unsigned); | ||
836 | |||
837 | |||
838 | /* inode.c */ | ||
839 | int ext4_forget(handle_t *handle, int is_metadata, struct inode *inode, | ||
840 | struct buffer_head *bh, ext4_fsblk_t blocknr); | ||
841 | struct buffer_head * ext4_getblk (handle_t *, struct inode *, long, int, int *); | ||
842 | struct buffer_head * ext4_bread (handle_t *, struct inode *, int, int, int *); | ||
843 | int ext4_get_blocks_handle(handle_t *handle, struct inode *inode, | ||
844 | sector_t iblock, unsigned long maxblocks, struct buffer_head *bh_result, | ||
845 | int create, int extend_disksize); | ||
846 | |||
847 | extern void ext4_read_inode (struct inode *); | ||
848 | extern int ext4_write_inode (struct inode *, int); | ||
849 | extern int ext4_setattr (struct dentry *, struct iattr *); | ||
850 | extern void ext4_delete_inode (struct inode *); | ||
851 | extern int ext4_sync_inode (handle_t *, struct inode *); | ||
852 | extern void ext4_discard_reservation (struct inode *); | ||
853 | extern void ext4_dirty_inode(struct inode *); | ||
854 | extern int ext4_change_inode_journal_flag(struct inode *, int); | ||
855 | extern int ext4_get_inode_loc(struct inode *, struct ext4_iloc *); | ||
856 | extern void ext4_truncate (struct inode *); | ||
857 | extern void ext4_set_inode_flags(struct inode *); | ||
858 | extern void ext4_set_aops(struct inode *inode); | ||
859 | extern int ext4_writepage_trans_blocks(struct inode *); | ||
860 | extern int ext4_block_truncate_page(handle_t *handle, struct page *page, | ||
861 | struct address_space *mapping, loff_t from); | ||
862 | |||
863 | /* ioctl.c */ | ||
864 | extern int ext4_ioctl (struct inode *, struct file *, unsigned int, | ||
865 | unsigned long); | ||
866 | extern long ext4_compat_ioctl (struct file *, unsigned int, unsigned long); | ||
867 | |||
868 | /* namei.c */ | ||
869 | extern int ext4_orphan_add(handle_t *, struct inode *); | ||
870 | extern int ext4_orphan_del(handle_t *, struct inode *); | ||
871 | extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash, | ||
872 | __u32 start_minor_hash, __u32 *next_hash); | ||
873 | |||
874 | /* resize.c */ | ||
875 | extern int ext4_group_add(struct super_block *sb, | ||
876 | struct ext4_new_group_data *input); | ||
877 | extern int ext4_group_extend(struct super_block *sb, | ||
878 | struct ext4_super_block *es, | ||
879 | ext4_fsblk_t n_blocks_count); | ||
880 | |||
881 | /* super.c */ | ||
882 | extern void ext4_error (struct super_block *, const char *, const char *, ...) | ||
883 | __attribute__ ((format (printf, 3, 4))); | ||
884 | extern void __ext4_std_error (struct super_block *, const char *, int); | ||
885 | extern void ext4_abort (struct super_block *, const char *, const char *, ...) | ||
886 | __attribute__ ((format (printf, 3, 4))); | ||
887 | extern void ext4_warning (struct super_block *, const char *, const char *, ...) | ||
888 | __attribute__ ((format (printf, 3, 4))); | ||
889 | extern void ext4_update_dynamic_rev (struct super_block *sb); | ||
890 | extern ext4_fsblk_t ext4_block_bitmap(struct super_block *sb, | ||
891 | struct ext4_group_desc *bg); | ||
892 | extern ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb, | ||
893 | struct ext4_group_desc *bg); | ||
894 | extern ext4_fsblk_t ext4_inode_table(struct super_block *sb, | ||
895 | struct ext4_group_desc *bg); | ||
896 | extern void ext4_block_bitmap_set(struct super_block *sb, | ||
897 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | ||
898 | extern void ext4_inode_bitmap_set(struct super_block *sb, | ||
899 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | ||
900 | extern void ext4_inode_table_set(struct super_block *sb, | ||
901 | struct ext4_group_desc *bg, ext4_fsblk_t blk); | ||
902 | |||
903 | static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es) | ||
904 | { | ||
905 | return ((ext4_fsblk_t)le32_to_cpu(es->s_blocks_count_hi) << 32) | | ||
906 | le32_to_cpu(es->s_blocks_count); | ||
907 | } | ||
908 | |||
909 | static inline ext4_fsblk_t ext4_r_blocks_count(struct ext4_super_block *es) | ||
910 | { | ||
911 | return ((ext4_fsblk_t)le32_to_cpu(es->s_r_blocks_count_hi) << 32) | | ||
912 | le32_to_cpu(es->s_r_blocks_count); | ||
913 | } | ||
914 | |||
915 | static inline ext4_fsblk_t ext4_free_blocks_count(struct ext4_super_block *es) | ||
916 | { | ||
917 | return ((ext4_fsblk_t)le32_to_cpu(es->s_free_blocks_count_hi) << 32) | | ||
918 | le32_to_cpu(es->s_free_blocks_count); | ||
919 | } | ||
920 | |||
921 | static inline void ext4_blocks_count_set(struct ext4_super_block *es, | ||
922 | ext4_fsblk_t blk) | ||
923 | { | ||
924 | es->s_blocks_count = cpu_to_le32((u32)blk); | ||
925 | es->s_blocks_count_hi = cpu_to_le32(blk >> 32); | ||
926 | } | ||
927 | |||
928 | static inline void ext4_free_blocks_count_set(struct ext4_super_block *es, | ||
929 | ext4_fsblk_t blk) | ||
930 | { | ||
931 | es->s_free_blocks_count = cpu_to_le32((u32)blk); | ||
932 | es->s_free_blocks_count_hi = cpu_to_le32(blk >> 32); | ||
933 | } | ||
934 | |||
935 | static inline void ext4_r_blocks_count_set(struct ext4_super_block *es, | ||
936 | ext4_fsblk_t blk) | ||
937 | { | ||
938 | es->s_r_blocks_count = cpu_to_le32((u32)blk); | ||
939 | es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32); | ||
940 | } | ||
941 | |||
942 | |||
943 | |||
944 | #define ext4_std_error(sb, errno) \ | ||
945 | do { \ | ||
946 | if ((errno)) \ | ||
947 | __ext4_std_error((sb), __FUNCTION__, (errno)); \ | ||
948 | } while (0) | ||
949 | |||
950 | /* | ||
951 | * Inodes and files operations | ||
952 | */ | ||
953 | |||
954 | /* dir.c */ | ||
955 | extern const struct file_operations ext4_dir_operations; | ||
956 | |||
957 | /* file.c */ | ||
958 | extern struct inode_operations ext4_file_inode_operations; | ||
959 | extern const struct file_operations ext4_file_operations; | ||
960 | |||
961 | /* namei.c */ | ||
962 | extern struct inode_operations ext4_dir_inode_operations; | ||
963 | extern struct inode_operations ext4_special_inode_operations; | ||
964 | |||
965 | /* symlink.c */ | ||
966 | extern struct inode_operations ext4_symlink_inode_operations; | ||
967 | extern struct inode_operations ext4_fast_symlink_inode_operations; | ||
968 | |||
969 | /* extents.c */ | ||
970 | extern int ext4_ext_tree_init(handle_t *handle, struct inode *); | ||
971 | extern int ext4_ext_writepage_trans_blocks(struct inode *, int); | ||
972 | extern int ext4_ext_get_blocks(handle_t *handle, struct inode *inode, | ||
973 | ext4_fsblk_t iblock, | ||
974 | unsigned long max_blocks, struct buffer_head *bh_result, | ||
975 | int create, int extend_disksize); | ||
976 | extern void ext4_ext_truncate(struct inode *, struct page *); | ||
977 | extern void ext4_ext_init(struct super_block *); | ||
978 | extern void ext4_ext_release(struct super_block *); | ||
979 | static inline int | ||
980 | ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block, | ||
981 | unsigned long max_blocks, struct buffer_head *bh, | ||
982 | int create, int extend_disksize) | ||
983 | { | ||
984 | if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) | ||
985 | return ext4_ext_get_blocks(handle, inode, block, max_blocks, | ||
986 | bh, create, extend_disksize); | ||
987 | return ext4_get_blocks_handle(handle, inode, block, max_blocks, bh, | ||
988 | create, extend_disksize); | ||
989 | } | ||
990 | |||
991 | |||
992 | #endif /* __KERNEL__ */ | ||
993 | |||
994 | #endif /* _LINUX_EXT4_FS_H */ | ||
diff --git a/include/linux/ext4_fs_extents.h b/include/linux/ext4_fs_extents.h new file mode 100644 index 000000000000..a41cc24568ca --- /dev/null +++ b/include/linux/ext4_fs_extents.h | |||
@@ -0,0 +1,198 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com | ||
3 | * Written by Alex Tomas <alex@clusterfs.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public Licens | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111- | ||
17 | */ | ||
18 | |||
19 | #ifndef _LINUX_EXT4_EXTENTS | ||
20 | #define _LINUX_EXT4_EXTENTS | ||
21 | |||
22 | #include <linux/ext4_fs.h> | ||
23 | |||
24 | /* | ||
25 | * With AGRESSIVE_TEST defined, the capacity of index/leaf blocks | ||
26 | * becomes very small, so index split, in-depth growing and | ||
27 | * other hard changes happen much more often. | ||
28 | * This is for debug purposes only. | ||
29 | */ | ||
30 | #define AGRESSIVE_TEST_ | ||
31 | |||
32 | /* | ||
33 | * With EXTENTS_STATS defined, the number of blocks and extents | ||
34 | * are collected in the truncate path. They'll be shown at | ||
35 | * umount time. | ||
36 | */ | ||
37 | #define EXTENTS_STATS__ | ||
38 | |||
39 | /* | ||
40 | * If CHECK_BINSEARCH is defined, then the results of the binary search | ||
41 | * will also be checked by linear search. | ||
42 | */ | ||
43 | #define CHECK_BINSEARCH__ | ||
44 | |||
45 | /* | ||
46 | * If EXT_DEBUG is defined you can use the 'extdebug' mount option | ||
47 | * to get lots of info about what's going on. | ||
48 | */ | ||
49 | #define EXT_DEBUG__ | ||
50 | #ifdef EXT_DEBUG | ||
51 | #define ext_debug(a...) printk(a) | ||
52 | #else | ||
53 | #define ext_debug(a...) | ||
54 | #endif | ||
55 | |||
56 | /* | ||
57 | * If EXT_STATS is defined then stats numbers are collected. | ||
58 | * These number will be displayed at umount time. | ||
59 | */ | ||
60 | #define EXT_STATS_ | ||
61 | |||
62 | |||
63 | /* | ||
64 | * ext4_inode has i_block array (60 bytes total). | ||
65 | * The first 12 bytes store ext4_extent_header; | ||
66 | * the remainder stores an array of ext4_extent. | ||
67 | */ | ||
68 | |||
69 | /* | ||
70 | * This is the extent on-disk structure. | ||
71 | * It's used at the bottom of the tree. | ||
72 | */ | ||
73 | struct ext4_extent { | ||
74 | __le32 ee_block; /* first logical block extent covers */ | ||
75 | __le16 ee_len; /* number of blocks covered by extent */ | ||
76 | __le16 ee_start_hi; /* high 16 bits of physical block */ | ||
77 | __le32 ee_start; /* low 32 bits of physical block */ | ||
78 | }; | ||
79 | |||
80 | /* | ||
81 | * This is index on-disk structure. | ||
82 | * It's used at all the levels except the bottom. | ||
83 | */ | ||
84 | struct ext4_extent_idx { | ||
85 | __le32 ei_block; /* index covers logical blocks from 'block' */ | ||
86 | __le32 ei_leaf; /* pointer to the physical block of the next * | ||
87 | * level. leaf or next index could be there */ | ||
88 | __le16 ei_leaf_hi; /* high 16 bits of physical block */ | ||
89 | __u16 ei_unused; | ||
90 | }; | ||
91 | |||
92 | /* | ||
93 | * Each block (leaves and indexes), even inode-stored has header. | ||
94 | */ | ||
95 | struct ext4_extent_header { | ||
96 | __le16 eh_magic; /* probably will support different formats */ | ||
97 | __le16 eh_entries; /* number of valid entries */ | ||
98 | __le16 eh_max; /* capacity of store in entries */ | ||
99 | __le16 eh_depth; /* has tree real underlying blocks? */ | ||
100 | __le32 eh_generation; /* generation of the tree */ | ||
101 | }; | ||
102 | |||
103 | #define EXT4_EXT_MAGIC cpu_to_le16(0xf30a) | ||
104 | |||
105 | /* | ||
106 | * Array of ext4_ext_path contains path to some extent. | ||
107 | * Creation/lookup routines use it for traversal/splitting/etc. | ||
108 | * Truncate uses it to simulate recursive walking. | ||
109 | */ | ||
110 | struct ext4_ext_path { | ||
111 | ext4_fsblk_t p_block; | ||
112 | __u16 p_depth; | ||
113 | struct ext4_extent *p_ext; | ||
114 | struct ext4_extent_idx *p_idx; | ||
115 | struct ext4_extent_header *p_hdr; | ||
116 | struct buffer_head *p_bh; | ||
117 | }; | ||
118 | |||
119 | /* | ||
120 | * structure for external API | ||
121 | */ | ||
122 | |||
123 | #define EXT4_EXT_CACHE_NO 0 | ||
124 | #define EXT4_EXT_CACHE_GAP 1 | ||
125 | #define EXT4_EXT_CACHE_EXTENT 2 | ||
126 | |||
127 | /* | ||
128 | * to be called by ext4_ext_walk_space() | ||
129 | * negative retcode - error | ||
130 | * positive retcode - signal for ext4_ext_walk_space(), see below | ||
131 | * callback must return valid extent (passed or newly created) | ||
132 | */ | ||
133 | typedef int (*ext_prepare_callback)(struct inode *, struct ext4_ext_path *, | ||
134 | struct ext4_ext_cache *, | ||
135 | void *); | ||
136 | |||
137 | #define EXT_CONTINUE 0 | ||
138 | #define EXT_BREAK 1 | ||
139 | #define EXT_REPEAT 2 | ||
140 | |||
141 | |||
142 | #define EXT_MAX_BLOCK 0xffffffff | ||
143 | |||
144 | #define EXT_MAX_LEN ((1UL << 15) - 1) | ||
145 | |||
146 | |||
147 | #define EXT_FIRST_EXTENT(__hdr__) \ | ||
148 | ((struct ext4_extent *) (((char *) (__hdr__)) + \ | ||
149 | sizeof(struct ext4_extent_header))) | ||
150 | #define EXT_FIRST_INDEX(__hdr__) \ | ||
151 | ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \ | ||
152 | sizeof(struct ext4_extent_header))) | ||
153 | #define EXT_HAS_FREE_INDEX(__path__) \ | ||
154 | (le16_to_cpu((__path__)->p_hdr->eh_entries) \ | ||
155 | < le16_to_cpu((__path__)->p_hdr->eh_max)) | ||
156 | #define EXT_LAST_EXTENT(__hdr__) \ | ||
157 | (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1) | ||
158 | #define EXT_LAST_INDEX(__hdr__) \ | ||
159 | (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1) | ||
160 | #define EXT_MAX_EXTENT(__hdr__) \ | ||
161 | (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) | ||
162 | #define EXT_MAX_INDEX(__hdr__) \ | ||
163 | (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) | ||
164 | |||
165 | static inline struct ext4_extent_header *ext_inode_hdr(struct inode *inode) | ||
166 | { | ||
167 | return (struct ext4_extent_header *) EXT4_I(inode)->i_data; | ||
168 | } | ||
169 | |||
170 | static inline struct ext4_extent_header *ext_block_hdr(struct buffer_head *bh) | ||
171 | { | ||
172 | return (struct ext4_extent_header *) bh->b_data; | ||
173 | } | ||
174 | |||
175 | static inline unsigned short ext_depth(struct inode *inode) | ||
176 | { | ||
177 | return le16_to_cpu(ext_inode_hdr(inode)->eh_depth); | ||
178 | } | ||
179 | |||
180 | static inline void ext4_ext_tree_changed(struct inode *inode) | ||
181 | { | ||
182 | EXT4_I(inode)->i_ext_generation++; | ||
183 | } | ||
184 | |||
185 | static inline void | ||
186 | ext4_ext_invalidate_cache(struct inode *inode) | ||
187 | { | ||
188 | EXT4_I(inode)->i_cached_extent.ec_type = EXT4_EXT_CACHE_NO; | ||
189 | } | ||
190 | |||
191 | extern int ext4_extent_tree_init(handle_t *, struct inode *); | ||
192 | extern int ext4_ext_calc_credits_for_insert(struct inode *, struct ext4_ext_path *); | ||
193 | extern int ext4_ext_insert_extent(handle_t *, struct inode *, struct ext4_ext_path *, struct ext4_extent *); | ||
194 | extern int ext4_ext_walk_space(struct inode *, unsigned long, unsigned long, ext_prepare_callback, void *); | ||
195 | extern struct ext4_ext_path * ext4_ext_find_extent(struct inode *, int, struct ext4_ext_path *); | ||
196 | |||
197 | #endif /* _LINUX_EXT4_EXTENTS */ | ||
198 | |||
diff --git a/include/linux/ext4_fs_i.h b/include/linux/ext4_fs_i.h new file mode 100644 index 000000000000..bb42379cb7fd --- /dev/null +++ b/include/linux/ext4_fs_i.h | |||
@@ -0,0 +1,158 @@ | |||
1 | /* | ||
2 | * linux/include/linux/ext4_fs_i.h | ||
3 | * | ||
4 | * Copyright (C) 1992, 1993, 1994, 1995 | ||
5 | * Remy Card (card@masi.ibp.fr) | ||
6 | * Laboratoire MASI - Institut Blaise Pascal | ||
7 | * Universite Pierre et Marie Curie (Paris VI) | ||
8 | * | ||
9 | * from | ||
10 | * | ||
11 | * linux/include/linux/minix_fs_i.h | ||
12 | * | ||
13 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
14 | */ | ||
15 | |||
16 | #ifndef _LINUX_EXT4_FS_I | ||
17 | #define _LINUX_EXT4_FS_I | ||
18 | |||
19 | #include <linux/rwsem.h> | ||
20 | #include <linux/rbtree.h> | ||
21 | #include <linux/seqlock.h> | ||
22 | #include <linux/mutex.h> | ||
23 | |||
24 | /* data type for block offset of block group */ | ||
25 | typedef int ext4_grpblk_t; | ||
26 | |||
27 | /* data type for filesystem-wide blocks number */ | ||
28 | typedef unsigned long long ext4_fsblk_t; | ||
29 | |||
30 | struct ext4_reserve_window { | ||
31 | ext4_fsblk_t _rsv_start; /* First byte reserved */ | ||
32 | ext4_fsblk_t _rsv_end; /* Last byte reserved or 0 */ | ||
33 | }; | ||
34 | |||
35 | struct ext4_reserve_window_node { | ||
36 | struct rb_node rsv_node; | ||
37 | __u32 rsv_goal_size; | ||
38 | __u32 rsv_alloc_hit; | ||
39 | struct ext4_reserve_window rsv_window; | ||
40 | }; | ||
41 | |||
42 | struct ext4_block_alloc_info { | ||
43 | /* information about reservation window */ | ||
44 | struct ext4_reserve_window_node rsv_window_node; | ||
45 | /* | ||
46 | * was i_next_alloc_block in ext4_inode_info | ||
47 | * is the logical (file-relative) number of the | ||
48 | * most-recently-allocated block in this file. | ||
49 | * We use this for detecting linearly ascending allocation requests. | ||
50 | */ | ||
51 | __u32 last_alloc_logical_block; | ||
52 | /* | ||
53 | * Was i_next_alloc_goal in ext4_inode_info | ||
54 | * is the *physical* companion to i_next_alloc_block. | ||
55 | * it the the physical block number of the block which was most-recentl | ||
56 | * allocated to this file. This give us the goal (target) for the next | ||
57 | * allocation when we detect linearly ascending requests. | ||
58 | */ | ||
59 | ext4_fsblk_t last_alloc_physical_block; | ||
60 | }; | ||
61 | |||
62 | #define rsv_start rsv_window._rsv_start | ||
63 | #define rsv_end rsv_window._rsv_end | ||
64 | |||
65 | /* | ||
66 | * storage for cached extent | ||
67 | */ | ||
68 | struct ext4_ext_cache { | ||
69 | ext4_fsblk_t ec_start; | ||
70 | __u32 ec_block; | ||
71 | __u32 ec_len; /* must be 32bit to return holes */ | ||
72 | __u32 ec_type; | ||
73 | }; | ||
74 | |||
75 | /* | ||
76 | * third extended file system inode data in memory | ||
77 | */ | ||
78 | struct ext4_inode_info { | ||
79 | __le32 i_data[15]; /* unconverted */ | ||
80 | __u32 i_flags; | ||
81 | #ifdef EXT4_FRAGMENTS | ||
82 | __u32 i_faddr; | ||
83 | __u8 i_frag_no; | ||
84 | __u8 i_frag_size; | ||
85 | #endif | ||
86 | ext4_fsblk_t i_file_acl; | ||
87 | __u32 i_dir_acl; | ||
88 | __u32 i_dtime; | ||
89 | |||
90 | /* | ||
91 | * i_block_group is the number of the block group which contains | ||
92 | * this file's inode. Constant across the lifetime of the inode, | ||
93 | * it is ued for making block allocation decisions - we try to | ||
94 | * place a file's data blocks near its inode block, and new inodes | ||
95 | * near to their parent directory's inode. | ||
96 | */ | ||
97 | __u32 i_block_group; | ||
98 | __u32 i_state; /* Dynamic state flags for ext4 */ | ||
99 | |||
100 | /* block reservation info */ | ||
101 | struct ext4_block_alloc_info *i_block_alloc_info; | ||
102 | |||
103 | __u32 i_dir_start_lookup; | ||
104 | #ifdef CONFIG_EXT4DEV_FS_XATTR | ||
105 | /* | ||
106 | * Extended attributes can be read independently of the main file | ||
107 | * data. Taking i_mutex even when reading would cause contention | ||
108 | * between readers of EAs and writers of regular file data, so | ||
109 | * instead we synchronize on xattr_sem when reading or changing | ||
110 | * EAs. | ||
111 | */ | ||
112 | struct rw_semaphore xattr_sem; | ||
113 | #endif | ||
114 | #ifdef CONFIG_EXT4DEV_FS_POSIX_ACL | ||
115 | struct posix_acl *i_acl; | ||
116 | struct posix_acl *i_default_acl; | ||
117 | #endif | ||
118 | |||
119 | struct list_head i_orphan; /* unlinked but open inodes */ | ||
120 | |||
121 | /* | ||
122 | * i_disksize keeps track of what the inode size is ON DISK, not | ||
123 | * in memory. During truncate, i_size is set to the new size by | ||
124 | * the VFS prior to calling ext4_truncate(), but the filesystem won't | ||
125 | * set i_disksize to 0 until the truncate is actually under way. | ||
126 | * | ||
127 | * The intent is that i_disksize always represents the blocks which | ||
128 | * are used by this file. This allows recovery to restart truncate | ||
129 | * on orphans if we crash during truncate. We actually write i_disksize | ||
130 | * into the on-disk inode when writing inodes out, instead of i_size. | ||
131 | * | ||
132 | * The only time when i_disksize and i_size may be different is when | ||
133 | * a truncate is in progress. The only things which change i_disksize | ||
134 | * are ext4_get_block (growth) and ext4_truncate (shrinkth). | ||
135 | */ | ||
136 | loff_t i_disksize; | ||
137 | |||
138 | /* on-disk additional length */ | ||
139 | __u16 i_extra_isize; | ||
140 | |||
141 | /* | ||
142 | * truncate_mutex is for serialising ext4_truncate() against | ||
143 | * ext4_getblock(). In the 2.4 ext2 design, great chunks of inode's | ||
144 | * data tree are chopped off during truncate. We can't do that in | ||
145 | * ext4 because whenever we perform intermediate commits during | ||
146 | * truncate, the inode and all the metadata blocks *must* be in a | ||
147 | * consistent state which allows truncation of the orphans to restart | ||
148 | * during recovery. Hence we must fix the get_block-vs-truncate race | ||
149 | * by other means, so we have truncate_mutex. | ||
150 | */ | ||
151 | struct mutex truncate_mutex; | ||
152 | struct inode vfs_inode; | ||
153 | |||
154 | unsigned long i_ext_generation; | ||
155 | struct ext4_ext_cache i_cached_extent; | ||
156 | }; | ||
157 | |||
158 | #endif /* _LINUX_EXT4_FS_I */ | ||
diff --git a/include/linux/ext4_fs_sb.h b/include/linux/ext4_fs_sb.h new file mode 100644 index 000000000000..691a713139ce --- /dev/null +++ b/include/linux/ext4_fs_sb.h | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * linux/include/linux/ext4_fs_sb.h | ||
3 | * | ||
4 | * Copyright (C) 1992, 1993, 1994, 1995 | ||
5 | * Remy Card (card@masi.ibp.fr) | ||
6 | * Laboratoire MASI - Institut Blaise Pascal | ||
7 | * Universite Pierre et Marie Curie (Paris VI) | ||
8 | * | ||
9 | * from | ||
10 | * | ||
11 | * linux/include/linux/minix_fs_sb.h | ||
12 | * | ||
13 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
14 | */ | ||
15 | |||
16 | #ifndef _LINUX_EXT4_FS_SB | ||
17 | #define _LINUX_EXT4_FS_SB | ||
18 | |||
19 | #ifdef __KERNEL__ | ||
20 | #include <linux/timer.h> | ||
21 | #include <linux/wait.h> | ||
22 | #include <linux/blockgroup_lock.h> | ||
23 | #include <linux/percpu_counter.h> | ||
24 | #endif | ||
25 | #include <linux/rbtree.h> | ||
26 | |||
27 | /* | ||
28 | * third extended-fs super-block data in memory | ||
29 | */ | ||
30 | struct ext4_sb_info { | ||
31 | unsigned long s_frag_size; /* Size of a fragment in bytes */ | ||
32 | unsigned long s_desc_size; /* Size of a group descriptor in bytes */ | ||
33 | unsigned long s_frags_per_block;/* Number of fragments per block */ | ||
34 | unsigned long s_inodes_per_block;/* Number of inodes per block */ | ||
35 | unsigned long s_frags_per_group;/* Number of fragments in a group */ | ||
36 | unsigned long s_blocks_per_group;/* Number of blocks in a group */ | ||
37 | unsigned long s_inodes_per_group;/* Number of inodes in a group */ | ||
38 | unsigned long s_itb_per_group; /* Number of inode table blocks per group */ | ||
39 | unsigned long s_gdb_count; /* Number of group descriptor blocks */ | ||
40 | unsigned long s_desc_per_block; /* Number of group descriptors per block */ | ||
41 | unsigned long s_groups_count; /* Number of groups in the fs */ | ||
42 | struct buffer_head * s_sbh; /* Buffer containing the super block */ | ||
43 | struct ext4_super_block * s_es; /* Pointer to the super block in the buffer */ | ||
44 | struct buffer_head ** s_group_desc; | ||
45 | unsigned long s_mount_opt; | ||
46 | uid_t s_resuid; | ||
47 | gid_t s_resgid; | ||
48 | unsigned short s_mount_state; | ||
49 | unsigned short s_pad; | ||
50 | int s_addr_per_block_bits; | ||
51 | int s_desc_per_block_bits; | ||
52 | int s_inode_size; | ||
53 | int s_first_ino; | ||
54 | spinlock_t s_next_gen_lock; | ||
55 | u32 s_next_generation; | ||
56 | u32 s_hash_seed[4]; | ||
57 | int s_def_hash_version; | ||
58 | struct percpu_counter s_freeblocks_counter; | ||
59 | struct percpu_counter s_freeinodes_counter; | ||
60 | struct percpu_counter s_dirs_counter; | ||
61 | struct blockgroup_lock s_blockgroup_lock; | ||
62 | |||
63 | /* root of the per fs reservation window tree */ | ||
64 | spinlock_t s_rsv_window_lock; | ||
65 | struct rb_root s_rsv_window_root; | ||
66 | struct ext4_reserve_window_node s_rsv_window_head; | ||
67 | |||
68 | /* Journaling */ | ||
69 | struct inode * s_journal_inode; | ||
70 | struct journal_s * s_journal; | ||
71 | struct list_head s_orphan; | ||
72 | unsigned long s_commit_interval; | ||
73 | struct block_device *journal_bdev; | ||
74 | #ifdef CONFIG_JBD_DEBUG | ||
75 | struct timer_list turn_ro_timer; /* For turning read-only (crash simulation) */ | ||
76 | wait_queue_head_t ro_wait_queue; /* For people waiting for the fs to go read-only */ | ||
77 | #endif | ||
78 | #ifdef CONFIG_QUOTA | ||
79 | char *s_qf_names[MAXQUOTAS]; /* Names of quota files with journalled quota */ | ||
80 | int s_jquota_fmt; /* Format of quota to use */ | ||
81 | #endif | ||
82 | |||
83 | #ifdef EXTENTS_STATS | ||
84 | /* ext4 extents stats */ | ||
85 | unsigned long s_ext_min; | ||
86 | unsigned long s_ext_max; | ||
87 | unsigned long s_depth_max; | ||
88 | spinlock_t s_ext_stats_lock; | ||
89 | unsigned long s_ext_blocks; | ||
90 | unsigned long s_ext_extents; | ||
91 | #endif | ||
92 | }; | ||
93 | |||
94 | #endif /* _LINUX_EXT4_FS_SB */ | ||
diff --git a/include/linux/ext4_jbd2.h b/include/linux/ext4_jbd2.h new file mode 100644 index 000000000000..72dd631912e4 --- /dev/null +++ b/include/linux/ext4_jbd2.h | |||
@@ -0,0 +1,273 @@ | |||
1 | /* | ||
2 | * linux/include/linux/ext4_jbd2.h | ||
3 | * | ||
4 | * Written by Stephen C. Tweedie <sct@redhat.com>, 1999 | ||
5 | * | ||
6 | * Copyright 1998--1999 Red Hat corp --- All Rights Reserved | ||
7 | * | ||
8 | * This file is part of the Linux kernel and is made available under | ||
9 | * the terms of the GNU General Public License, version 2, or at your | ||
10 | * option, any later version, incorporated herein by reference. | ||
11 | * | ||
12 | * Ext4-specific journaling extensions. | ||
13 | */ | ||
14 | |||
15 | #ifndef _LINUX_EXT4_JBD_H | ||
16 | #define _LINUX_EXT4_JBD_H | ||
17 | |||
18 | #include <linux/fs.h> | ||
19 | #include <linux/jbd2.h> | ||
20 | #include <linux/ext4_fs.h> | ||
21 | |||
22 | #define EXT4_JOURNAL(inode) (EXT4_SB((inode)->i_sb)->s_journal) | ||
23 | |||
24 | /* Define the number of blocks we need to account to a transaction to | ||
25 | * modify one block of data. | ||
26 | * | ||
27 | * We may have to touch one inode, one bitmap buffer, up to three | ||
28 | * indirection blocks, the group and superblock summaries, and the data | ||
29 | * block to complete the transaction. | ||
30 | * | ||
31 | * For extents-enabled fs we may have to allocate and modify up to | ||
32 | * 5 levels of tree + root which are stored in the inode. */ | ||
33 | |||
34 | #define EXT4_SINGLEDATA_TRANS_BLOCKS(sb) \ | ||
35 | (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS) \ | ||
36 | || test_opt(sb, EXTENTS) ? 27U : 8U) | ||
37 | |||
38 | /* Extended attribute operations touch at most two data buffers, | ||
39 | * two bitmap buffers, and two group summaries, in addition to the inode | ||
40 | * and the superblock, which are already accounted for. */ | ||
41 | |||
42 | #define EXT4_XATTR_TRANS_BLOCKS 6U | ||
43 | |||
44 | /* Define the minimum size for a transaction which modifies data. This | ||
45 | * needs to take into account the fact that we may end up modifying two | ||
46 | * quota files too (one for the group, one for the user quota). The | ||
47 | * superblock only gets updated once, of course, so don't bother | ||
48 | * counting that again for the quota updates. */ | ||
49 | |||
50 | #define EXT4_DATA_TRANS_BLOCKS(sb) (EXT4_SINGLEDATA_TRANS_BLOCKS(sb) + \ | ||
51 | EXT4_XATTR_TRANS_BLOCKS - 2 + \ | ||
52 | 2*EXT4_QUOTA_TRANS_BLOCKS(sb)) | ||
53 | |||
54 | /* Delete operations potentially hit one directory's namespace plus an | ||
55 | * entire inode, plus arbitrary amounts of bitmap/indirection data. Be | ||
56 | * generous. We can grow the delete transaction later if necessary. */ | ||
57 | |||
58 | #define EXT4_DELETE_TRANS_BLOCKS(sb) (2 * EXT4_DATA_TRANS_BLOCKS(sb) + 64) | ||
59 | |||
60 | /* Define an arbitrary limit for the amount of data we will anticipate | ||
61 | * writing to any given transaction. For unbounded transactions such as | ||
62 | * write(2) and truncate(2) we can write more than this, but we always | ||
63 | * start off at the maximum transaction size and grow the transaction | ||
64 | * optimistically as we go. */ | ||
65 | |||
66 | #define EXT4_MAX_TRANS_DATA 64U | ||
67 | |||
68 | /* We break up a large truncate or write transaction once the handle's | ||
69 | * buffer credits gets this low, we need either to extend the | ||
70 | * transaction or to start a new one. Reserve enough space here for | ||
71 | * inode, bitmap, superblock, group and indirection updates for at least | ||
72 | * one block, plus two quota updates. Quota allocations are not | ||
73 | * needed. */ | ||
74 | |||
75 | #define EXT4_RESERVE_TRANS_BLOCKS 12U | ||
76 | |||
77 | #define EXT4_INDEX_EXTRA_TRANS_BLOCKS 8 | ||
78 | |||
79 | #ifdef CONFIG_QUOTA | ||
80 | /* Amount of blocks needed for quota update - we know that the structure was | ||
81 | * allocated so we need to update only inode+data */ | ||
82 | #define EXT4_QUOTA_TRANS_BLOCKS(sb) (test_opt(sb, QUOTA) ? 2 : 0) | ||
83 | /* Amount of blocks needed for quota insert/delete - we do some block writes | ||
84 | * but inode, sb and group updates are done only once */ | ||
85 | #define EXT4_QUOTA_INIT_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_INIT_ALLOC*\ | ||
86 | (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_INIT_REWRITE) : 0) | ||
87 | #define EXT4_QUOTA_DEL_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_DEL_ALLOC*\ | ||
88 | (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_DEL_REWRITE) : 0) | ||
89 | #else | ||
90 | #define EXT4_QUOTA_TRANS_BLOCKS(sb) 0 | ||
91 | #define EXT4_QUOTA_INIT_BLOCKS(sb) 0 | ||
92 | #define EXT4_QUOTA_DEL_BLOCKS(sb) 0 | ||
93 | #endif | ||
94 | |||
95 | int | ||
96 | ext4_mark_iloc_dirty(handle_t *handle, | ||
97 | struct inode *inode, | ||
98 | struct ext4_iloc *iloc); | ||
99 | |||
100 | /* | ||
101 | * On success, We end up with an outstanding reference count against | ||
102 | * iloc->bh. This _must_ be cleaned up later. | ||
103 | */ | ||
104 | |||
105 | int ext4_reserve_inode_write(handle_t *handle, struct inode *inode, | ||
106 | struct ext4_iloc *iloc); | ||
107 | |||
108 | int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode); | ||
109 | |||
110 | /* | ||
111 | * Wrapper functions with which ext4 calls into JBD. The intent here is | ||
112 | * to allow these to be turned into appropriate stubs so ext4 can control | ||
113 | * ext2 filesystems, so ext2+ext4 systems only nee one fs. This work hasn't | ||
114 | * been done yet. | ||
115 | */ | ||
116 | |||
117 | void ext4_journal_abort_handle(const char *caller, const char *err_fn, | ||
118 | struct buffer_head *bh, handle_t *handle, int err); | ||
119 | |||
120 | static inline int | ||
121 | __ext4_journal_get_undo_access(const char *where, handle_t *handle, | ||
122 | struct buffer_head *bh) | ||
123 | { | ||
124 | int err = jbd2_journal_get_undo_access(handle, bh); | ||
125 | if (err) | ||
126 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
127 | return err; | ||
128 | } | ||
129 | |||
130 | static inline int | ||
131 | __ext4_journal_get_write_access(const char *where, handle_t *handle, | ||
132 | struct buffer_head *bh) | ||
133 | { | ||
134 | int err = jbd2_journal_get_write_access(handle, bh); | ||
135 | if (err) | ||
136 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
137 | return err; | ||
138 | } | ||
139 | |||
140 | static inline void | ||
141 | ext4_journal_release_buffer(handle_t *handle, struct buffer_head *bh) | ||
142 | { | ||
143 | jbd2_journal_release_buffer(handle, bh); | ||
144 | } | ||
145 | |||
146 | static inline int | ||
147 | __ext4_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh) | ||
148 | { | ||
149 | int err = jbd2_journal_forget(handle, bh); | ||
150 | if (err) | ||
151 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
152 | return err; | ||
153 | } | ||
154 | |||
155 | static inline int | ||
156 | __ext4_journal_revoke(const char *where, handle_t *handle, | ||
157 | ext4_fsblk_t blocknr, struct buffer_head *bh) | ||
158 | { | ||
159 | int err = jbd2_journal_revoke(handle, blocknr, bh); | ||
160 | if (err) | ||
161 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
162 | return err; | ||
163 | } | ||
164 | |||
165 | static inline int | ||
166 | __ext4_journal_get_create_access(const char *where, | ||
167 | handle_t *handle, struct buffer_head *bh) | ||
168 | { | ||
169 | int err = jbd2_journal_get_create_access(handle, bh); | ||
170 | if (err) | ||
171 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
172 | return err; | ||
173 | } | ||
174 | |||
175 | static inline int | ||
176 | __ext4_journal_dirty_metadata(const char *where, | ||
177 | handle_t *handle, struct buffer_head *bh) | ||
178 | { | ||
179 | int err = jbd2_journal_dirty_metadata(handle, bh); | ||
180 | if (err) | ||
181 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
182 | return err; | ||
183 | } | ||
184 | |||
185 | |||
186 | #define ext4_journal_get_undo_access(handle, bh) \ | ||
187 | __ext4_journal_get_undo_access(__FUNCTION__, (handle), (bh)) | ||
188 | #define ext4_journal_get_write_access(handle, bh) \ | ||
189 | __ext4_journal_get_write_access(__FUNCTION__, (handle), (bh)) | ||
190 | #define ext4_journal_revoke(handle, blocknr, bh) \ | ||
191 | __ext4_journal_revoke(__FUNCTION__, (handle), (blocknr), (bh)) | ||
192 | #define ext4_journal_get_create_access(handle, bh) \ | ||
193 | __ext4_journal_get_create_access(__FUNCTION__, (handle), (bh)) | ||
194 | #define ext4_journal_dirty_metadata(handle, bh) \ | ||
195 | __ext4_journal_dirty_metadata(__FUNCTION__, (handle), (bh)) | ||
196 | #define ext4_journal_forget(handle, bh) \ | ||
197 | __ext4_journal_forget(__FUNCTION__, (handle), (bh)) | ||
198 | |||
199 | int ext4_journal_dirty_data(handle_t *handle, struct buffer_head *bh); | ||
200 | |||
201 | handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks); | ||
202 | int __ext4_journal_stop(const char *where, handle_t *handle); | ||
203 | |||
204 | static inline handle_t *ext4_journal_start(struct inode *inode, int nblocks) | ||
205 | { | ||
206 | return ext4_journal_start_sb(inode->i_sb, nblocks); | ||
207 | } | ||
208 | |||
209 | #define ext4_journal_stop(handle) \ | ||
210 | __ext4_journal_stop(__FUNCTION__, (handle)) | ||
211 | |||
212 | static inline handle_t *ext4_journal_current_handle(void) | ||
213 | { | ||
214 | return journal_current_handle(); | ||
215 | } | ||
216 | |||
217 | static inline int ext4_journal_extend(handle_t *handle, int nblocks) | ||
218 | { | ||
219 | return jbd2_journal_extend(handle, nblocks); | ||
220 | } | ||
221 | |||
222 | static inline int ext4_journal_restart(handle_t *handle, int nblocks) | ||
223 | { | ||
224 | return jbd2_journal_restart(handle, nblocks); | ||
225 | } | ||
226 | |||
227 | static inline int ext4_journal_blocks_per_page(struct inode *inode) | ||
228 | { | ||
229 | return jbd2_journal_blocks_per_page(inode); | ||
230 | } | ||
231 | |||
232 | static inline int ext4_journal_force_commit(journal_t *journal) | ||
233 | { | ||
234 | return jbd2_journal_force_commit(journal); | ||
235 | } | ||
236 | |||
237 | /* super.c */ | ||
238 | int ext4_force_commit(struct super_block *sb); | ||
239 | |||
240 | static inline int ext4_should_journal_data(struct inode *inode) | ||
241 | { | ||
242 | if (!S_ISREG(inode->i_mode)) | ||
243 | return 1; | ||
244 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) | ||
245 | return 1; | ||
246 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) | ||
247 | return 1; | ||
248 | return 0; | ||
249 | } | ||
250 | |||
251 | static inline int ext4_should_order_data(struct inode *inode) | ||
252 | { | ||
253 | if (!S_ISREG(inode->i_mode)) | ||
254 | return 0; | ||
255 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) | ||
256 | return 0; | ||
257 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) | ||
258 | return 1; | ||
259 | return 0; | ||
260 | } | ||
261 | |||
262 | static inline int ext4_should_writeback_data(struct inode *inode) | ||
263 | { | ||
264 | if (!S_ISREG(inode->i_mode)) | ||
265 | return 0; | ||
266 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) | ||
267 | return 0; | ||
268 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) | ||
269 | return 1; | ||
270 | return 0; | ||
271 | } | ||
272 | |||
273 | #endif /* _LINUX_EXT4_JBD_H */ | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index f53bf4ff1955..661c7c572149 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -250,6 +250,8 @@ extern int dir_notify_enable; | |||
250 | #define FS_NOTAIL_FL 0x00008000 /* file tail should not be merged */ | 250 | #define FS_NOTAIL_FL 0x00008000 /* file tail should not be merged */ |
251 | #define FS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ | 251 | #define FS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ |
252 | #define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ | 252 | #define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ |
253 | #define FS_EXTENT_FL 0x00080000 /* Extents */ | ||
254 | #define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */ | ||
253 | #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ | 255 | #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ |
254 | 256 | ||
255 | #define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ | 257 | #define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ |
@@ -654,7 +656,11 @@ static inline loff_t i_size_read(struct inode *inode) | |||
654 | #endif | 656 | #endif |
655 | } | 657 | } |
656 | 658 | ||
657 | 659 | /* | |
660 | * NOTE: unlike i_size_read(), i_size_write() does need locking around it | ||
661 | * (normally i_mutex), otherwise on 32bit/SMP an update of i_size_seqcount | ||
662 | * can be lost, resulting in subsequent i_size_read() calls spinning forever. | ||
663 | */ | ||
658 | static inline void i_size_write(struct inode *inode, loff_t i_size) | 664 | static inline void i_size_write(struct inode *inode, loff_t i_size) |
659 | { | 665 | { |
660 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) | 666 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index 16fbe59edeb1..3da29e2d524a 100644 --- a/include/linux/fsl_devices.h +++ b/include/linux/fsl_devices.h | |||
@@ -46,18 +46,17 @@ | |||
46 | 46 | ||
47 | struct gianfar_platform_data { | 47 | struct gianfar_platform_data { |
48 | /* device specific information */ | 48 | /* device specific information */ |
49 | u32 device_flags; | 49 | u32 device_flags; |
50 | |||
51 | /* board specific information */ | 50 | /* board specific information */ |
52 | u32 board_flags; | 51 | u32 board_flags; |
53 | u32 bus_id; | 52 | u32 bus_id; |
54 | u32 phy_id; | 53 | u32 phy_id; |
55 | u8 mac_addr[6]; | 54 | u8 mac_addr[6]; |
56 | }; | 55 | }; |
57 | 56 | ||
58 | struct gianfar_mdio_data { | 57 | struct gianfar_mdio_data { |
59 | /* board specific information */ | 58 | /* board specific information */ |
60 | int irq[32]; | 59 | int irq[32]; |
61 | }; | 60 | }; |
62 | 61 | ||
63 | /* Flags related to gianfar device features */ | 62 | /* Flags related to gianfar device features */ |
@@ -76,14 +75,13 @@ struct gianfar_mdio_data { | |||
76 | 75 | ||
77 | struct fsl_i2c_platform_data { | 76 | struct fsl_i2c_platform_data { |
78 | /* device specific information */ | 77 | /* device specific information */ |
79 | u32 device_flags; | 78 | u32 device_flags; |
80 | }; | 79 | }; |
81 | 80 | ||
82 | /* Flags related to I2C device features */ | 81 | /* Flags related to I2C device features */ |
83 | #define FSL_I2C_DEV_SEPARATE_DFSRR 0x00000001 | 82 | #define FSL_I2C_DEV_SEPARATE_DFSRR 0x00000001 |
84 | #define FSL_I2C_DEV_CLOCK_5200 0x00000002 | 83 | #define FSL_I2C_DEV_CLOCK_5200 0x00000002 |
85 | 84 | ||
86 | |||
87 | enum fsl_usb2_operating_modes { | 85 | enum fsl_usb2_operating_modes { |
88 | FSL_USB2_MPH_HOST, | 86 | FSL_USB2_MPH_HOST, |
89 | FSL_USB2_DR_HOST, | 87 | FSL_USB2_DR_HOST, |
@@ -101,9 +99,9 @@ enum fsl_usb2_phy_modes { | |||
101 | 99 | ||
102 | struct fsl_usb2_platform_data { | 100 | struct fsl_usb2_platform_data { |
103 | /* board specific information */ | 101 | /* board specific information */ |
104 | enum fsl_usb2_operating_modes operating_mode; | 102 | enum fsl_usb2_operating_modes operating_mode; |
105 | enum fsl_usb2_phy_modes phy_mode; | 103 | enum fsl_usb2_phy_modes phy_mode; |
106 | unsigned int port_enables; | 104 | unsigned int port_enables; |
107 | }; | 105 | }; |
108 | 106 | ||
109 | /* Flags in fsl_usb2_mph_platform_data */ | 107 | /* Flags in fsl_usb2_mph_platform_data */ |
@@ -121,5 +119,44 @@ struct fsl_spi_platform_data { | |||
121 | u32 sysclk; | 119 | u32 sysclk; |
122 | }; | 120 | }; |
123 | 121 | ||
124 | #endif /* _FSL_DEVICE_H_ */ | 122 | /* Ethernet interface (phy management and speed) |
125 | #endif /* __KERNEL__ */ | 123 | */ |
124 | enum enet_interface { | ||
125 | ENET_10_MII, /* 10 Base T, MII interface */ | ||
126 | ENET_10_RMII, /* 10 Base T, RMII interface */ | ||
127 | ENET_10_RGMII, /* 10 Base T, RGMII interface */ | ||
128 | ENET_100_MII, /* 100 Base T, MII interface */ | ||
129 | ENET_100_RMII, /* 100 Base T, RMII interface */ | ||
130 | ENET_100_RGMII, /* 100 Base T, RGMII interface */ | ||
131 | ENET_1000_GMII, /* 1000 Base T, GMII interface */ | ||
132 | ENET_1000_RGMII, /* 1000 Base T, RGMII interface */ | ||
133 | ENET_1000_TBI, /* 1000 Base T, TBI interface */ | ||
134 | ENET_1000_RTBI /* 1000 Base T, RTBI interface */ | ||
135 | }; | ||
136 | |||
137 | struct ucc_geth_platform_data { | ||
138 | /* device specific information */ | ||
139 | u32 device_flags; | ||
140 | u32 phy_reg_addr; | ||
141 | |||
142 | /* board specific information */ | ||
143 | u32 board_flags; | ||
144 | u8 rx_clock; | ||
145 | u8 tx_clock; | ||
146 | u32 phy_id; | ||
147 | enum enet_interface phy_interface; | ||
148 | u32 phy_interrupt; | ||
149 | u8 mac_addr[6]; | ||
150 | }; | ||
151 | |||
152 | /* Flags related to UCC Gigabit Ethernet device features */ | ||
153 | #define FSL_UGETH_DEV_HAS_GIGABIT 0x00000001 | ||
154 | #define FSL_UGETH_DEV_HAS_COALESCE 0x00000002 | ||
155 | #define FSL_UGETH_DEV_HAS_RMON 0x00000004 | ||
156 | |||
157 | /* Flags in ucc_geth_platform_data */ | ||
158 | #define FSL_UGETH_BRD_HAS_PHY_INTR 0x00000001 | ||
159 | /* if not set use a timer */ | ||
160 | |||
161 | #endif /* _FSL_DEVICE_H_ */ | ||
162 | #endif /* __KERNEL__ */ | ||
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h new file mode 100644 index 000000000000..a7ae7c177cac --- /dev/null +++ b/include/linux/gfs2_ondisk.h | |||
@@ -0,0 +1,443 @@ | |||
1 | /* | ||
2 | * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
3 | * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. | ||
4 | * | ||
5 | * This copyrighted material is made available to anyone wishing to use, | ||
6 | * modify, copy, or redistribute it subject to the terms and conditions | ||
7 | * of the GNU General Public License v.2. | ||
8 | */ | ||
9 | |||
10 | #ifndef __GFS2_ONDISK_DOT_H__ | ||
11 | #define __GFS2_ONDISK_DOT_H__ | ||
12 | |||
13 | #define GFS2_MAGIC 0x01161970 | ||
14 | #define GFS2_BASIC_BLOCK 512 | ||
15 | #define GFS2_BASIC_BLOCK_SHIFT 9 | ||
16 | |||
17 | /* Lock numbers of the LM_TYPE_NONDISK type */ | ||
18 | |||
19 | #define GFS2_MOUNT_LOCK 0 | ||
20 | #define GFS2_LIVE_LOCK 1 | ||
21 | #define GFS2_TRANS_LOCK 2 | ||
22 | #define GFS2_RENAME_LOCK 3 | ||
23 | |||
24 | /* Format numbers for various metadata types */ | ||
25 | |||
26 | #define GFS2_FORMAT_NONE 0 | ||
27 | #define GFS2_FORMAT_SB 100 | ||
28 | #define GFS2_FORMAT_RG 200 | ||
29 | #define GFS2_FORMAT_RB 300 | ||
30 | #define GFS2_FORMAT_DI 400 | ||
31 | #define GFS2_FORMAT_IN 500 | ||
32 | #define GFS2_FORMAT_LF 600 | ||
33 | #define GFS2_FORMAT_JD 700 | ||
34 | #define GFS2_FORMAT_LH 800 | ||
35 | #define GFS2_FORMAT_LD 900 | ||
36 | #define GFS2_FORMAT_LB 1000 | ||
37 | #define GFS2_FORMAT_EA 1600 | ||
38 | #define GFS2_FORMAT_ED 1700 | ||
39 | #define GFS2_FORMAT_QC 1400 | ||
40 | /* These are format numbers for entities contained in files */ | ||
41 | #define GFS2_FORMAT_RI 1100 | ||
42 | #define GFS2_FORMAT_DE 1200 | ||
43 | #define GFS2_FORMAT_QU 1500 | ||
44 | /* These are part of the superblock */ | ||
45 | #define GFS2_FORMAT_FS 1801 | ||
46 | #define GFS2_FORMAT_MULTI 1900 | ||
47 | |||
48 | /* | ||
49 | * An on-disk inode number | ||
50 | */ | ||
51 | |||
52 | struct gfs2_inum { | ||
53 | __be64 no_formal_ino; | ||
54 | __be64 no_addr; | ||
55 | }; | ||
56 | |||
57 | static inline int gfs2_inum_equal(const struct gfs2_inum *ino1, | ||
58 | const struct gfs2_inum *ino2) | ||
59 | { | ||
60 | return ino1->no_formal_ino == ino2->no_formal_ino && | ||
61 | ino1->no_addr == ino2->no_addr; | ||
62 | } | ||
63 | |||
64 | /* | ||
65 | * Generic metadata head structure | ||
66 | * Every inplace buffer logged in the journal must start with this. | ||
67 | */ | ||
68 | |||
69 | #define GFS2_METATYPE_NONE 0 | ||
70 | #define GFS2_METATYPE_SB 1 | ||
71 | #define GFS2_METATYPE_RG 2 | ||
72 | #define GFS2_METATYPE_RB 3 | ||
73 | #define GFS2_METATYPE_DI 4 | ||
74 | #define GFS2_METATYPE_IN 5 | ||
75 | #define GFS2_METATYPE_LF 6 | ||
76 | #define GFS2_METATYPE_JD 7 | ||
77 | #define GFS2_METATYPE_LH 8 | ||
78 | #define GFS2_METATYPE_LD 9 | ||
79 | #define GFS2_METATYPE_LB 12 | ||
80 | #define GFS2_METATYPE_EA 10 | ||
81 | #define GFS2_METATYPE_ED 11 | ||
82 | #define GFS2_METATYPE_QC 14 | ||
83 | |||
84 | struct gfs2_meta_header { | ||
85 | __be32 mh_magic; | ||
86 | __be32 mh_type; | ||
87 | __be64 __pad0; /* Was generation number in gfs1 */ | ||
88 | __be32 mh_format; | ||
89 | __be32 __pad1; /* Was incarnation number in gfs1 */ | ||
90 | }; | ||
91 | |||
92 | /* | ||
93 | * super-block structure | ||
94 | * | ||
95 | * It's probably good if SIZEOF_SB <= GFS2_BASIC_BLOCK (512 bytes) | ||
96 | * | ||
97 | * Order is important, need to be able to read old superblocks to do on-disk | ||
98 | * version upgrades. | ||
99 | */ | ||
100 | |||
101 | /* Address of superblock in GFS2 basic blocks */ | ||
102 | #define GFS2_SB_ADDR 128 | ||
103 | |||
104 | /* The lock number for the superblock (must be zero) */ | ||
105 | #define GFS2_SB_LOCK 0 | ||
106 | |||
107 | /* Requirement: GFS2_LOCKNAME_LEN % 8 == 0 | ||
108 | Includes: the fencing zero at the end */ | ||
109 | #define GFS2_LOCKNAME_LEN 64 | ||
110 | |||
111 | struct gfs2_sb { | ||
112 | struct gfs2_meta_header sb_header; | ||
113 | |||
114 | __be32 sb_fs_format; | ||
115 | __be32 sb_multihost_format; | ||
116 | __u32 __pad0; /* Was superblock flags in gfs1 */ | ||
117 | |||
118 | __be32 sb_bsize; | ||
119 | __be32 sb_bsize_shift; | ||
120 | __u32 __pad1; /* Was journal segment size in gfs1 */ | ||
121 | |||
122 | struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ | ||
123 | struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */ | ||
124 | struct gfs2_inum sb_root_dir; | ||
125 | |||
126 | char sb_lockproto[GFS2_LOCKNAME_LEN]; | ||
127 | char sb_locktable[GFS2_LOCKNAME_LEN]; | ||
128 | /* In gfs1, quota and license dinodes followed */ | ||
129 | }; | ||
130 | |||
131 | /* | ||
132 | * resource index structure | ||
133 | */ | ||
134 | |||
135 | struct gfs2_rindex { | ||
136 | __be64 ri_addr; /* grp block disk address */ | ||
137 | __be32 ri_length; /* length of rgrp header in fs blocks */ | ||
138 | __u32 __pad; | ||
139 | |||
140 | __be64 ri_data0; /* first data location */ | ||
141 | __be32 ri_data; /* num of data blocks in rgrp */ | ||
142 | |||
143 | __be32 ri_bitbytes; /* number of bytes in data bitmaps */ | ||
144 | |||
145 | __u8 ri_reserved[64]; | ||
146 | }; | ||
147 | |||
148 | /* | ||
149 | * resource group header structure | ||
150 | */ | ||
151 | |||
152 | /* Number of blocks per byte in rgrp */ | ||
153 | #define GFS2_NBBY 4 | ||
154 | #define GFS2_BIT_SIZE 2 | ||
155 | #define GFS2_BIT_MASK 0x00000003 | ||
156 | |||
157 | #define GFS2_BLKST_FREE 0 | ||
158 | #define GFS2_BLKST_USED 1 | ||
159 | #define GFS2_BLKST_UNLINKED 2 | ||
160 | #define GFS2_BLKST_DINODE 3 | ||
161 | |||
162 | #define GFS2_RGF_JOURNAL 0x00000001 | ||
163 | #define GFS2_RGF_METAONLY 0x00000002 | ||
164 | #define GFS2_RGF_DATAONLY 0x00000004 | ||
165 | #define GFS2_RGF_NOALLOC 0x00000008 | ||
166 | |||
167 | struct gfs2_rgrp { | ||
168 | struct gfs2_meta_header rg_header; | ||
169 | |||
170 | __be32 rg_flags; | ||
171 | __be32 rg_free; | ||
172 | __be32 rg_dinodes; | ||
173 | __be32 __pad; | ||
174 | __be64 rg_igeneration; | ||
175 | |||
176 | __u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */ | ||
177 | }; | ||
178 | |||
179 | /* | ||
180 | * quota structure | ||
181 | */ | ||
182 | |||
183 | struct gfs2_quota { | ||
184 | __be64 qu_limit; | ||
185 | __be64 qu_warn; | ||
186 | __be64 qu_value; | ||
187 | __u8 qu_reserved[64]; | ||
188 | }; | ||
189 | |||
190 | /* | ||
191 | * dinode structure | ||
192 | */ | ||
193 | |||
194 | #define GFS2_MAX_META_HEIGHT 10 | ||
195 | #define GFS2_DIR_MAX_DEPTH 17 | ||
196 | |||
197 | #define DT2IF(dt) (((dt) << 12) & S_IFMT) | ||
198 | #define IF2DT(sif) (((sif) & S_IFMT) >> 12) | ||
199 | |||
200 | enum { | ||
201 | gfs2fl_Jdata = 0, | ||
202 | gfs2fl_ExHash = 1, | ||
203 | gfs2fl_Unused = 2, | ||
204 | gfs2fl_EaIndirect = 3, | ||
205 | gfs2fl_Directio = 4, | ||
206 | gfs2fl_Immutable = 5, | ||
207 | gfs2fl_AppendOnly = 6, | ||
208 | gfs2fl_NoAtime = 7, | ||
209 | gfs2fl_Sync = 8, | ||
210 | gfs2fl_System = 9, | ||
211 | gfs2fl_TruncInProg = 29, | ||
212 | gfs2fl_InheritDirectio = 30, | ||
213 | gfs2fl_InheritJdata = 31, | ||
214 | }; | ||
215 | |||
216 | /* Dinode flags */ | ||
217 | #define GFS2_DIF_JDATA 0x00000001 | ||
218 | #define GFS2_DIF_EXHASH 0x00000002 | ||
219 | #define GFS2_DIF_UNUSED 0x00000004 /* only in gfs1 */ | ||
220 | #define GFS2_DIF_EA_INDIRECT 0x00000008 | ||
221 | #define GFS2_DIF_DIRECTIO 0x00000010 | ||
222 | #define GFS2_DIF_IMMUTABLE 0x00000020 | ||
223 | #define GFS2_DIF_APPENDONLY 0x00000040 | ||
224 | #define GFS2_DIF_NOATIME 0x00000080 | ||
225 | #define GFS2_DIF_SYNC 0x00000100 | ||
226 | #define GFS2_DIF_SYSTEM 0x00000200 /* New in gfs2 */ | ||
227 | #define GFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */ | ||
228 | #define GFS2_DIF_INHERIT_DIRECTIO 0x40000000 | ||
229 | #define GFS2_DIF_INHERIT_JDATA 0x80000000 | ||
230 | |||
231 | struct gfs2_dinode { | ||
232 | struct gfs2_meta_header di_header; | ||
233 | |||
234 | struct gfs2_inum di_num; | ||
235 | |||
236 | __be32 di_mode; /* mode of file */ | ||
237 | __be32 di_uid; /* owner's user id */ | ||
238 | __be32 di_gid; /* owner's group id */ | ||
239 | __be32 di_nlink; /* number of links to this file */ | ||
240 | __be64 di_size; /* number of bytes in file */ | ||
241 | __be64 di_blocks; /* number of blocks in file */ | ||
242 | __be64 di_atime; /* time last accessed */ | ||
243 | __be64 di_mtime; /* time last modified */ | ||
244 | __be64 di_ctime; /* time last changed */ | ||
245 | __be32 di_major; /* device major number */ | ||
246 | __be32 di_minor; /* device minor number */ | ||
247 | |||
248 | /* This section varies from gfs1. Padding added to align with | ||
249 | * remainder of dinode | ||
250 | */ | ||
251 | __be64 di_goal_meta; /* rgrp to alloc from next */ | ||
252 | __be64 di_goal_data; /* data block goal */ | ||
253 | __be64 di_generation; /* generation number for NFS */ | ||
254 | |||
255 | __be32 di_flags; /* GFS2_DIF_... */ | ||
256 | __be32 di_payload_format; /* GFS2_FORMAT_... */ | ||
257 | __u16 __pad1; /* Was ditype in gfs1 */ | ||
258 | __be16 di_height; /* height of metadata */ | ||
259 | __u32 __pad2; /* Unused incarnation number from gfs1 */ | ||
260 | |||
261 | /* These only apply to directories */ | ||
262 | __u16 __pad3; /* Padding */ | ||
263 | __be16 di_depth; /* Number of bits in the table */ | ||
264 | __be32 di_entries; /* The number of entries in the directory */ | ||
265 | |||
266 | struct gfs2_inum __pad4; /* Unused even in current gfs1 */ | ||
267 | |||
268 | __be64 di_eattr; /* extended attribute block number */ | ||
269 | |||
270 | __u8 di_reserved[56]; | ||
271 | }; | ||
272 | |||
273 | /* | ||
274 | * directory structure - many of these per directory file | ||
275 | */ | ||
276 | |||
277 | #define GFS2_FNAMESIZE 255 | ||
278 | #define GFS2_DIRENT_SIZE(name_len) ((sizeof(struct gfs2_dirent) + (name_len) + 7) & ~7) | ||
279 | |||
280 | struct gfs2_dirent { | ||
281 | struct gfs2_inum de_inum; | ||
282 | __be32 de_hash; | ||
283 | __be16 de_rec_len; | ||
284 | __be16 de_name_len; | ||
285 | __be16 de_type; | ||
286 | __u8 __pad[14]; | ||
287 | }; | ||
288 | |||
289 | /* | ||
290 | * Header of leaf directory nodes | ||
291 | */ | ||
292 | |||
293 | struct gfs2_leaf { | ||
294 | struct gfs2_meta_header lf_header; | ||
295 | |||
296 | __be16 lf_depth; /* Depth of leaf */ | ||
297 | __be16 lf_entries; /* Number of dirents in leaf */ | ||
298 | __be32 lf_dirent_format; /* Format of the dirents */ | ||
299 | __be64 lf_next; /* Next leaf, if overflow */ | ||
300 | |||
301 | __u8 lf_reserved[64]; | ||
302 | }; | ||
303 | |||
304 | /* | ||
305 | * Extended attribute header format | ||
306 | */ | ||
307 | |||
308 | #define GFS2_EA_MAX_NAME_LEN 255 | ||
309 | #define GFS2_EA_MAX_DATA_LEN 65536 | ||
310 | |||
311 | #define GFS2_EATYPE_UNUSED 0 | ||
312 | #define GFS2_EATYPE_USR 1 | ||
313 | #define GFS2_EATYPE_SYS 2 | ||
314 | #define GFS2_EATYPE_SECURITY 3 | ||
315 | |||
316 | #define GFS2_EATYPE_LAST 3 | ||
317 | #define GFS2_EATYPE_VALID(x) ((x) <= GFS2_EATYPE_LAST) | ||
318 | |||
319 | #define GFS2_EAFLAG_LAST 0x01 /* last ea in block */ | ||
320 | |||
321 | struct gfs2_ea_header { | ||
322 | __be32 ea_rec_len; | ||
323 | __be32 ea_data_len; | ||
324 | __u8 ea_name_len; /* no NULL pointer after the string */ | ||
325 | __u8 ea_type; /* GFS2_EATYPE_... */ | ||
326 | __u8 ea_flags; /* GFS2_EAFLAG_... */ | ||
327 | __u8 ea_num_ptrs; | ||
328 | __u32 __pad; | ||
329 | }; | ||
330 | |||
331 | /* | ||
332 | * Log header structure | ||
333 | */ | ||
334 | |||
335 | #define GFS2_LOG_HEAD_UNMOUNT 0x00000001 /* log is clean */ | ||
336 | |||
337 | struct gfs2_log_header { | ||
338 | struct gfs2_meta_header lh_header; | ||
339 | |||
340 | __be64 lh_sequence; /* Sequence number of this transaction */ | ||
341 | __be32 lh_flags; /* GFS2_LOG_HEAD_... */ | ||
342 | __be32 lh_tail; /* Block number of log tail */ | ||
343 | __be32 lh_blkno; | ||
344 | __be32 lh_hash; | ||
345 | }; | ||
346 | |||
347 | /* | ||
348 | * Log type descriptor | ||
349 | */ | ||
350 | |||
351 | #define GFS2_LOG_DESC_METADATA 300 | ||
352 | /* ld_data1 is the number of metadata blocks in the descriptor. | ||
353 | ld_data2 is unused. */ | ||
354 | |||
355 | #define GFS2_LOG_DESC_REVOKE 301 | ||
356 | /* ld_data1 is the number of revoke blocks in the descriptor. | ||
357 | ld_data2 is unused. */ | ||
358 | |||
359 | #define GFS2_LOG_DESC_JDATA 302 | ||
360 | /* ld_data1 is the number of data blocks in the descriptor. | ||
361 | ld_data2 is unused. */ | ||
362 | |||
363 | struct gfs2_log_descriptor { | ||
364 | struct gfs2_meta_header ld_header; | ||
365 | |||
366 | __be32 ld_type; /* GFS2_LOG_DESC_... */ | ||
367 | __be32 ld_length; /* Number of buffers in this chunk */ | ||
368 | __be32 ld_data1; /* descriptor-specific field */ | ||
369 | __be32 ld_data2; /* descriptor-specific field */ | ||
370 | |||
371 | __u8 ld_reserved[32]; | ||
372 | }; | ||
373 | |||
374 | /* | ||
375 | * Inum Range | ||
376 | * Describe a range of formal inode numbers allocated to | ||
377 | * one machine to assign to inodes. | ||
378 | */ | ||
379 | |||
380 | #define GFS2_INUM_QUANTUM 1048576 | ||
381 | |||
382 | struct gfs2_inum_range { | ||
383 | __be64 ir_start; | ||
384 | __be64 ir_length; | ||
385 | }; | ||
386 | |||
387 | /* | ||
388 | * Statfs change | ||
389 | * Describes an change to the pool of free and allocated | ||
390 | * blocks. | ||
391 | */ | ||
392 | |||
393 | struct gfs2_statfs_change { | ||
394 | __be64 sc_total; | ||
395 | __be64 sc_free; | ||
396 | __be64 sc_dinodes; | ||
397 | }; | ||
398 | |||
399 | /* | ||
400 | * Quota change | ||
401 | * Describes an allocation change for a particular | ||
402 | * user or group. | ||
403 | */ | ||
404 | |||
405 | #define GFS2_QCF_USER 0x00000001 | ||
406 | |||
407 | struct gfs2_quota_change { | ||
408 | __be64 qc_change; | ||
409 | __be32 qc_flags; /* GFS2_QCF_... */ | ||
410 | __be32 qc_id; | ||
411 | }; | ||
412 | |||
413 | #ifdef __KERNEL__ | ||
414 | /* Translation functions */ | ||
415 | |||
416 | extern void gfs2_inum_in(struct gfs2_inum *no, const void *buf); | ||
417 | extern void gfs2_inum_out(const struct gfs2_inum *no, void *buf); | ||
418 | extern void gfs2_sb_in(struct gfs2_sb *sb, const void *buf); | ||
419 | extern void gfs2_rindex_in(struct gfs2_rindex *ri, const void *buf); | ||
420 | extern void gfs2_rindex_out(const struct gfs2_rindex *ri, void *buf); | ||
421 | extern void gfs2_rgrp_in(struct gfs2_rgrp *rg, const void *buf); | ||
422 | extern void gfs2_rgrp_out(const struct gfs2_rgrp *rg, void *buf); | ||
423 | extern void gfs2_quota_in(struct gfs2_quota *qu, const void *buf); | ||
424 | extern void gfs2_quota_out(const struct gfs2_quota *qu, void *buf); | ||
425 | extern void gfs2_dinode_in(struct gfs2_dinode *di, const void *buf); | ||
426 | extern void gfs2_dinode_out(const struct gfs2_dinode *di, void *buf); | ||
427 | extern void gfs2_ea_header_in(struct gfs2_ea_header *ea, const void *buf); | ||
428 | extern void gfs2_ea_header_out(const struct gfs2_ea_header *ea, void *buf); | ||
429 | extern void gfs2_log_header_in(struct gfs2_log_header *lh, const void *buf); | ||
430 | extern void gfs2_inum_range_in(struct gfs2_inum_range *ir, const void *buf); | ||
431 | extern void gfs2_inum_range_out(const struct gfs2_inum_range *ir, void *buf); | ||
432 | extern void gfs2_statfs_change_in(struct gfs2_statfs_change *sc, const void *buf); | ||
433 | extern void gfs2_statfs_change_out(const struct gfs2_statfs_change *sc, void *buf); | ||
434 | extern void gfs2_quota_change_in(struct gfs2_quota_change *qc, const void *buf); | ||
435 | |||
436 | /* Printing functions */ | ||
437 | |||
438 | extern void gfs2_rindex_print(const struct gfs2_rindex *ri); | ||
439 | extern void gfs2_dinode_print(const struct gfs2_dinode *di); | ||
440 | |||
441 | #endif /* __KERNEL__ */ | ||
442 | |||
443 | #endif /* __GFS2_ONDISK_DOT_H__ */ | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 50d8b5744cf6..612472aaa79c 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
@@ -28,11 +28,16 @@ | |||
28 | 28 | ||
29 | #ifndef HARDIRQ_BITS | 29 | #ifndef HARDIRQ_BITS |
30 | #define HARDIRQ_BITS 12 | 30 | #define HARDIRQ_BITS 12 |
31 | |||
32 | #ifndef MAX_HARDIRQS_PER_CPU | ||
33 | #define MAX_HARDIRQS_PER_CPU NR_IRQS | ||
34 | #endif | ||
35 | |||
31 | /* | 36 | /* |
32 | * The hardirq mask has to be large enough to have space for potentially | 37 | * The hardirq mask has to be large enough to have space for potentially |
33 | * all IRQ sources in the system nesting on a single CPU. | 38 | * all IRQ sources in the system nesting on a single CPU. |
34 | */ | 39 | */ |
35 | #if (1 << HARDIRQ_BITS) < NR_IRQS | 40 | #if (1 << HARDIRQ_BITS) < MAX_HARDIRQS_PER_CPU |
36 | # error HARDIRQ_BITS is too low! | 41 | # error HARDIRQ_BITS is too low! |
37 | #endif | 42 | #endif |
38 | #endif | 43 | #endif |
diff --git a/include/linux/hiddev.h b/include/linux/hiddev.h index 945ba1ad14ac..acbdae6d7ae1 100644 --- a/include/linux/hiddev.h +++ b/include/linux/hiddev.h | |||
@@ -222,7 +222,7 @@ struct hid_report; | |||
222 | int hiddev_connect(struct hid_device *); | 222 | int hiddev_connect(struct hid_device *); |
223 | void hiddev_disconnect(struct hid_device *); | 223 | void hiddev_disconnect(struct hid_device *); |
224 | void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, | 224 | void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, |
225 | struct hid_usage *usage, __s32 value, struct pt_regs *regs); | 225 | struct hid_usage *usage, __s32 value); |
226 | void hiddev_report_event(struct hid_device *hid, struct hid_report *report); | 226 | void hiddev_report_event(struct hid_device *hid, struct hid_report *report); |
227 | int __init hiddev_init(void); | 227 | int __init hiddev_init(void); |
228 | void hiddev_exit(void); | 228 | void hiddev_exit(void); |
@@ -230,7 +230,7 @@ void hiddev_exit(void); | |||
230 | static inline int hiddev_connect(struct hid_device *hid) { return -1; } | 230 | static inline int hiddev_connect(struct hid_device *hid) { return -1; } |
231 | static inline void hiddev_disconnect(struct hid_device *hid) { } | 231 | static inline void hiddev_disconnect(struct hid_device *hid) { } |
232 | static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, | 232 | static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, |
233 | struct hid_usage *usage, __s32 value, struct pt_regs *regs) { } | 233 | struct hid_usage *usage, __s32 value) { } |
234 | static inline void hiddev_report_event(struct hid_device *hid, struct hid_report *report) { } | 234 | static inline void hiddev_report_event(struct hid_device *hid, struct hid_report *report) { } |
235 | static inline int hiddev_init(void) { return 0; } | 235 | static inline int hiddev_init(void) { return 0; } |
236 | static inline void hiddev_exit(void) { } | 236 | static inline void hiddev_exit(void) { } |
diff --git a/include/linux/htirq.h b/include/linux/htirq.h new file mode 100644 index 000000000000..1f15ce279a23 --- /dev/null +++ b/include/linux/htirq.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef LINUX_HTIRQ_H | ||
2 | #define LINUX_HTIRQ_H | ||
3 | |||
4 | /* Helper functions.. */ | ||
5 | void write_ht_irq_low(unsigned int irq, u32 data); | ||
6 | void write_ht_irq_high(unsigned int irq, u32 data); | ||
7 | u32 read_ht_irq_low(unsigned int irq); | ||
8 | u32 read_ht_irq_high(unsigned int irq); | ||
9 | void mask_ht_irq(unsigned int irq); | ||
10 | void unmask_ht_irq(unsigned int irq); | ||
11 | |||
12 | /* The arch hook for getting things started */ | ||
13 | int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev); | ||
14 | |||
15 | #endif /* LINUX_HTIRQ_H */ | ||
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index c25a38d8f600..5081d27bfa27 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -17,6 +17,7 @@ int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void __user * | |||
17 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); | 17 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); |
18 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int); | 18 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int); |
19 | void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); | 19 | void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); |
20 | void __unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); | ||
20 | int hugetlb_prefault(struct address_space *, struct vm_area_struct *); | 21 | int hugetlb_prefault(struct address_space *, struct vm_area_struct *); |
21 | int hugetlb_report_meminfo(char *); | 22 | int hugetlb_report_meminfo(char *); |
22 | int hugetlb_report_node_meminfo(int, char *); | 23 | int hugetlb_report_node_meminfo(int, char *); |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 07d8d725541f..9c2050293f17 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -1185,7 +1185,7 @@ extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout); | |||
1185 | 1185 | ||
1186 | extern int ide_spin_wait_hwgroup(ide_drive_t *); | 1186 | extern int ide_spin_wait_hwgroup(ide_drive_t *); |
1187 | extern void ide_timer_expiry(unsigned long); | 1187 | extern void ide_timer_expiry(unsigned long); |
1188 | extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs); | 1188 | extern irqreturn_t ide_intr(int irq, void *dev_id); |
1189 | extern void do_ide_request(request_queue_t *); | 1189 | extern void do_ide_request(request_queue_t *); |
1190 | 1190 | ||
1191 | void ide_init_disk(struct gendisk *, ide_drive_t *); | 1191 | void ide_init_disk(struct gendisk *, ide_drive_t *); |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index ab2740832742..35cb38573583 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
@@ -44,7 +44,7 @@ struct vlan_ethhdr { | |||
44 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ | 44 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ |
45 | __be16 h_vlan_proto; /* Should always be 0x8100 */ | 45 | __be16 h_vlan_proto; /* Should always be 0x8100 */ |
46 | __be16 h_vlan_TCI; /* Encapsulates priority and VLAN ID */ | 46 | __be16 h_vlan_TCI; /* Encapsulates priority and VLAN ID */ |
47 | unsigned short h_vlan_encapsulated_proto; /* packet type ID field (or len) */ | 47 | __be16 h_vlan_encapsulated_proto; /* packet type ID field (or len) */ |
48 | }; | 48 | }; |
49 | 49 | ||
50 | #include <linux/skbuff.h> | 50 | #include <linux/skbuff.h> |
diff --git a/include/linux/in.h b/include/linux/in.h index d79fc75fa7c2..2619859f6e1b 100644 --- a/include/linux/in.h +++ b/include/linux/in.h | |||
@@ -40,6 +40,7 @@ enum { | |||
40 | 40 | ||
41 | IPPROTO_ESP = 50, /* Encapsulation Security Payload protocol */ | 41 | IPPROTO_ESP = 50, /* Encapsulation Security Payload protocol */ |
42 | IPPROTO_AH = 51, /* Authentication Header protocol */ | 42 | IPPROTO_AH = 51, /* Authentication Header protocol */ |
43 | IPPROTO_BEETPH = 94, /* IP option pseudo header for BEET */ | ||
43 | IPPROTO_PIM = 103, /* Protocol Independent Multicast */ | 44 | IPPROTO_PIM = 103, /* Protocol Independent Multicast */ |
44 | 45 | ||
45 | IPPROTO_COMP = 108, /* Compression Header protocol */ | 46 | IPPROTO_COMP = 108, /* Compression Header protocol */ |
diff --git a/include/linux/input.h b/include/linux/input.h index 5770105471dd..c38507ba38b5 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
@@ -953,7 +953,6 @@ struct input_dev { | |||
953 | unsigned int repeat_key; | 953 | unsigned int repeat_key; |
954 | struct timer_list timer; | 954 | struct timer_list timer; |
955 | 955 | ||
956 | struct pt_regs *regs; | ||
957 | int state; | 956 | int state; |
958 | 957 | ||
959 | int sync; | 958 | int sync; |
@@ -1149,15 +1148,9 @@ static inline void input_report_switch(struct input_dev *dev, unsigned int code, | |||
1149 | input_event(dev, EV_SW, code, !!value); | 1148 | input_event(dev, EV_SW, code, !!value); |
1150 | } | 1149 | } |
1151 | 1150 | ||
1152 | static inline void input_regs(struct input_dev *dev, struct pt_regs *regs) | ||
1153 | { | ||
1154 | dev->regs = regs; | ||
1155 | } | ||
1156 | |||
1157 | static inline void input_sync(struct input_dev *dev) | 1151 | static inline void input_sync(struct input_dev *dev) |
1158 | { | 1152 | { |
1159 | input_event(dev, EV_SYN, SYN_REPORT, 0); | 1153 | input_event(dev, EV_SYN, SYN_REPORT, 0); |
1160 | dev->regs = NULL; | ||
1161 | } | 1154 | } |
1162 | 1155 | ||
1163 | static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) | 1156 | static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 1f97e3d92639..5b83e7b59621 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -64,8 +64,10 @@ | |||
64 | #define SA_TRIGGER_RISING IRQF_TRIGGER_RISING | 64 | #define SA_TRIGGER_RISING IRQF_TRIGGER_RISING |
65 | #define SA_TRIGGER_MASK IRQF_TRIGGER_MASK | 65 | #define SA_TRIGGER_MASK IRQF_TRIGGER_MASK |
66 | 66 | ||
67 | typedef irqreturn_t (*irq_handler_t)(int, void *); | ||
68 | |||
67 | struct irqaction { | 69 | struct irqaction { |
68 | irqreturn_t (*handler)(int, void *, struct pt_regs *); | 70 | irq_handler_t handler; |
69 | unsigned long flags; | 71 | unsigned long flags; |
70 | cpumask_t mask; | 72 | cpumask_t mask; |
71 | const char *name; | 73 | const char *name; |
@@ -75,9 +77,8 @@ struct irqaction { | |||
75 | struct proc_dir_entry *dir; | 77 | struct proc_dir_entry *dir; |
76 | }; | 78 | }; |
77 | 79 | ||
78 | extern irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs); | 80 | extern irqreturn_t no_action(int cpl, void *dev_id); |
79 | extern int request_irq(unsigned int, | 81 | extern int request_irq(unsigned int, irq_handler_t handler, |
80 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | ||
81 | unsigned long, const char *, void *); | 82 | unsigned long, const char *, void *); |
82 | extern void free_irq(unsigned int, void *); | 83 | extern void free_irq(unsigned int, void *); |
83 | 84 | ||
diff --git a/include/linux/io.h b/include/linux/io.h index aa3f5af670b5..81877ea39309 100644 --- a/include/linux/io.h +++ b/include/linux/io.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #ifndef _LINUX_IO_H | 18 | #ifndef _LINUX_IO_H |
19 | #define _LINUX_IO_H | 19 | #define _LINUX_IO_H |
20 | 20 | ||
21 | #include <linux/types.h> | ||
21 | #include <asm/io.h> | 22 | #include <asm/io.h> |
22 | #include <asm/page.h> | 23 | #include <asm/page.h> |
23 | 24 | ||
@@ -27,4 +28,31 @@ void __iowrite64_copy(void __iomem *to, const void *from, size_t count); | |||
27 | int ioremap_page_range(unsigned long addr, unsigned long end, | 28 | int ioremap_page_range(unsigned long addr, unsigned long end, |
28 | unsigned long phys_addr, pgprot_t prot); | 29 | unsigned long phys_addr, pgprot_t prot); |
29 | 30 | ||
31 | /** | ||
32 | * check_signature - find BIOS signatures | ||
33 | * @io_addr: mmio address to check | ||
34 | * @signature: signature block | ||
35 | * @length: length of signature | ||
36 | * | ||
37 | * Perform a signature comparison with the mmio address io_addr. This | ||
38 | * address should have been obtained by ioremap. | ||
39 | * Returns 1 on a match. | ||
40 | */ | ||
41 | |||
42 | static inline int check_signature(const volatile void __iomem *io_addr, | ||
43 | const unsigned char *signature, int length) | ||
44 | { | ||
45 | int retval = 0; | ||
46 | do { | ||
47 | if (readb(io_addr) != *signature) | ||
48 | goto out; | ||
49 | io_addr++; | ||
50 | signature++; | ||
51 | length--; | ||
52 | } while (length); | ||
53 | retval = 1; | ||
54 | out: | ||
55 | return retval; | ||
56 | } | ||
57 | |||
30 | #endif /* _LINUX_IO_H */ | 58 | #endif /* _LINUX_IO_H */ |
diff --git a/include/linux/ioc3.h b/include/linux/ioc3.h index da7c09e4ede6..38b286e9a46c 100644 --- a/include/linux/ioc3.h +++ b/include/linux/ioc3.h | |||
@@ -63,7 +63,7 @@ struct ioc3_submodule { | |||
63 | /* IRQ stuff */ | 63 | /* IRQ stuff */ |
64 | unsigned int irq_mask; /* IOC3 IRQ mask, leave clear for Ethernet */ | 64 | unsigned int irq_mask; /* IOC3 IRQ mask, leave clear for Ethernet */ |
65 | int reset_mask; /* non-zero if you want the ioc3.c module to reset interrupts */ | 65 | int reset_mask; /* non-zero if you want the ioc3.c module to reset interrupts */ |
66 | int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int, struct pt_regs *); | 66 | int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); |
67 | /* private submodule data */ | 67 | /* private submodule data */ |
68 | void *data; /* assigned by submodule */ | 68 | void *data; /* assigned by submodule */ |
69 | }; | 69 | }; |
diff --git a/include/linux/ioc4.h b/include/linux/ioc4.h index de73a3289cc2..51e2b9fb6372 100644 --- a/include/linux/ioc4.h +++ b/include/linux/ioc4.h | |||
@@ -157,7 +157,7 @@ struct ioc4_driver_data { | |||
157 | unsigned long idd_bar0; | 157 | unsigned long idd_bar0; |
158 | struct pci_dev *idd_pdev; | 158 | struct pci_dev *idd_pdev; |
159 | const struct pci_device_id *idd_pci_id; | 159 | const struct pci_device_id *idd_pci_id; |
160 | struct __iomem ioc4_misc_regs *idd_misc_regs; | 160 | struct ioc4_misc_regs __iomem *idd_misc_regs; |
161 | unsigned long count_period; | 161 | unsigned long count_period; |
162 | void *idd_serial_data; | 162 | void *idd_serial_data; |
163 | unsigned int idd_variant; | 163 | unsigned int idd_variant; |
diff --git a/include/linux/ip.h b/include/linux/ip.h index 6b25d36fc54c..ecee9bb27d0e 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h | |||
@@ -80,6 +80,8 @@ | |||
80 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ | 80 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ |
81 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ | 81 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ |
82 | 82 | ||
83 | #define IPV4_BEET_PHMAXLEN 8 | ||
84 | |||
83 | struct iphdr { | 85 | struct iphdr { |
84 | #if defined(__LITTLE_ENDIAN_BITFIELD) | 86 | #if defined(__LITTLE_ENDIAN_BITFIELD) |
85 | __u8 ihl:4, | 87 | __u8 ihl:4, |
@@ -123,4 +125,11 @@ struct ip_comp_hdr { | |||
123 | __be16 cpi; | 125 | __be16 cpi; |
124 | }; | 126 | }; |
125 | 127 | ||
128 | struct ip_beet_phdr { | ||
129 | __u8 nexthdr; | ||
130 | __u8 hdrlen; | ||
131 | __u8 padlen; | ||
132 | __u8 reserved; | ||
133 | }; | ||
134 | |||
126 | #endif /* _LINUX_IP_H */ | 135 | #endif /* _LINUX_IP_H */ |
diff --git a/include/linux/ipc.h b/include/linux/ipc.h index d9e2b3f36c35..636094c29b16 100644 --- a/include/linux/ipc.h +++ b/include/linux/ipc.h | |||
@@ -2,7 +2,6 @@ | |||
2 | #define _LINUX_IPC_H | 2 | #define _LINUX_IPC_H |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/kref.h> | ||
6 | 5 | ||
7 | #define IPC_PRIVATE ((__kernel_key_t) 0) | 6 | #define IPC_PRIVATE ((__kernel_key_t) 0) |
8 | 7 | ||
@@ -52,6 +51,8 @@ struct ipc_perm | |||
52 | 51 | ||
53 | #ifdef __KERNEL__ | 52 | #ifdef __KERNEL__ |
54 | 53 | ||
54 | #include <linux/kref.h> | ||
55 | |||
55 | #define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */ | 56 | #define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */ |
56 | 57 | ||
57 | /* used by in-kernel data structures */ | 58 | /* used by in-kernel data structures */ |
diff --git a/include/linux/ipsec.h b/include/linux/ipsec.h index d3c527616b5e..d17a6302a0e9 100644 --- a/include/linux/ipsec.h +++ b/include/linux/ipsec.h | |||
@@ -12,7 +12,8 @@ | |||
12 | enum { | 12 | enum { |
13 | IPSEC_MODE_ANY = 0, /* We do not support this for SA */ | 13 | IPSEC_MODE_ANY = 0, /* We do not support this for SA */ |
14 | IPSEC_MODE_TRANSPORT = 1, | 14 | IPSEC_MODE_TRANSPORT = 1, |
15 | IPSEC_MODE_TUNNEL = 2 | 15 | IPSEC_MODE_TUNNEL = 2, |
16 | IPSEC_MODE_BEET = 3 | ||
16 | }; | 17 | }; |
17 | 18 | ||
18 | enum { | 19 | enum { |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 48d3cb3b6a47..52fc4052a0ae 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -21,6 +21,12 @@ | |||
21 | 21 | ||
22 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
23 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
24 | #include <asm/irq_regs.h> | ||
25 | |||
26 | struct irq_desc; | ||
27 | typedef void fastcall (*irq_flow_handler_t)(unsigned int irq, | ||
28 | struct irq_desc *desc); | ||
29 | |||
24 | 30 | ||
25 | /* | 31 | /* |
26 | * IRQ line status. | 32 | * IRQ line status. |
@@ -59,6 +65,7 @@ | |||
59 | #define IRQ_NOAUTOEN 0x08000000 /* IRQ will not be enabled on request irq */ | 65 | #define IRQ_NOAUTOEN 0x08000000 /* IRQ will not be enabled on request irq */ |
60 | #define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ | 66 | #define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ |
61 | #define IRQ_WAKEUP 0x20000000 /* IRQ triggers system wakeup */ | 67 | #define IRQ_WAKEUP 0x20000000 /* IRQ triggers system wakeup */ |
68 | #define IRQ_MOVE_PENDING 0x40000000 /* need to re-target IRQ destination */ | ||
62 | 69 | ||
63 | struct proc_dir_entry; | 70 | struct proc_dir_entry; |
64 | 71 | ||
@@ -132,16 +139,14 @@ struct irq_chip { | |||
132 | * @affinity: IRQ affinity on SMP | 139 | * @affinity: IRQ affinity on SMP |
133 | * @cpu: cpu index useful for balancing | 140 | * @cpu: cpu index useful for balancing |
134 | * @pending_mask: pending rebalanced interrupts | 141 | * @pending_mask: pending rebalanced interrupts |
135 | * @move_irq: need to re-target IRQ destination | ||
136 | * @dir: /proc/irq/ procfs entry | 142 | * @dir: /proc/irq/ procfs entry |
137 | * @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP | 143 | * @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP |
144 | * @name: flow handler name for /proc/interrupts output | ||
138 | * | 145 | * |
139 | * Pad this out to 32 bytes for cache and indexing reasons. | 146 | * Pad this out to 32 bytes for cache and indexing reasons. |
140 | */ | 147 | */ |
141 | struct irq_desc { | 148 | struct irq_desc { |
142 | void fastcall (*handle_irq)(unsigned int irq, | 149 | irq_flow_handler_t handle_irq; |
143 | struct irq_desc *desc, | ||
144 | struct pt_regs *regs); | ||
145 | struct irq_chip *chip; | 150 | struct irq_chip *chip; |
146 | void *handler_data; | 151 | void *handler_data; |
147 | void *chip_data; | 152 | void *chip_data; |
@@ -159,11 +164,11 @@ struct irq_desc { | |||
159 | #endif | 164 | #endif |
160 | #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE) | 165 | #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE) |
161 | cpumask_t pending_mask; | 166 | cpumask_t pending_mask; |
162 | unsigned int move_irq; /* need to re-target IRQ dest */ | ||
163 | #endif | 167 | #endif |
164 | #ifdef CONFIG_PROC_FS | 168 | #ifdef CONFIG_PROC_FS |
165 | struct proc_dir_entry *dir; | 169 | struct proc_dir_entry *dir; |
166 | #endif | 170 | #endif |
171 | const char *name; | ||
167 | } ____cacheline_aligned; | 172 | } ____cacheline_aligned; |
168 | 173 | ||
169 | extern struct irq_desc irq_desc[NR_IRQS]; | 174 | extern struct irq_desc irq_desc[NR_IRQS]; |
@@ -206,36 +211,7 @@ static inline void set_native_irq_info(int irq, cpumask_t mask) | |||
206 | 211 | ||
207 | void set_pending_irq(unsigned int irq, cpumask_t mask); | 212 | void set_pending_irq(unsigned int irq, cpumask_t mask); |
208 | void move_native_irq(int irq); | 213 | void move_native_irq(int irq); |
209 | 214 | void move_masked_irq(int irq); | |
210 | #ifdef CONFIG_PCI_MSI | ||
211 | /* | ||
212 | * Wonder why these are dummies? | ||
213 | * For e.g the set_ioapic_affinity_vector() calls the set_ioapic_affinity_irq() | ||
214 | * counter part after translating the vector to irq info. We need to perform | ||
215 | * this operation on the real irq, when we dont use vector, i.e when | ||
216 | * pci_use_vector() is false. | ||
217 | */ | ||
218 | static inline void move_irq(int irq) | ||
219 | { | ||
220 | } | ||
221 | |||
222 | static inline void set_irq_info(int irq, cpumask_t mask) | ||
223 | { | ||
224 | } | ||
225 | |||
226 | #else /* CONFIG_PCI_MSI */ | ||
227 | |||
228 | static inline void move_irq(int irq) | ||
229 | { | ||
230 | move_native_irq(irq); | ||
231 | } | ||
232 | |||
233 | static inline void set_irq_info(int irq, cpumask_t mask) | ||
234 | { | ||
235 | set_native_irq_info(irq, mask); | ||
236 | } | ||
237 | |||
238 | #endif /* CONFIG_PCI_MSI */ | ||
239 | 215 | ||
240 | #else /* CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE */ | 216 | #else /* CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE */ |
241 | 217 | ||
@@ -247,21 +223,20 @@ static inline void move_native_irq(int irq) | |||
247 | { | 223 | { |
248 | } | 224 | } |
249 | 225 | ||
250 | static inline void set_pending_irq(unsigned int irq, cpumask_t mask) | 226 | static inline void move_masked_irq(int irq) |
251 | { | 227 | { |
252 | } | 228 | } |
253 | 229 | ||
254 | static inline void set_irq_info(int irq, cpumask_t mask) | 230 | static inline void set_pending_irq(unsigned int irq, cpumask_t mask) |
255 | { | 231 | { |
256 | set_native_irq_info(irq, mask); | ||
257 | } | 232 | } |
258 | 233 | ||
259 | #endif /* CONFIG_GENERIC_PENDING_IRQ */ | 234 | #endif /* CONFIG_GENERIC_PENDING_IRQ */ |
260 | 235 | ||
261 | #else /* CONFIG_SMP */ | 236 | #else /* CONFIG_SMP */ |
262 | 237 | ||
263 | #define move_irq(x) | ||
264 | #define move_native_irq(x) | 238 | #define move_native_irq(x) |
239 | #define move_masked_irq(x) | ||
265 | 240 | ||
266 | #endif /* CONFIG_SMP */ | 241 | #endif /* CONFIG_SMP */ |
267 | 242 | ||
@@ -285,43 +260,25 @@ static inline int select_smp_affinity(unsigned int irq) | |||
285 | extern int no_irq_affinity; | 260 | extern int no_irq_affinity; |
286 | 261 | ||
287 | /* Handle irq action chains: */ | 262 | /* Handle irq action chains: */ |
288 | extern int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, | 263 | extern int handle_IRQ_event(unsigned int irq, struct irqaction *action); |
289 | struct irqaction *action); | ||
290 | 264 | ||
291 | /* | 265 | /* |
292 | * Built-in IRQ handlers for various IRQ types, | 266 | * Built-in IRQ handlers for various IRQ types, |
293 | * callable via desc->chip->handle_irq() | 267 | * callable via desc->chip->handle_irq() |
294 | */ | 268 | */ |
295 | extern void fastcall | 269 | extern void fastcall handle_level_irq(unsigned int irq, struct irq_desc *desc); |
296 | handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | 270 | extern void fastcall handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc); |
297 | extern void fastcall | 271 | extern void fastcall handle_edge_irq(unsigned int irq, struct irq_desc *desc); |
298 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc, | 272 | extern void fastcall handle_simple_irq(unsigned int irq, struct irq_desc *desc); |
299 | struct pt_regs *regs); | 273 | extern void fastcall handle_percpu_irq(unsigned int irq, struct irq_desc *desc); |
300 | extern void fastcall | 274 | extern void fastcall handle_bad_irq(unsigned int irq, struct irq_desc *desc); |
301 | handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | ||
302 | extern void fastcall | ||
303 | handle_simple_irq(unsigned int irq, struct irq_desc *desc, | ||
304 | struct pt_regs *regs); | ||
305 | extern void fastcall | ||
306 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc, | ||
307 | struct pt_regs *regs); | ||
308 | extern void fastcall | ||
309 | handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | ||
310 | |||
311 | /* | ||
312 | * Get a descriptive string for the highlevel handler, for | ||
313 | * /proc/interrupts output: | ||
314 | */ | ||
315 | extern const char * | ||
316 | handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
317 | struct pt_regs *)); | ||
318 | 275 | ||
319 | /* | 276 | /* |
320 | * Monolithic do_IRQ implementation. | 277 | * Monolithic do_IRQ implementation. |
321 | * (is an explicit fastcall, because i386 4KSTACKS calls it from assembly) | 278 | * (is an explicit fastcall, because i386 4KSTACKS calls it from assembly) |
322 | */ | 279 | */ |
323 | #ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ | 280 | #ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ |
324 | extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs); | 281 | extern fastcall unsigned int __do_IRQ(unsigned int irq); |
325 | #endif | 282 | #endif |
326 | 283 | ||
327 | /* | 284 | /* |
@@ -330,23 +287,23 @@ extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs); | |||
330 | * irqchip-style controller then we call the ->handle_irq() handler, | 287 | * irqchip-style controller then we call the ->handle_irq() handler, |
331 | * and it calls __do_IRQ() if it's attached to an irqtype-style controller. | 288 | * and it calls __do_IRQ() if it's attached to an irqtype-style controller. |
332 | */ | 289 | */ |
333 | static inline void generic_handle_irq(unsigned int irq, struct pt_regs *regs) | 290 | static inline void generic_handle_irq(unsigned int irq) |
334 | { | 291 | { |
335 | struct irq_desc *desc = irq_desc + irq; | 292 | struct irq_desc *desc = irq_desc + irq; |
336 | 293 | ||
337 | #ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ | 294 | #ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ |
338 | desc->handle_irq(irq, desc, regs); | 295 | desc->handle_irq(irq, desc); |
339 | #else | 296 | #else |
340 | if (likely(desc->handle_irq)) | 297 | if (likely(desc->handle_irq)) |
341 | desc->handle_irq(irq, desc, regs); | 298 | desc->handle_irq(irq, desc); |
342 | else | 299 | else |
343 | __do_IRQ(irq, regs); | 300 | __do_IRQ(irq); |
344 | #endif | 301 | #endif |
345 | } | 302 | } |
346 | 303 | ||
347 | /* Handling of unhandled and spurious interrupts: */ | 304 | /* Handling of unhandled and spurious interrupts: */ |
348 | extern void note_interrupt(unsigned int irq, struct irq_desc *desc, | 305 | extern void note_interrupt(unsigned int irq, struct irq_desc *desc, |
349 | int action_ret, struct pt_regs *regs); | 306 | int action_ret); |
350 | 307 | ||
351 | /* Resending of interrupts :*/ | 308 | /* Resending of interrupts :*/ |
352 | void check_irq_resend(struct irq_desc *desc, unsigned int irq); | 309 | void check_irq_resend(struct irq_desc *desc, unsigned int irq); |
@@ -366,24 +323,22 @@ extern struct irq_chip dummy_irq_chip; | |||
366 | 323 | ||
367 | extern void | 324 | extern void |
368 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, | 325 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, |
369 | void fastcall (*handle)(unsigned int, | 326 | irq_flow_handler_t handle); |
370 | struct irq_desc *, | ||
371 | struct pt_regs *)); | ||
372 | extern void | 327 | extern void |
373 | __set_irq_handler(unsigned int irq, | 328 | set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, |
374 | void fastcall (*handle)(unsigned int, struct irq_desc *, | 329 | irq_flow_handler_t handle, const char *name); |
375 | struct pt_regs *), | 330 | |
376 | int is_chained); | 331 | extern void |
332 | __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, | ||
333 | const char *name); | ||
377 | 334 | ||
378 | /* | 335 | /* |
379 | * Set a highlevel flow handler for a given IRQ: | 336 | * Set a highlevel flow handler for a given IRQ: |
380 | */ | 337 | */ |
381 | static inline void | 338 | static inline void |
382 | set_irq_handler(unsigned int irq, | 339 | set_irq_handler(unsigned int irq, irq_flow_handler_t handle) |
383 | void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
384 | struct pt_regs *)) | ||
385 | { | 340 | { |
386 | __set_irq_handler(irq, handle, 0); | 341 | __set_irq_handler(irq, handle, 0, NULL); |
387 | } | 342 | } |
388 | 343 | ||
389 | /* | 344 | /* |
@@ -393,14 +348,27 @@ set_irq_handler(unsigned int irq, | |||
393 | */ | 348 | */ |
394 | static inline void | 349 | static inline void |
395 | set_irq_chained_handler(unsigned int irq, | 350 | set_irq_chained_handler(unsigned int irq, |
396 | void fastcall (*handle)(unsigned int, struct irq_desc *, | 351 | irq_flow_handler_t handle) |
397 | struct pt_regs *)) | ||
398 | { | 352 | { |
399 | __set_irq_handler(irq, handle, 1); | 353 | __set_irq_handler(irq, handle, 1, NULL); |
400 | } | 354 | } |
401 | 355 | ||
402 | /* Set/get chip/data for an IRQ: */ | 356 | /* Handle dynamic irq creation and destruction */ |
357 | extern int create_irq(void); | ||
358 | extern void destroy_irq(unsigned int irq); | ||
359 | |||
360 | /* Test to see if a driver has successfully requested an irq */ | ||
361 | static inline int irq_has_action(unsigned int irq) | ||
362 | { | ||
363 | struct irq_desc *desc = irq_desc + irq; | ||
364 | return desc->action != NULL; | ||
365 | } | ||
403 | 366 | ||
367 | /* Dynamic irq helper functions */ | ||
368 | extern void dynamic_irq_init(unsigned int irq); | ||
369 | extern void dynamic_irq_cleanup(unsigned int irq); | ||
370 | |||
371 | /* Set/get chip/data for an IRQ: */ | ||
404 | extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); | 372 | extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); |
405 | extern int set_irq_data(unsigned int irq, void *data); | 373 | extern int set_irq_data(unsigned int irq, void *data); |
406 | extern int set_irq_chip_data(unsigned int irq, void *data); | 374 | extern int set_irq_chip_data(unsigned int irq, void *data); |
diff --git a/include/linux/istallion.h b/include/linux/istallion.h index 1f996621bc9c..b55e2a035605 100644 --- a/include/linux/istallion.h +++ b/include/linux/istallion.h | |||
@@ -100,7 +100,7 @@ typedef struct stlibrd { | |||
100 | unsigned int iobase; | 100 | unsigned int iobase; |
101 | int iosize; | 101 | int iosize; |
102 | unsigned long memaddr; | 102 | unsigned long memaddr; |
103 | void *membase; | 103 | void __iomem *membase; |
104 | int memsize; | 104 | int memsize; |
105 | int pagesize; | 105 | int pagesize; |
106 | int hostoffset; | 106 | int hostoffset; |
@@ -113,7 +113,7 @@ typedef struct stlibrd { | |||
113 | void (*enable)(struct stlibrd *brdp); | 113 | void (*enable)(struct stlibrd *brdp); |
114 | void (*reenable)(struct stlibrd *brdp); | 114 | void (*reenable)(struct stlibrd *brdp); |
115 | void (*disable)(struct stlibrd *brdp); | 115 | void (*disable)(struct stlibrd *brdp); |
116 | char *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line); | 116 | void __iomem *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line); |
117 | void (*intr)(struct stlibrd *brdp); | 117 | void (*intr)(struct stlibrd *brdp); |
118 | void (*reset)(struct stlibrd *brdp); | 118 | void (*reset)(struct stlibrd *brdp); |
119 | stliport_t *ports[STL_MAXPORTS]; | 119 | stliport_t *ports[STL_MAXPORTS]; |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h new file mode 100644 index 000000000000..ddb128795781 --- /dev/null +++ b/include/linux/jbd2.h | |||
@@ -0,0 +1,1107 @@ | |||
1 | /* | ||
2 | * linux/include/linux/jbd2.h | ||
3 | * | ||
4 | * Written by Stephen C. Tweedie <sct@redhat.com> | ||
5 | * | ||
6 | * Copyright 1998-2000 Red Hat, Inc --- All Rights Reserved | ||
7 | * | ||
8 | * This file is part of the Linux kernel and is made available under | ||
9 | * the terms of the GNU General Public License, version 2, or at your | ||
10 | * option, any later version, incorporated herein by reference. | ||
11 | * | ||
12 | * Definitions for transaction data structures for the buffer cache | ||
13 | * filesystem journaling support. | ||
14 | */ | ||
15 | |||
16 | #ifndef _LINUX_JBD_H | ||
17 | #define _LINUX_JBD_H | ||
18 | |||
19 | /* Allow this file to be included directly into e2fsprogs */ | ||
20 | #ifndef __KERNEL__ | ||
21 | #include "jfs_compat.h" | ||
22 | #define JBD2_DEBUG | ||
23 | #define jfs_debug jbd_debug | ||
24 | #else | ||
25 | |||
26 | #include <linux/types.h> | ||
27 | #include <linux/buffer_head.h> | ||
28 | #include <linux/journal-head.h> | ||
29 | #include <linux/stddef.h> | ||
30 | #include <linux/bit_spinlock.h> | ||
31 | #include <linux/mutex.h> | ||
32 | #include <linux/timer.h> | ||
33 | |||
34 | #include <asm/semaphore.h> | ||
35 | #endif | ||
36 | |||
37 | #define journal_oom_retry 1 | ||
38 | |||
39 | /* | ||
40 | * Define JBD_PARANIOD_IOFAIL to cause a kernel BUG() if ext3 finds | ||
41 | * certain classes of error which can occur due to failed IOs. Under | ||
42 | * normal use we want ext3 to continue after such errors, because | ||
43 | * hardware _can_ fail, but for debugging purposes when running tests on | ||
44 | * known-good hardware we may want to trap these errors. | ||
45 | */ | ||
46 | #undef JBD_PARANOID_IOFAIL | ||
47 | |||
48 | /* | ||
49 | * The default maximum commit age, in seconds. | ||
50 | */ | ||
51 | #define JBD_DEFAULT_MAX_COMMIT_AGE 5 | ||
52 | |||
53 | #ifdef CONFIG_JBD_DEBUG | ||
54 | /* | ||
55 | * Define JBD_EXPENSIVE_CHECKING to enable more expensive internal | ||
56 | * consistency checks. By default we don't do this unless | ||
57 | * CONFIG_JBD_DEBUG is on. | ||
58 | */ | ||
59 | #define JBD_EXPENSIVE_CHECKING | ||
60 | extern int jbd2_journal_enable_debug; | ||
61 | |||
62 | #define jbd_debug(n, f, a...) \ | ||
63 | do { \ | ||
64 | if ((n) <= jbd2_journal_enable_debug) { \ | ||
65 | printk (KERN_DEBUG "(%s, %d): %s: ", \ | ||
66 | __FILE__, __LINE__, __FUNCTION__); \ | ||
67 | printk (f, ## a); \ | ||
68 | } \ | ||
69 | } while (0) | ||
70 | #else | ||
71 | #define jbd_debug(f, a...) /**/ | ||
72 | #endif | ||
73 | |||
74 | extern void * __jbd2_kmalloc (const char *where, size_t size, gfp_t flags, int retry); | ||
75 | extern void * jbd2_slab_alloc(size_t size, gfp_t flags); | ||
76 | extern void jbd2_slab_free(void *ptr, size_t size); | ||
77 | |||
78 | #define jbd_kmalloc(size, flags) \ | ||
79 | __jbd2_kmalloc(__FUNCTION__, (size), (flags), journal_oom_retry) | ||
80 | #define jbd_rep_kmalloc(size, flags) \ | ||
81 | __jbd2_kmalloc(__FUNCTION__, (size), (flags), 1) | ||
82 | |||
83 | #define JBD2_MIN_JOURNAL_BLOCKS 1024 | ||
84 | |||
85 | #ifdef __KERNEL__ | ||
86 | |||
87 | /** | ||
88 | * typedef handle_t - The handle_t type represents a single atomic update being performed by some process. | ||
89 | * | ||
90 | * All filesystem modifications made by the process go | ||
91 | * through this handle. Recursive operations (such as quota operations) | ||
92 | * are gathered into a single update. | ||
93 | * | ||
94 | * The buffer credits field is used to account for journaled buffers | ||
95 | * being modified by the running process. To ensure that there is | ||
96 | * enough log space for all outstanding operations, we need to limit the | ||
97 | * number of outstanding buffers possible at any time. When the | ||
98 | * operation completes, any buffer credits not used are credited back to | ||
99 | * the transaction, so that at all times we know how many buffers the | ||
100 | * outstanding updates on a transaction might possibly touch. | ||
101 | * | ||
102 | * This is an opaque datatype. | ||
103 | **/ | ||
104 | typedef struct handle_s handle_t; /* Atomic operation type */ | ||
105 | |||
106 | |||
107 | /** | ||
108 | * typedef journal_t - The journal_t maintains all of the journaling state information for a single filesystem. | ||
109 | * | ||
110 | * journal_t is linked to from the fs superblock structure. | ||
111 | * | ||
112 | * We use the journal_t to keep track of all outstanding transaction | ||
113 | * activity on the filesystem, and to manage the state of the log | ||
114 | * writing process. | ||
115 | * | ||
116 | * This is an opaque datatype. | ||
117 | **/ | ||
118 | typedef struct journal_s journal_t; /* Journal control structure */ | ||
119 | #endif | ||
120 | |||
121 | /* | ||
122 | * Internal structures used by the logging mechanism: | ||
123 | */ | ||
124 | |||
125 | #define JBD2_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */ | ||
126 | |||
127 | /* | ||
128 | * On-disk structures | ||
129 | */ | ||
130 | |||
131 | /* | ||
132 | * Descriptor block types: | ||
133 | */ | ||
134 | |||
135 | #define JBD2_DESCRIPTOR_BLOCK 1 | ||
136 | #define JBD2_COMMIT_BLOCK 2 | ||
137 | #define JBD2_SUPERBLOCK_V1 3 | ||
138 | #define JBD2_SUPERBLOCK_V2 4 | ||
139 | #define JBD2_REVOKE_BLOCK 5 | ||
140 | |||
141 | /* | ||
142 | * Standard header for all descriptor blocks: | ||
143 | */ | ||
144 | typedef struct journal_header_s | ||
145 | { | ||
146 | __be32 h_magic; | ||
147 | __be32 h_blocktype; | ||
148 | __be32 h_sequence; | ||
149 | } journal_header_t; | ||
150 | |||
151 | |||
152 | /* | ||
153 | * The block tag: used to describe a single buffer in the journal. | ||
154 | * t_blocknr_high is only used if INCOMPAT_64BIT is set, so this | ||
155 | * raw struct shouldn't be used for pointer math or sizeof() - use | ||
156 | * journal_tag_bytes(journal) instead to compute this. | ||
157 | */ | ||
158 | typedef struct journal_block_tag_s | ||
159 | { | ||
160 | __be32 t_blocknr; /* The on-disk block number */ | ||
161 | __be32 t_flags; /* See below */ | ||
162 | __be32 t_blocknr_high; /* most-significant high 32bits. */ | ||
163 | } journal_block_tag_t; | ||
164 | |||
165 | #define JBD_TAG_SIZE32 (offsetof(journal_block_tag_t, t_blocknr_high)) | ||
166 | #define JBD_TAG_SIZE64 (sizeof(journal_block_tag_t)) | ||
167 | |||
168 | /* | ||
169 | * The revoke descriptor: used on disk to describe a series of blocks to | ||
170 | * be revoked from the log | ||
171 | */ | ||
172 | typedef struct jbd2_journal_revoke_header_s | ||
173 | { | ||
174 | journal_header_t r_header; | ||
175 | __be32 r_count; /* Count of bytes used in the block */ | ||
176 | } jbd2_journal_revoke_header_t; | ||
177 | |||
178 | |||
179 | /* Definitions for the journal tag flags word: */ | ||
180 | #define JBD2_FLAG_ESCAPE 1 /* on-disk block is escaped */ | ||
181 | #define JBD2_FLAG_SAME_UUID 2 /* block has same uuid as previous */ | ||
182 | #define JBD2_FLAG_DELETED 4 /* block deleted by this transaction */ | ||
183 | #define JBD2_FLAG_LAST_TAG 8 /* last tag in this descriptor block */ | ||
184 | |||
185 | |||
186 | /* | ||
187 | * The journal superblock. All fields are in big-endian byte order. | ||
188 | */ | ||
189 | typedef struct journal_superblock_s | ||
190 | { | ||
191 | /* 0x0000 */ | ||
192 | journal_header_t s_header; | ||
193 | |||
194 | /* 0x000C */ | ||
195 | /* Static information describing the journal */ | ||
196 | __be32 s_blocksize; /* journal device blocksize */ | ||
197 | __be32 s_maxlen; /* total blocks in journal file */ | ||
198 | __be32 s_first; /* first block of log information */ | ||
199 | |||
200 | /* 0x0018 */ | ||
201 | /* Dynamic information describing the current state of the log */ | ||
202 | __be32 s_sequence; /* first commit ID expected in log */ | ||
203 | __be32 s_start; /* blocknr of start of log */ | ||
204 | |||
205 | /* 0x0020 */ | ||
206 | /* Error value, as set by jbd2_journal_abort(). */ | ||
207 | __be32 s_errno; | ||
208 | |||
209 | /* 0x0024 */ | ||
210 | /* Remaining fields are only valid in a version-2 superblock */ | ||
211 | __be32 s_feature_compat; /* compatible feature set */ | ||
212 | __be32 s_feature_incompat; /* incompatible feature set */ | ||
213 | __be32 s_feature_ro_compat; /* readonly-compatible feature set */ | ||
214 | /* 0x0030 */ | ||
215 | __u8 s_uuid[16]; /* 128-bit uuid for journal */ | ||
216 | |||
217 | /* 0x0040 */ | ||
218 | __be32 s_nr_users; /* Nr of filesystems sharing log */ | ||
219 | |||
220 | __be32 s_dynsuper; /* Blocknr of dynamic superblock copy*/ | ||
221 | |||
222 | /* 0x0048 */ | ||
223 | __be32 s_max_transaction; /* Limit of journal blocks per trans.*/ | ||
224 | __be32 s_max_trans_data; /* Limit of data blocks per trans. */ | ||
225 | |||
226 | /* 0x0050 */ | ||
227 | __u32 s_padding[44]; | ||
228 | |||
229 | /* 0x0100 */ | ||
230 | __u8 s_users[16*48]; /* ids of all fs'es sharing the log */ | ||
231 | /* 0x0400 */ | ||
232 | } journal_superblock_t; | ||
233 | |||
234 | #define JBD2_HAS_COMPAT_FEATURE(j,mask) \ | ||
235 | ((j)->j_format_version >= 2 && \ | ||
236 | ((j)->j_superblock->s_feature_compat & cpu_to_be32((mask)))) | ||
237 | #define JBD2_HAS_RO_COMPAT_FEATURE(j,mask) \ | ||
238 | ((j)->j_format_version >= 2 && \ | ||
239 | ((j)->j_superblock->s_feature_ro_compat & cpu_to_be32((mask)))) | ||
240 | #define JBD2_HAS_INCOMPAT_FEATURE(j,mask) \ | ||
241 | ((j)->j_format_version >= 2 && \ | ||
242 | ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask)))) | ||
243 | |||
244 | #define JBD2_FEATURE_INCOMPAT_REVOKE 0x00000001 | ||
245 | #define JBD2_FEATURE_INCOMPAT_64BIT 0x00000002 | ||
246 | |||
247 | /* Features known to this kernel version: */ | ||
248 | #define JBD2_KNOWN_COMPAT_FEATURES 0 | ||
249 | #define JBD2_KNOWN_ROCOMPAT_FEATURES 0 | ||
250 | #define JBD2_KNOWN_INCOMPAT_FEATURES (JBD2_FEATURE_INCOMPAT_REVOKE | \ | ||
251 | JBD2_FEATURE_INCOMPAT_64BIT) | ||
252 | |||
253 | #ifdef __KERNEL__ | ||
254 | |||
255 | #include <linux/fs.h> | ||
256 | #include <linux/sched.h> | ||
257 | |||
258 | #define JBD_ASSERTIONS | ||
259 | #ifdef JBD_ASSERTIONS | ||
260 | #define J_ASSERT(assert) \ | ||
261 | do { \ | ||
262 | if (!(assert)) { \ | ||
263 | printk (KERN_EMERG \ | ||
264 | "Assertion failure in %s() at %s:%d: \"%s\"\n", \ | ||
265 | __FUNCTION__, __FILE__, __LINE__, # assert); \ | ||
266 | BUG(); \ | ||
267 | } \ | ||
268 | } while (0) | ||
269 | |||
270 | #if defined(CONFIG_BUFFER_DEBUG) | ||
271 | void buffer_assertion_failure(struct buffer_head *bh); | ||
272 | #define J_ASSERT_BH(bh, expr) \ | ||
273 | do { \ | ||
274 | if (!(expr)) \ | ||
275 | buffer_assertion_failure(bh); \ | ||
276 | J_ASSERT(expr); \ | ||
277 | } while (0) | ||
278 | #define J_ASSERT_JH(jh, expr) J_ASSERT_BH(jh2bh(jh), expr) | ||
279 | #else | ||
280 | #define J_ASSERT_BH(bh, expr) J_ASSERT(expr) | ||
281 | #define J_ASSERT_JH(jh, expr) J_ASSERT(expr) | ||
282 | #endif | ||
283 | |||
284 | #else | ||
285 | #define J_ASSERT(assert) do { } while (0) | ||
286 | #endif /* JBD_ASSERTIONS */ | ||
287 | |||
288 | #if defined(JBD_PARANOID_IOFAIL) | ||
289 | #define J_EXPECT(expr, why...) J_ASSERT(expr) | ||
290 | #define J_EXPECT_BH(bh, expr, why...) J_ASSERT_BH(bh, expr) | ||
291 | #define J_EXPECT_JH(jh, expr, why...) J_ASSERT_JH(jh, expr) | ||
292 | #else | ||
293 | #define __journal_expect(expr, why...) \ | ||
294 | ({ \ | ||
295 | int val = (expr); \ | ||
296 | if (!val) { \ | ||
297 | printk(KERN_ERR \ | ||
298 | "EXT3-fs unexpected failure: %s;\n",# expr); \ | ||
299 | printk(KERN_ERR why "\n"); \ | ||
300 | } \ | ||
301 | val; \ | ||
302 | }) | ||
303 | #define J_EXPECT(expr, why...) __journal_expect(expr, ## why) | ||
304 | #define J_EXPECT_BH(bh, expr, why...) __journal_expect(expr, ## why) | ||
305 | #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) | ||
306 | #endif | ||
307 | |||
308 | enum jbd_state_bits { | ||
309 | BH_JBD /* Has an attached ext3 journal_head */ | ||
310 | = BH_PrivateStart, | ||
311 | BH_JWrite, /* Being written to log (@@@ DEBUGGING) */ | ||
312 | BH_Freed, /* Has been freed (truncated) */ | ||
313 | BH_Revoked, /* Has been revoked from the log */ | ||
314 | BH_RevokeValid, /* Revoked flag is valid */ | ||
315 | BH_JBDDirty, /* Is dirty but journaled */ | ||
316 | BH_State, /* Pins most journal_head state */ | ||
317 | BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ | ||
318 | BH_Unshadow, /* Dummy bit, for BJ_Shadow wakeup filtering */ | ||
319 | }; | ||
320 | |||
321 | BUFFER_FNS(JBD, jbd) | ||
322 | BUFFER_FNS(JWrite, jwrite) | ||
323 | BUFFER_FNS(JBDDirty, jbddirty) | ||
324 | TAS_BUFFER_FNS(JBDDirty, jbddirty) | ||
325 | BUFFER_FNS(Revoked, revoked) | ||
326 | TAS_BUFFER_FNS(Revoked, revoked) | ||
327 | BUFFER_FNS(RevokeValid, revokevalid) | ||
328 | TAS_BUFFER_FNS(RevokeValid, revokevalid) | ||
329 | BUFFER_FNS(Freed, freed) | ||
330 | |||
331 | static inline struct buffer_head *jh2bh(struct journal_head *jh) | ||
332 | { | ||
333 | return jh->b_bh; | ||
334 | } | ||
335 | |||
336 | static inline struct journal_head *bh2jh(struct buffer_head *bh) | ||
337 | { | ||
338 | return bh->b_private; | ||
339 | } | ||
340 | |||
341 | static inline void jbd_lock_bh_state(struct buffer_head *bh) | ||
342 | { | ||
343 | bit_spin_lock(BH_State, &bh->b_state); | ||
344 | } | ||
345 | |||
346 | static inline int jbd_trylock_bh_state(struct buffer_head *bh) | ||
347 | { | ||
348 | return bit_spin_trylock(BH_State, &bh->b_state); | ||
349 | } | ||
350 | |||
351 | static inline int jbd_is_locked_bh_state(struct buffer_head *bh) | ||
352 | { | ||
353 | return bit_spin_is_locked(BH_State, &bh->b_state); | ||
354 | } | ||
355 | |||
356 | static inline void jbd_unlock_bh_state(struct buffer_head *bh) | ||
357 | { | ||
358 | bit_spin_unlock(BH_State, &bh->b_state); | ||
359 | } | ||
360 | |||
361 | static inline void jbd_lock_bh_journal_head(struct buffer_head *bh) | ||
362 | { | ||
363 | bit_spin_lock(BH_JournalHead, &bh->b_state); | ||
364 | } | ||
365 | |||
366 | static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh) | ||
367 | { | ||
368 | bit_spin_unlock(BH_JournalHead, &bh->b_state); | ||
369 | } | ||
370 | |||
371 | struct jbd2_revoke_table_s; | ||
372 | |||
373 | /** | ||
374 | * struct handle_s - The handle_s type is the concrete type associated with | ||
375 | * handle_t. | ||
376 | * @h_transaction: Which compound transaction is this update a part of? | ||
377 | * @h_buffer_credits: Number of remaining buffers we are allowed to dirty. | ||
378 | * @h_ref: Reference count on this handle | ||
379 | * @h_err: Field for caller's use to track errors through large fs operations | ||
380 | * @h_sync: flag for sync-on-close | ||
381 | * @h_jdata: flag to force data journaling | ||
382 | * @h_aborted: flag indicating fatal error on handle | ||
383 | **/ | ||
384 | |||
385 | /* Docbook can't yet cope with the bit fields, but will leave the documentation | ||
386 | * in so it can be fixed later. | ||
387 | */ | ||
388 | |||
389 | struct handle_s | ||
390 | { | ||
391 | /* Which compound transaction is this update a part of? */ | ||
392 | transaction_t *h_transaction; | ||
393 | |||
394 | /* Number of remaining buffers we are allowed to dirty: */ | ||
395 | int h_buffer_credits; | ||
396 | |||
397 | /* Reference count on this handle */ | ||
398 | int h_ref; | ||
399 | |||
400 | /* Field for caller's use to track errors through large fs */ | ||
401 | /* operations */ | ||
402 | int h_err; | ||
403 | |||
404 | /* Flags [no locking] */ | ||
405 | unsigned int h_sync: 1; /* sync-on-close */ | ||
406 | unsigned int h_jdata: 1; /* force data journaling */ | ||
407 | unsigned int h_aborted: 1; /* fatal error on handle */ | ||
408 | }; | ||
409 | |||
410 | |||
411 | /* The transaction_t type is the guts of the journaling mechanism. It | ||
412 | * tracks a compound transaction through its various states: | ||
413 | * | ||
414 | * RUNNING: accepting new updates | ||
415 | * LOCKED: Updates still running but we don't accept new ones | ||
416 | * RUNDOWN: Updates are tidying up but have finished requesting | ||
417 | * new buffers to modify (state not used for now) | ||
418 | * FLUSH: All updates complete, but we are still writing to disk | ||
419 | * COMMIT: All data on disk, writing commit record | ||
420 | * FINISHED: We still have to keep the transaction for checkpointing. | ||
421 | * | ||
422 | * The transaction keeps track of all of the buffers modified by a | ||
423 | * running transaction, and all of the buffers committed but not yet | ||
424 | * flushed to home for finished transactions. | ||
425 | */ | ||
426 | |||
427 | /* | ||
428 | * Lock ranking: | ||
429 | * | ||
430 | * j_list_lock | ||
431 | * ->jbd_lock_bh_journal_head() (This is "innermost") | ||
432 | * | ||
433 | * j_state_lock | ||
434 | * ->jbd_lock_bh_state() | ||
435 | * | ||
436 | * jbd_lock_bh_state() | ||
437 | * ->j_list_lock | ||
438 | * | ||
439 | * j_state_lock | ||
440 | * ->t_handle_lock | ||
441 | * | ||
442 | * j_state_lock | ||
443 | * ->j_list_lock (journal_unmap_buffer) | ||
444 | * | ||
445 | */ | ||
446 | |||
447 | struct transaction_s | ||
448 | { | ||
449 | /* Pointer to the journal for this transaction. [no locking] */ | ||
450 | journal_t *t_journal; | ||
451 | |||
452 | /* Sequence number for this transaction [no locking] */ | ||
453 | tid_t t_tid; | ||
454 | |||
455 | /* | ||
456 | * Transaction's current state | ||
457 | * [no locking - only kjournald2 alters this] | ||
458 | * FIXME: needs barriers | ||
459 | * KLUDGE: [use j_state_lock] | ||
460 | */ | ||
461 | enum { | ||
462 | T_RUNNING, | ||
463 | T_LOCKED, | ||
464 | T_RUNDOWN, | ||
465 | T_FLUSH, | ||
466 | T_COMMIT, | ||
467 | T_FINISHED | ||
468 | } t_state; | ||
469 | |||
470 | /* | ||
471 | * Where in the log does this transaction's commit start? [no locking] | ||
472 | */ | ||
473 | unsigned long t_log_start; | ||
474 | |||
475 | /* Number of buffers on the t_buffers list [j_list_lock] */ | ||
476 | int t_nr_buffers; | ||
477 | |||
478 | /* | ||
479 | * Doubly-linked circular list of all buffers reserved but not yet | ||
480 | * modified by this transaction [j_list_lock] | ||
481 | */ | ||
482 | struct journal_head *t_reserved_list; | ||
483 | |||
484 | /* | ||
485 | * Doubly-linked circular list of all buffers under writeout during | ||
486 | * commit [j_list_lock] | ||
487 | */ | ||
488 | struct journal_head *t_locked_list; | ||
489 | |||
490 | /* | ||
491 | * Doubly-linked circular list of all metadata buffers owned by this | ||
492 | * transaction [j_list_lock] | ||
493 | */ | ||
494 | struct journal_head *t_buffers; | ||
495 | |||
496 | /* | ||
497 | * Doubly-linked circular list of all data buffers still to be | ||
498 | * flushed before this transaction can be committed [j_list_lock] | ||
499 | */ | ||
500 | struct journal_head *t_sync_datalist; | ||
501 | |||
502 | /* | ||
503 | * Doubly-linked circular list of all forget buffers (superseded | ||
504 | * buffers which we can un-checkpoint once this transaction commits) | ||
505 | * [j_list_lock] | ||
506 | */ | ||
507 | struct journal_head *t_forget; | ||
508 | |||
509 | /* | ||
510 | * Doubly-linked circular list of all buffers still to be flushed before | ||
511 | * this transaction can be checkpointed. [j_list_lock] | ||
512 | */ | ||
513 | struct journal_head *t_checkpoint_list; | ||
514 | |||
515 | /* | ||
516 | * Doubly-linked circular list of all buffers submitted for IO while | ||
517 | * checkpointing. [j_list_lock] | ||
518 | */ | ||
519 | struct journal_head *t_checkpoint_io_list; | ||
520 | |||
521 | /* | ||
522 | * Doubly-linked circular list of temporary buffers currently undergoing | ||
523 | * IO in the log [j_list_lock] | ||
524 | */ | ||
525 | struct journal_head *t_iobuf_list; | ||
526 | |||
527 | /* | ||
528 | * Doubly-linked circular list of metadata buffers being shadowed by log | ||
529 | * IO. The IO buffers on the iobuf list and the shadow buffers on this | ||
530 | * list match each other one for one at all times. [j_list_lock] | ||
531 | */ | ||
532 | struct journal_head *t_shadow_list; | ||
533 | |||
534 | /* | ||
535 | * Doubly-linked circular list of control buffers being written to the | ||
536 | * log. [j_list_lock] | ||
537 | */ | ||
538 | struct journal_head *t_log_list; | ||
539 | |||
540 | /* | ||
541 | * Protects info related to handles | ||
542 | */ | ||
543 | spinlock_t t_handle_lock; | ||
544 | |||
545 | /* | ||
546 | * Number of outstanding updates running on this transaction | ||
547 | * [t_handle_lock] | ||
548 | */ | ||
549 | int t_updates; | ||
550 | |||
551 | /* | ||
552 | * Number of buffers reserved for use by all handles in this transaction | ||
553 | * handle but not yet modified. [t_handle_lock] | ||
554 | */ | ||
555 | int t_outstanding_credits; | ||
556 | |||
557 | /* | ||
558 | * Forward and backward links for the circular list of all transactions | ||
559 | * awaiting checkpoint. [j_list_lock] | ||
560 | */ | ||
561 | transaction_t *t_cpnext, *t_cpprev; | ||
562 | |||
563 | /* | ||
564 | * When will the transaction expire (become due for commit), in jiffies? | ||
565 | * [no locking] | ||
566 | */ | ||
567 | unsigned long t_expires; | ||
568 | |||
569 | /* | ||
570 | * How many handles used this transaction? [t_handle_lock] | ||
571 | */ | ||
572 | int t_handle_count; | ||
573 | |||
574 | }; | ||
575 | |||
576 | /** | ||
577 | * struct journal_s - The journal_s type is the concrete type associated with | ||
578 | * journal_t. | ||
579 | * @j_flags: General journaling state flags | ||
580 | * @j_errno: Is there an outstanding uncleared error on the journal (from a | ||
581 | * prior abort)? | ||
582 | * @j_sb_buffer: First part of superblock buffer | ||
583 | * @j_superblock: Second part of superblock buffer | ||
584 | * @j_format_version: Version of the superblock format | ||
585 | * @j_state_lock: Protect the various scalars in the journal | ||
586 | * @j_barrier_count: Number of processes waiting to create a barrier lock | ||
587 | * @j_barrier: The barrier lock itself | ||
588 | * @j_running_transaction: The current running transaction.. | ||
589 | * @j_committing_transaction: the transaction we are pushing to disk | ||
590 | * @j_checkpoint_transactions: a linked circular list of all transactions | ||
591 | * waiting for checkpointing | ||
592 | * @j_wait_transaction_locked: Wait queue for waiting for a locked transaction | ||
593 | * to start committing, or for a barrier lock to be released | ||
594 | * @j_wait_logspace: Wait queue for waiting for checkpointing to complete | ||
595 | * @j_wait_done_commit: Wait queue for waiting for commit to complete | ||
596 | * @j_wait_checkpoint: Wait queue to trigger checkpointing | ||
597 | * @j_wait_commit: Wait queue to trigger commit | ||
598 | * @j_wait_updates: Wait queue to wait for updates to complete | ||
599 | * @j_checkpoint_mutex: Mutex for locking against concurrent checkpoints | ||
600 | * @j_head: Journal head - identifies the first unused block in the journal | ||
601 | * @j_tail: Journal tail - identifies the oldest still-used block in the | ||
602 | * journal. | ||
603 | * @j_free: Journal free - how many free blocks are there in the journal? | ||
604 | * @j_first: The block number of the first usable block | ||
605 | * @j_last: The block number one beyond the last usable block | ||
606 | * @j_dev: Device where we store the journal | ||
607 | * @j_blocksize: blocksize for the location where we store the journal. | ||
608 | * @j_blk_offset: starting block offset for into the device where we store the | ||
609 | * journal | ||
610 | * @j_fs_dev: Device which holds the client fs. For internal journal this will | ||
611 | * be equal to j_dev | ||
612 | * @j_maxlen: Total maximum capacity of the journal region on disk. | ||
613 | * @j_list_lock: Protects the buffer lists and internal buffer state. | ||
614 | * @j_inode: Optional inode where we store the journal. If present, all journal | ||
615 | * block numbers are mapped into this inode via bmap(). | ||
616 | * @j_tail_sequence: Sequence number of the oldest transaction in the log | ||
617 | * @j_transaction_sequence: Sequence number of the next transaction to grant | ||
618 | * @j_commit_sequence: Sequence number of the most recently committed | ||
619 | * transaction | ||
620 | * @j_commit_request: Sequence number of the most recent transaction wanting | ||
621 | * commit | ||
622 | * @j_uuid: Uuid of client object. | ||
623 | * @j_task: Pointer to the current commit thread for this journal | ||
624 | * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a | ||
625 | * single compound commit transaction | ||
626 | * @j_commit_interval: What is the maximum transaction lifetime before we begin | ||
627 | * a commit? | ||
628 | * @j_commit_timer: The timer used to wakeup the commit thread | ||
629 | * @j_revoke_lock: Protect the revoke table | ||
630 | * @j_revoke: The revoke table - maintains the list of revoked blocks in the | ||
631 | * current transaction. | ||
632 | * @j_revoke_table: alternate revoke tables for j_revoke | ||
633 | * @j_wbuf: array of buffer_heads for jbd2_journal_commit_transaction | ||
634 | * @j_wbufsize: maximum number of buffer_heads allowed in j_wbuf, the | ||
635 | * number that will fit in j_blocksize | ||
636 | * @j_last_sync_writer: most recent pid which did a synchronous write | ||
637 | * @j_private: An opaque pointer to fs-private information. | ||
638 | */ | ||
639 | |||
640 | struct journal_s | ||
641 | { | ||
642 | /* General journaling state flags [j_state_lock] */ | ||
643 | unsigned long j_flags; | ||
644 | |||
645 | /* | ||
646 | * Is there an outstanding uncleared error on the journal (from a prior | ||
647 | * abort)? [j_state_lock] | ||
648 | */ | ||
649 | int j_errno; | ||
650 | |||
651 | /* The superblock buffer */ | ||
652 | struct buffer_head *j_sb_buffer; | ||
653 | journal_superblock_t *j_superblock; | ||
654 | |||
655 | /* Version of the superblock format */ | ||
656 | int j_format_version; | ||
657 | |||
658 | /* | ||
659 | * Protect the various scalars in the journal | ||
660 | */ | ||
661 | spinlock_t j_state_lock; | ||
662 | |||
663 | /* | ||
664 | * Number of processes waiting to create a barrier lock [j_state_lock] | ||
665 | */ | ||
666 | int j_barrier_count; | ||
667 | |||
668 | /* The barrier lock itself */ | ||
669 | struct mutex j_barrier; | ||
670 | |||
671 | /* | ||
672 | * Transactions: The current running transaction... | ||
673 | * [j_state_lock] [caller holding open handle] | ||
674 | */ | ||
675 | transaction_t *j_running_transaction; | ||
676 | |||
677 | /* | ||
678 | * the transaction we are pushing to disk | ||
679 | * [j_state_lock] [caller holding open handle] | ||
680 | */ | ||
681 | transaction_t *j_committing_transaction; | ||
682 | |||
683 | /* | ||
684 | * ... and a linked circular list of all transactions waiting for | ||
685 | * checkpointing. [j_list_lock] | ||
686 | */ | ||
687 | transaction_t *j_checkpoint_transactions; | ||
688 | |||
689 | /* | ||
690 | * Wait queue for waiting for a locked transaction to start committing, | ||
691 | * or for a barrier lock to be released | ||
692 | */ | ||
693 | wait_queue_head_t j_wait_transaction_locked; | ||
694 | |||
695 | /* Wait queue for waiting for checkpointing to complete */ | ||
696 | wait_queue_head_t j_wait_logspace; | ||
697 | |||
698 | /* Wait queue for waiting for commit to complete */ | ||
699 | wait_queue_head_t j_wait_done_commit; | ||
700 | |||
701 | /* Wait queue to trigger checkpointing */ | ||
702 | wait_queue_head_t j_wait_checkpoint; | ||
703 | |||
704 | /* Wait queue to trigger commit */ | ||
705 | wait_queue_head_t j_wait_commit; | ||
706 | |||
707 | /* Wait queue to wait for updates to complete */ | ||
708 | wait_queue_head_t j_wait_updates; | ||
709 | |||
710 | /* Semaphore for locking against concurrent checkpoints */ | ||
711 | struct mutex j_checkpoint_mutex; | ||
712 | |||
713 | /* | ||
714 | * Journal head: identifies the first unused block in the journal. | ||
715 | * [j_state_lock] | ||
716 | */ | ||
717 | unsigned long j_head; | ||
718 | |||
719 | /* | ||
720 | * Journal tail: identifies the oldest still-used block in the journal. | ||
721 | * [j_state_lock] | ||
722 | */ | ||
723 | unsigned long j_tail; | ||
724 | |||
725 | /* | ||
726 | * Journal free: how many free blocks are there in the journal? | ||
727 | * [j_state_lock] | ||
728 | */ | ||
729 | unsigned long j_free; | ||
730 | |||
731 | /* | ||
732 | * Journal start and end: the block numbers of the first usable block | ||
733 | * and one beyond the last usable block in the journal. [j_state_lock] | ||
734 | */ | ||
735 | unsigned long j_first; | ||
736 | unsigned long j_last; | ||
737 | |||
738 | /* | ||
739 | * Device, blocksize and starting block offset for the location where we | ||
740 | * store the journal. | ||
741 | */ | ||
742 | struct block_device *j_dev; | ||
743 | int j_blocksize; | ||
744 | unsigned long long j_blk_offset; | ||
745 | |||
746 | /* | ||
747 | * Device which holds the client fs. For internal journal this will be | ||
748 | * equal to j_dev. | ||
749 | */ | ||
750 | struct block_device *j_fs_dev; | ||
751 | |||
752 | /* Total maximum capacity of the journal region on disk. */ | ||
753 | unsigned int j_maxlen; | ||
754 | |||
755 | /* | ||
756 | * Protects the buffer lists and internal buffer state. | ||
757 | */ | ||
758 | spinlock_t j_list_lock; | ||
759 | |||
760 | /* Optional inode where we store the journal. If present, all */ | ||
761 | /* journal block numbers are mapped into this inode via */ | ||
762 | /* bmap(). */ | ||
763 | struct inode *j_inode; | ||
764 | |||
765 | /* | ||
766 | * Sequence number of the oldest transaction in the log [j_state_lock] | ||
767 | */ | ||
768 | tid_t j_tail_sequence; | ||
769 | |||
770 | /* | ||
771 | * Sequence number of the next transaction to grant [j_state_lock] | ||
772 | */ | ||
773 | tid_t j_transaction_sequence; | ||
774 | |||
775 | /* | ||
776 | * Sequence number of the most recently committed transaction | ||
777 | * [j_state_lock]. | ||
778 | */ | ||
779 | tid_t j_commit_sequence; | ||
780 | |||
781 | /* | ||
782 | * Sequence number of the most recent transaction wanting commit | ||
783 | * [j_state_lock] | ||
784 | */ | ||
785 | tid_t j_commit_request; | ||
786 | |||
787 | /* | ||
788 | * Journal uuid: identifies the object (filesystem, LVM volume etc) | ||
789 | * backed by this journal. This will eventually be replaced by an array | ||
790 | * of uuids, allowing us to index multiple devices within a single | ||
791 | * journal and to perform atomic updates across them. | ||
792 | */ | ||
793 | __u8 j_uuid[16]; | ||
794 | |||
795 | /* Pointer to the current commit thread for this journal */ | ||
796 | struct task_struct *j_task; | ||
797 | |||
798 | /* | ||
799 | * Maximum number of metadata buffers to allow in a single compound | ||
800 | * commit transaction | ||
801 | */ | ||
802 | int j_max_transaction_buffers; | ||
803 | |||
804 | /* | ||
805 | * What is the maximum transaction lifetime before we begin a commit? | ||
806 | */ | ||
807 | unsigned long j_commit_interval; | ||
808 | |||
809 | /* The timer used to wakeup the commit thread: */ | ||
810 | struct timer_list j_commit_timer; | ||
811 | |||
812 | /* | ||
813 | * The revoke table: maintains the list of revoked blocks in the | ||
814 | * current transaction. [j_revoke_lock] | ||
815 | */ | ||
816 | spinlock_t j_revoke_lock; | ||
817 | struct jbd2_revoke_table_s *j_revoke; | ||
818 | struct jbd2_revoke_table_s *j_revoke_table[2]; | ||
819 | |||
820 | /* | ||
821 | * array of bhs for jbd2_journal_commit_transaction | ||
822 | */ | ||
823 | struct buffer_head **j_wbuf; | ||
824 | int j_wbufsize; | ||
825 | |||
826 | pid_t j_last_sync_writer; | ||
827 | |||
828 | /* | ||
829 | * An opaque pointer to fs-private information. ext3 puts its | ||
830 | * superblock pointer here | ||
831 | */ | ||
832 | void *j_private; | ||
833 | }; | ||
834 | |||
835 | /* | ||
836 | * Journal flag definitions | ||
837 | */ | ||
838 | #define JBD2_UNMOUNT 0x001 /* Journal thread is being destroyed */ | ||
839 | #define JBD2_ABORT 0x002 /* Journaling has been aborted for errors. */ | ||
840 | #define JBD2_ACK_ERR 0x004 /* The errno in the sb has been acked */ | ||
841 | #define JBD2_FLUSHED 0x008 /* The journal superblock has been flushed */ | ||
842 | #define JBD2_LOADED 0x010 /* The journal superblock has been loaded */ | ||
843 | #define JBD2_BARRIER 0x020 /* Use IDE barriers */ | ||
844 | |||
845 | /* | ||
846 | * Function declarations for the journaling transaction and buffer | ||
847 | * management | ||
848 | */ | ||
849 | |||
850 | /* Filing buffers */ | ||
851 | extern void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh); | ||
852 | extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *); | ||
853 | extern void __jbd2_journal_unfile_buffer(struct journal_head *); | ||
854 | extern void __jbd2_journal_refile_buffer(struct journal_head *); | ||
855 | extern void jbd2_journal_refile_buffer(journal_t *, struct journal_head *); | ||
856 | extern void __jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int); | ||
857 | extern void __journal_free_buffer(struct journal_head *bh); | ||
858 | extern void jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int); | ||
859 | extern void __journal_clean_data_list(transaction_t *transaction); | ||
860 | |||
861 | /* Log buffer allocation */ | ||
862 | extern struct journal_head * jbd2_journal_get_descriptor_buffer(journal_t *); | ||
863 | int jbd2_journal_next_log_block(journal_t *, unsigned long long *); | ||
864 | |||
865 | /* Commit management */ | ||
866 | extern void jbd2_journal_commit_transaction(journal_t *); | ||
867 | |||
868 | /* Checkpoint list management */ | ||
869 | int __jbd2_journal_clean_checkpoint_list(journal_t *journal); | ||
870 | int __jbd2_journal_remove_checkpoint(struct journal_head *); | ||
871 | void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *); | ||
872 | |||
873 | /* Buffer IO */ | ||
874 | extern int | ||
875 | jbd2_journal_write_metadata_buffer(transaction_t *transaction, | ||
876 | struct journal_head *jh_in, | ||
877 | struct journal_head **jh_out, | ||
878 | unsigned long long blocknr); | ||
879 | |||
880 | /* Transaction locking */ | ||
881 | extern void __wait_on_journal (journal_t *); | ||
882 | |||
883 | /* | ||
884 | * Journal locking. | ||
885 | * | ||
886 | * We need to lock the journal during transaction state changes so that nobody | ||
887 | * ever tries to take a handle on the running transaction while we are in the | ||
888 | * middle of moving it to the commit phase. j_state_lock does this. | ||
889 | * | ||
890 | * Note that the locking is completely interrupt unsafe. We never touch | ||
891 | * journal structures from interrupts. | ||
892 | */ | ||
893 | |||
894 | static inline handle_t *journal_current_handle(void) | ||
895 | { | ||
896 | return current->journal_info; | ||
897 | } | ||
898 | |||
899 | /* The journaling code user interface: | ||
900 | * | ||
901 | * Create and destroy handles | ||
902 | * Register buffer modifications against the current transaction. | ||
903 | */ | ||
904 | |||
905 | extern handle_t *jbd2_journal_start(journal_t *, int nblocks); | ||
906 | extern int jbd2_journal_restart (handle_t *, int nblocks); | ||
907 | extern int jbd2_journal_extend (handle_t *, int nblocks); | ||
908 | extern int jbd2_journal_get_write_access(handle_t *, struct buffer_head *); | ||
909 | extern int jbd2_journal_get_create_access (handle_t *, struct buffer_head *); | ||
910 | extern int jbd2_journal_get_undo_access(handle_t *, struct buffer_head *); | ||
911 | extern int jbd2_journal_dirty_data (handle_t *, struct buffer_head *); | ||
912 | extern int jbd2_journal_dirty_metadata (handle_t *, struct buffer_head *); | ||
913 | extern void jbd2_journal_release_buffer (handle_t *, struct buffer_head *); | ||
914 | extern int jbd2_journal_forget (handle_t *, struct buffer_head *); | ||
915 | extern void journal_sync_buffer (struct buffer_head *); | ||
916 | extern void jbd2_journal_invalidatepage(journal_t *, | ||
917 | struct page *, unsigned long); | ||
918 | extern int jbd2_journal_try_to_free_buffers(journal_t *, struct page *, gfp_t); | ||
919 | extern int jbd2_journal_stop(handle_t *); | ||
920 | extern int jbd2_journal_flush (journal_t *); | ||
921 | extern void jbd2_journal_lock_updates (journal_t *); | ||
922 | extern void jbd2_journal_unlock_updates (journal_t *); | ||
923 | |||
924 | extern journal_t * jbd2_journal_init_dev(struct block_device *bdev, | ||
925 | struct block_device *fs_dev, | ||
926 | unsigned long long start, int len, int bsize); | ||
927 | extern journal_t * jbd2_journal_init_inode (struct inode *); | ||
928 | extern int jbd2_journal_update_format (journal_t *); | ||
929 | extern int jbd2_journal_check_used_features | ||
930 | (journal_t *, unsigned long, unsigned long, unsigned long); | ||
931 | extern int jbd2_journal_check_available_features | ||
932 | (journal_t *, unsigned long, unsigned long, unsigned long); | ||
933 | extern int jbd2_journal_set_features | ||
934 | (journal_t *, unsigned long, unsigned long, unsigned long); | ||
935 | extern int jbd2_journal_create (journal_t *); | ||
936 | extern int jbd2_journal_load (journal_t *journal); | ||
937 | extern void jbd2_journal_destroy (journal_t *); | ||
938 | extern int jbd2_journal_recover (journal_t *journal); | ||
939 | extern int jbd2_journal_wipe (journal_t *, int); | ||
940 | extern int jbd2_journal_skip_recovery (journal_t *); | ||
941 | extern void jbd2_journal_update_superblock (journal_t *, int); | ||
942 | extern void __jbd2_journal_abort_hard (journal_t *); | ||
943 | extern void jbd2_journal_abort (journal_t *, int); | ||
944 | extern int jbd2_journal_errno (journal_t *); | ||
945 | extern void jbd2_journal_ack_err (journal_t *); | ||
946 | extern int jbd2_journal_clear_err (journal_t *); | ||
947 | extern int jbd2_journal_bmap(journal_t *, unsigned long, unsigned long long *); | ||
948 | extern int jbd2_journal_force_commit(journal_t *); | ||
949 | |||
950 | /* | ||
951 | * journal_head management | ||
952 | */ | ||
953 | struct journal_head *jbd2_journal_add_journal_head(struct buffer_head *bh); | ||
954 | struct journal_head *jbd2_journal_grab_journal_head(struct buffer_head *bh); | ||
955 | void jbd2_journal_remove_journal_head(struct buffer_head *bh); | ||
956 | void jbd2_journal_put_journal_head(struct journal_head *jh); | ||
957 | |||
958 | /* | ||
959 | * handle management | ||
960 | */ | ||
961 | extern kmem_cache_t *jbd2_handle_cache; | ||
962 | |||
963 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) | ||
964 | { | ||
965 | return kmem_cache_alloc(jbd2_handle_cache, gfp_flags); | ||
966 | } | ||
967 | |||
968 | static inline void jbd_free_handle(handle_t *handle) | ||
969 | { | ||
970 | kmem_cache_free(jbd2_handle_cache, handle); | ||
971 | } | ||
972 | |||
973 | /* Primary revoke support */ | ||
974 | #define JOURNAL_REVOKE_DEFAULT_HASH 256 | ||
975 | extern int jbd2_journal_init_revoke(journal_t *, int); | ||
976 | extern void jbd2_journal_destroy_revoke_caches(void); | ||
977 | extern int jbd2_journal_init_revoke_caches(void); | ||
978 | |||
979 | extern void jbd2_journal_destroy_revoke(journal_t *); | ||
980 | extern int jbd2_journal_revoke (handle_t *, unsigned long long, struct buffer_head *); | ||
981 | extern int jbd2_journal_cancel_revoke(handle_t *, struct journal_head *); | ||
982 | extern void jbd2_journal_write_revoke_records(journal_t *, transaction_t *); | ||
983 | |||
984 | /* Recovery revoke support */ | ||
985 | extern int jbd2_journal_set_revoke(journal_t *, unsigned long long, tid_t); | ||
986 | extern int jbd2_journal_test_revoke(journal_t *, unsigned long long, tid_t); | ||
987 | extern void jbd2_journal_clear_revoke(journal_t *); | ||
988 | extern void jbd2_journal_switch_revoke_table(journal_t *journal); | ||
989 | |||
990 | /* | ||
991 | * The log thread user interface: | ||
992 | * | ||
993 | * Request space in the current transaction, and force transaction commit | ||
994 | * transitions on demand. | ||
995 | */ | ||
996 | |||
997 | int __jbd2_log_space_left(journal_t *); /* Called with journal locked */ | ||
998 | int jbd2_log_start_commit(journal_t *journal, tid_t tid); | ||
999 | int __jbd2_log_start_commit(journal_t *journal, tid_t tid); | ||
1000 | int jbd2_journal_start_commit(journal_t *journal, tid_t *tid); | ||
1001 | int jbd2_journal_force_commit_nested(journal_t *journal); | ||
1002 | int jbd2_log_wait_commit(journal_t *journal, tid_t tid); | ||
1003 | int jbd2_log_do_checkpoint(journal_t *journal); | ||
1004 | |||
1005 | void __jbd2_log_wait_for_space(journal_t *journal); | ||
1006 | extern void __jbd2_journal_drop_transaction(journal_t *, transaction_t *); | ||
1007 | extern int jbd2_cleanup_journal_tail(journal_t *); | ||
1008 | |||
1009 | /* Debugging code only: */ | ||
1010 | |||
1011 | #define jbd_ENOSYS() \ | ||
1012 | do { \ | ||
1013 | printk (KERN_ERR "JBD unimplemented function %s\n", __FUNCTION__); \ | ||
1014 | current->state = TASK_UNINTERRUPTIBLE; \ | ||
1015 | schedule(); \ | ||
1016 | } while (1) | ||
1017 | |||
1018 | /* | ||
1019 | * is_journal_abort | ||
1020 | * | ||
1021 | * Simple test wrapper function to test the JBD2_ABORT state flag. This | ||
1022 | * bit, when set, indicates that we have had a fatal error somewhere, | ||
1023 | * either inside the journaling layer or indicated to us by the client | ||
1024 | * (eg. ext3), and that we and should not commit any further | ||
1025 | * transactions. | ||
1026 | */ | ||
1027 | |||
1028 | static inline int is_journal_aborted(journal_t *journal) | ||
1029 | { | ||
1030 | return journal->j_flags & JBD2_ABORT; | ||
1031 | } | ||
1032 | |||
1033 | static inline int is_handle_aborted(handle_t *handle) | ||
1034 | { | ||
1035 | if (handle->h_aborted) | ||
1036 | return 1; | ||
1037 | return is_journal_aborted(handle->h_transaction->t_journal); | ||
1038 | } | ||
1039 | |||
1040 | static inline void jbd2_journal_abort_handle(handle_t *handle) | ||
1041 | { | ||
1042 | handle->h_aborted = 1; | ||
1043 | } | ||
1044 | |||
1045 | #endif /* __KERNEL__ */ | ||
1046 | |||
1047 | /* Comparison functions for transaction IDs: perform comparisons using | ||
1048 | * modulo arithmetic so that they work over sequence number wraps. */ | ||
1049 | |||
1050 | static inline int tid_gt(tid_t x, tid_t y) | ||
1051 | { | ||
1052 | int difference = (x - y); | ||
1053 | return (difference > 0); | ||
1054 | } | ||
1055 | |||
1056 | static inline int tid_geq(tid_t x, tid_t y) | ||
1057 | { | ||
1058 | int difference = (x - y); | ||
1059 | return (difference >= 0); | ||
1060 | } | ||
1061 | |||
1062 | extern int jbd2_journal_blocks_per_page(struct inode *inode); | ||
1063 | extern size_t journal_tag_bytes(journal_t *journal); | ||
1064 | |||
1065 | /* | ||
1066 | * Return the minimum number of blocks which must be free in the journal | ||
1067 | * before a new transaction may be started. Must be called under j_state_lock. | ||
1068 | */ | ||
1069 | static inline int jbd_space_needed(journal_t *journal) | ||
1070 | { | ||
1071 | int nblocks = journal->j_max_transaction_buffers; | ||
1072 | if (journal->j_committing_transaction) | ||
1073 | nblocks += journal->j_committing_transaction-> | ||
1074 | t_outstanding_credits; | ||
1075 | return nblocks; | ||
1076 | } | ||
1077 | |||
1078 | /* | ||
1079 | * Definitions which augment the buffer_head layer | ||
1080 | */ | ||
1081 | |||
1082 | /* journaling buffer types */ | ||
1083 | #define BJ_None 0 /* Not journaled */ | ||
1084 | #define BJ_SyncData 1 /* Normal data: flush before commit */ | ||
1085 | #define BJ_Metadata 2 /* Normal journaled metadata */ | ||
1086 | #define BJ_Forget 3 /* Buffer superseded by this transaction */ | ||
1087 | #define BJ_IO 4 /* Buffer is for temporary IO use */ | ||
1088 | #define BJ_Shadow 5 /* Buffer contents being shadowed to the log */ | ||
1089 | #define BJ_LogCtl 6 /* Buffer contains log descriptors */ | ||
1090 | #define BJ_Reserved 7 /* Buffer is reserved for access by journal */ | ||
1091 | #define BJ_Locked 8 /* Locked for I/O during commit */ | ||
1092 | #define BJ_Types 9 | ||
1093 | |||
1094 | extern int jbd_blocks_per_page(struct inode *inode); | ||
1095 | |||
1096 | #ifdef __KERNEL__ | ||
1097 | |||
1098 | #define buffer_trace_init(bh) do {} while (0) | ||
1099 | #define print_buffer_fields(bh) do {} while (0) | ||
1100 | #define print_buffer_trace(bh) do {} while (0) | ||
1101 | #define BUFFER_TRACE(bh, info) do {} while (0) | ||
1102 | #define BUFFER_TRACE2(bh, bh2, info) do {} while (0) | ||
1103 | #define JBUFFER_TRACE(jh, info) do {} while (0) | ||
1104 | |||
1105 | #endif /* __KERNEL__ */ | ||
1106 | |||
1107 | #endif /* _LINUX_JBD_H */ | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index d6a3d4b345fc..d0a7ad5ed518 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -109,6 +109,10 @@ static inline u32 ata_msg_init(int dval, int default_msg_enable_bits) | |||
109 | #define ATA_TAG_POISON 0xfafbfcfdU | 109 | #define ATA_TAG_POISON 0xfafbfcfdU |
110 | 110 | ||
111 | /* move to PCI layer? */ | 111 | /* move to PCI layer? */ |
112 | #define PCI_VDEVICE(vendor, device) \ | ||
113 | PCI_VENDOR_ID_##vendor, (device), \ | ||
114 | PCI_ANY_ID, PCI_ANY_ID, 0, 0 | ||
115 | |||
112 | static inline struct device *pci_dev_to_dev(struct pci_dev *pdev) | 116 | static inline struct device *pci_dev_to_dev(struct pci_dev *pdev) |
113 | { | 117 | { |
114 | return &pdev->dev; | 118 | return &pdev->dev; |
@@ -138,8 +142,9 @@ enum { | |||
138 | ATA_DFLAG_NCQ = (1 << 3), /* device supports NCQ */ | 142 | ATA_DFLAG_NCQ = (1 << 3), /* device supports NCQ */ |
139 | ATA_DFLAG_CFG_MASK = (1 << 8) - 1, | 143 | ATA_DFLAG_CFG_MASK = (1 << 8) - 1, |
140 | 144 | ||
141 | ATA_DFLAG_PIO = (1 << 8), /* device currently in PIO mode */ | 145 | ATA_DFLAG_PIO = (1 << 8), /* device limited to PIO mode */ |
142 | ATA_DFLAG_SUSPENDED = (1 << 9), /* device suspended */ | 146 | ATA_DFLAG_NCQ_OFF = (1 << 9), /* devied limited to non-NCQ mode */ |
147 | ATA_DFLAG_SUSPENDED = (1 << 10), /* device suspended */ | ||
143 | ATA_DFLAG_INIT_MASK = (1 << 16) - 1, | 148 | ATA_DFLAG_INIT_MASK = (1 << 16) - 1, |
144 | 149 | ||
145 | ATA_DFLAG_DETACH = (1 << 16), | 150 | ATA_DFLAG_DETACH = (1 << 16), |
@@ -623,7 +628,7 @@ struct ata_port_operations { | |||
623 | void (*error_handler) (struct ata_port *ap); | 628 | void (*error_handler) (struct ata_port *ap); |
624 | void (*post_internal_cmd) (struct ata_queued_cmd *qc); | 629 | void (*post_internal_cmd) (struct ata_queued_cmd *qc); |
625 | 630 | ||
626 | irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); | 631 | irq_handler_t irq_handler; |
627 | void (*irq_clear) (struct ata_port *); | 632 | void (*irq_clear) (struct ata_port *); |
628 | 633 | ||
629 | u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); | 634 | u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); |
@@ -764,7 +769,7 @@ extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf) | |||
764 | extern int ata_port_start (struct ata_port *ap); | 769 | extern int ata_port_start (struct ata_port *ap); |
765 | extern void ata_port_stop (struct ata_port *ap); | 770 | extern void ata_port_stop (struct ata_port *ap); |
766 | extern void ata_host_stop (struct ata_host *host); | 771 | extern void ata_host_stop (struct ata_host *host); |
767 | extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs); | 772 | extern irqreturn_t ata_interrupt (int irq, void *dev_instance); |
768 | extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, | 773 | extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, |
769 | unsigned int buflen, int write_data); | 774 | unsigned int buflen, int write_data); |
770 | extern void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, | 775 | extern void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, |
diff --git a/include/linux/lm_interface.h b/include/linux/lm_interface.h new file mode 100644 index 000000000000..1418fdc9ac02 --- /dev/null +++ b/include/linux/lm_interface.h | |||
@@ -0,0 +1,273 @@ | |||
1 | /* | ||
2 | * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | ||
3 | * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. | ||
4 | * | ||
5 | * This copyrighted material is made available to anyone wishing to use, | ||
6 | * modify, copy, or redistribute it subject to the terms and conditions | ||
7 | * of the GNU General Public License version 2. | ||
8 | */ | ||
9 | |||
10 | #ifndef __LM_INTERFACE_DOT_H__ | ||
11 | #define __LM_INTERFACE_DOT_H__ | ||
12 | |||
13 | |||
14 | typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data); | ||
15 | |||
16 | /* | ||
17 | * lm_mount() flags | ||
18 | * | ||
19 | * LM_MFLAG_SPECTATOR | ||
20 | * GFS is asking to join the filesystem's lockspace, but it doesn't want to | ||
21 | * modify the filesystem. The lock module shouldn't assign a journal to the FS | ||
22 | * mount. It shouldn't send recovery callbacks to the FS mount. If the node | ||
23 | * dies or withdraws, all locks can be wiped immediately. | ||
24 | */ | ||
25 | |||
26 | #define LM_MFLAG_SPECTATOR 0x00000001 | ||
27 | |||
28 | /* | ||
29 | * lm_lockstruct flags | ||
30 | * | ||
31 | * LM_LSFLAG_LOCAL | ||
32 | * The lock_nolock module returns LM_LSFLAG_LOCAL to GFS, indicating that GFS | ||
33 | * can make single-node optimizations. | ||
34 | */ | ||
35 | |||
36 | #define LM_LSFLAG_LOCAL 0x00000001 | ||
37 | |||
38 | /* | ||
39 | * lm_lockname types | ||
40 | */ | ||
41 | |||
42 | #define LM_TYPE_RESERVED 0x00 | ||
43 | #define LM_TYPE_NONDISK 0x01 | ||
44 | #define LM_TYPE_INODE 0x02 | ||
45 | #define LM_TYPE_RGRP 0x03 | ||
46 | #define LM_TYPE_META 0x04 | ||
47 | #define LM_TYPE_IOPEN 0x05 | ||
48 | #define LM_TYPE_FLOCK 0x06 | ||
49 | #define LM_TYPE_PLOCK 0x07 | ||
50 | #define LM_TYPE_QUOTA 0x08 | ||
51 | #define LM_TYPE_JOURNAL 0x09 | ||
52 | |||
53 | /* | ||
54 | * lm_lock() states | ||
55 | * | ||
56 | * SHARED is compatible with SHARED, not with DEFERRED or EX. | ||
57 | * DEFERRED is compatible with DEFERRED, not with SHARED or EX. | ||
58 | */ | ||
59 | |||
60 | #define LM_ST_UNLOCKED 0 | ||
61 | #define LM_ST_EXCLUSIVE 1 | ||
62 | #define LM_ST_DEFERRED 2 | ||
63 | #define LM_ST_SHARED 3 | ||
64 | |||
65 | /* | ||
66 | * lm_lock() flags | ||
67 | * | ||
68 | * LM_FLAG_TRY | ||
69 | * Don't wait to acquire the lock if it can't be granted immediately. | ||
70 | * | ||
71 | * LM_FLAG_TRY_1CB | ||
72 | * Send one blocking callback if TRY is set and the lock is not granted. | ||
73 | * | ||
74 | * LM_FLAG_NOEXP | ||
75 | * GFS sets this flag on lock requests it makes while doing journal recovery. | ||
76 | * These special requests should not be blocked due to the recovery like | ||
77 | * ordinary locks would be. | ||
78 | * | ||
79 | * LM_FLAG_ANY | ||
80 | * A SHARED request may also be granted in DEFERRED, or a DEFERRED request may | ||
81 | * also be granted in SHARED. The preferred state is whichever is compatible | ||
82 | * with other granted locks, or the specified state if no other locks exist. | ||
83 | * | ||
84 | * LM_FLAG_PRIORITY | ||
85 | * Override fairness considerations. Suppose a lock is held in a shared state | ||
86 | * and there is a pending request for the deferred state. A shared lock | ||
87 | * request with the priority flag would be allowed to bypass the deferred | ||
88 | * request and directly join the other shared lock. A shared lock request | ||
89 | * without the priority flag might be forced to wait until the deferred | ||
90 | * requested had acquired and released the lock. | ||
91 | */ | ||
92 | |||
93 | #define LM_FLAG_TRY 0x00000001 | ||
94 | #define LM_FLAG_TRY_1CB 0x00000002 | ||
95 | #define LM_FLAG_NOEXP 0x00000004 | ||
96 | #define LM_FLAG_ANY 0x00000008 | ||
97 | #define LM_FLAG_PRIORITY 0x00000010 | ||
98 | |||
99 | /* | ||
100 | * lm_lock() and lm_async_cb return flags | ||
101 | * | ||
102 | * LM_OUT_ST_MASK | ||
103 | * Masks the lower two bits of lock state in the returned value. | ||
104 | * | ||
105 | * LM_OUT_CACHEABLE | ||
106 | * The lock hasn't been released so GFS can continue to cache data for it. | ||
107 | * | ||
108 | * LM_OUT_CANCELED | ||
109 | * The lock request was canceled. | ||
110 | * | ||
111 | * LM_OUT_ASYNC | ||
112 | * The result of the request will be returned in an LM_CB_ASYNC callback. | ||
113 | */ | ||
114 | |||
115 | #define LM_OUT_ST_MASK 0x00000003 | ||
116 | #define LM_OUT_CACHEABLE 0x00000004 | ||
117 | #define LM_OUT_CANCELED 0x00000008 | ||
118 | #define LM_OUT_ASYNC 0x00000080 | ||
119 | #define LM_OUT_ERROR 0x00000100 | ||
120 | |||
121 | /* | ||
122 | * lm_callback_t types | ||
123 | * | ||
124 | * LM_CB_NEED_E LM_CB_NEED_D LM_CB_NEED_S | ||
125 | * Blocking callback, a remote node is requesting the given lock in | ||
126 | * EXCLUSIVE, DEFERRED, or SHARED. | ||
127 | * | ||
128 | * LM_CB_NEED_RECOVERY | ||
129 | * The given journal needs to be recovered. | ||
130 | * | ||
131 | * LM_CB_DROPLOCKS | ||
132 | * Reduce the number of cached locks. | ||
133 | * | ||
134 | * LM_CB_ASYNC | ||
135 | * The given lock has been granted. | ||
136 | */ | ||
137 | |||
138 | #define LM_CB_NEED_E 257 | ||
139 | #define LM_CB_NEED_D 258 | ||
140 | #define LM_CB_NEED_S 259 | ||
141 | #define LM_CB_NEED_RECOVERY 260 | ||
142 | #define LM_CB_DROPLOCKS 261 | ||
143 | #define LM_CB_ASYNC 262 | ||
144 | |||
145 | /* | ||
146 | * lm_recovery_done() messages | ||
147 | */ | ||
148 | |||
149 | #define LM_RD_GAVEUP 308 | ||
150 | #define LM_RD_SUCCESS 309 | ||
151 | |||
152 | |||
153 | struct lm_lockname { | ||
154 | u64 ln_number; | ||
155 | unsigned int ln_type; | ||
156 | }; | ||
157 | |||
158 | #define lm_name_equal(name1, name2) \ | ||
159 | (((name1)->ln_number == (name2)->ln_number) && \ | ||
160 | ((name1)->ln_type == (name2)->ln_type)) \ | ||
161 | |||
162 | struct lm_async_cb { | ||
163 | struct lm_lockname lc_name; | ||
164 | int lc_ret; | ||
165 | }; | ||
166 | |||
167 | struct lm_lockstruct; | ||
168 | |||
169 | struct lm_lockops { | ||
170 | const char *lm_proto_name; | ||
171 | |||
172 | /* | ||
173 | * Mount/Unmount | ||
174 | */ | ||
175 | |||
176 | int (*lm_mount) (char *table_name, char *host_data, | ||
177 | lm_callback_t cb, void *cb_data, | ||
178 | unsigned int min_lvb_size, int flags, | ||
179 | struct lm_lockstruct *lockstruct, | ||
180 | struct kobject *fskobj); | ||
181 | |||
182 | void (*lm_others_may_mount) (void *lockspace); | ||
183 | |||
184 | void (*lm_unmount) (void *lockspace); | ||
185 | |||
186 | void (*lm_withdraw) (void *lockspace); | ||
187 | |||
188 | /* | ||
189 | * Lock oriented operations | ||
190 | */ | ||
191 | |||
192 | int (*lm_get_lock) (void *lockspace, struct lm_lockname *name, void **lockp); | ||
193 | |||
194 | void (*lm_put_lock) (void *lock); | ||
195 | |||
196 | unsigned int (*lm_lock) (void *lock, unsigned int cur_state, | ||
197 | unsigned int req_state, unsigned int flags); | ||
198 | |||
199 | unsigned int (*lm_unlock) (void *lock, unsigned int cur_state); | ||
200 | |||
201 | void (*lm_cancel) (void *lock); | ||
202 | |||
203 | int (*lm_hold_lvb) (void *lock, char **lvbp); | ||
204 | void (*lm_unhold_lvb) (void *lock, char *lvb); | ||
205 | |||
206 | /* | ||
207 | * Posix Lock oriented operations | ||
208 | */ | ||
209 | |||
210 | int (*lm_plock_get) (void *lockspace, struct lm_lockname *name, | ||
211 | struct file *file, struct file_lock *fl); | ||
212 | |||
213 | int (*lm_plock) (void *lockspace, struct lm_lockname *name, | ||
214 | struct file *file, int cmd, struct file_lock *fl); | ||
215 | |||
216 | int (*lm_punlock) (void *lockspace, struct lm_lockname *name, | ||
217 | struct file *file, struct file_lock *fl); | ||
218 | |||
219 | /* | ||
220 | * Client oriented operations | ||
221 | */ | ||
222 | |||
223 | void (*lm_recovery_done) (void *lockspace, unsigned int jid, | ||
224 | unsigned int message); | ||
225 | |||
226 | struct module *lm_owner; | ||
227 | }; | ||
228 | |||
229 | /* | ||
230 | * lm_mount() return values | ||
231 | * | ||
232 | * ls_jid - the journal ID this node should use | ||
233 | * ls_first - this node is the first to mount the file system | ||
234 | * ls_lvb_size - size in bytes of lock value blocks | ||
235 | * ls_lockspace - lock module's context for this file system | ||
236 | * ls_ops - lock module's functions | ||
237 | * ls_flags - lock module features | ||
238 | */ | ||
239 | |||
240 | struct lm_lockstruct { | ||
241 | unsigned int ls_jid; | ||
242 | unsigned int ls_first; | ||
243 | unsigned int ls_lvb_size; | ||
244 | void *ls_lockspace; | ||
245 | const struct lm_lockops *ls_ops; | ||
246 | int ls_flags; | ||
247 | }; | ||
248 | |||
249 | /* | ||
250 | * Lock module bottom interface. A lock module makes itself available to GFS | ||
251 | * with these functions. | ||
252 | */ | ||
253 | |||
254 | int gfs2_register_lockproto(const struct lm_lockops *proto); | ||
255 | void gfs2_unregister_lockproto(const struct lm_lockops *proto); | ||
256 | |||
257 | /* | ||
258 | * Lock module top interface. GFS calls these functions when mounting or | ||
259 | * unmounting a file system. | ||
260 | */ | ||
261 | |||
262 | int gfs2_mount_lockproto(char *proto_name, char *table_name, char *host_data, | ||
263 | lm_callback_t cb, void *cb_data, | ||
264 | unsigned int min_lvb_size, int flags, | ||
265 | struct lm_lockstruct *lockstruct, | ||
266 | struct kobject *fskobj); | ||
267 | |||
268 | void gfs2_unmount_lockproto(struct lm_lockstruct *lockstruct); | ||
269 | |||
270 | void gfs2_withdraw_lockproto(struct lm_lockstruct *lockstruct); | ||
271 | |||
272 | #endif /* __LM_INTERFACE_DOT_H__ */ | ||
273 | |||
diff --git a/include/linux/lock_dlm_plock.h b/include/linux/lock_dlm_plock.h new file mode 100644 index 000000000000..fc3415113973 --- /dev/null +++ b/include/linux/lock_dlm_plock.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005 Red Hat, Inc. All rights reserved. | ||
3 | * | ||
4 | * This copyrighted material is made available to anyone wishing to use, | ||
5 | * modify, copy, or redistribute it subject to the terms and conditions | ||
6 | * of the GNU General Public License v.2. | ||
7 | */ | ||
8 | |||
9 | #ifndef __LOCK_DLM_PLOCK_DOT_H__ | ||
10 | #define __LOCK_DLM_PLOCK_DOT_H__ | ||
11 | |||
12 | #define GDLM_PLOCK_MISC_NAME "lock_dlm_plock" | ||
13 | |||
14 | #define GDLM_PLOCK_VERSION_MAJOR 1 | ||
15 | #define GDLM_PLOCK_VERSION_MINOR 1 | ||
16 | #define GDLM_PLOCK_VERSION_PATCH 0 | ||
17 | |||
18 | enum { | ||
19 | GDLM_PLOCK_OP_LOCK = 1, | ||
20 | GDLM_PLOCK_OP_UNLOCK, | ||
21 | GDLM_PLOCK_OP_GET, | ||
22 | }; | ||
23 | |||
24 | struct gdlm_plock_info { | ||
25 | __u32 version[3]; | ||
26 | __u8 optype; | ||
27 | __u8 ex; | ||
28 | __u8 wait; | ||
29 | __u8 pad; | ||
30 | __u32 pid; | ||
31 | __s32 nodeid; | ||
32 | __s32 rv; | ||
33 | __u32 fsid; | ||
34 | __u64 number; | ||
35 | __u64 start; | ||
36 | __u64 end; | ||
37 | __u64 owner; | ||
38 | }; | ||
39 | |||
40 | #endif | ||
41 | |||
diff --git a/include/linux/lockd/bind.h b/include/linux/lockd/bind.h index 81e3a185f951..aa50d89eacd7 100644 --- a/include/linux/lockd/bind.h +++ b/include/linux/lockd/bind.h | |||
@@ -10,6 +10,11 @@ | |||
10 | #define LINUX_LOCKD_BIND_H | 10 | #define LINUX_LOCKD_BIND_H |
11 | 11 | ||
12 | #include <linux/lockd/nlm.h> | 12 | #include <linux/lockd/nlm.h> |
13 | /* need xdr-encoded error codes too, so... */ | ||
14 | #include <linux/lockd/xdr.h> | ||
15 | #ifdef CONFIG_LOCKD_V4 | ||
16 | #include <linux/lockd/xdr4.h> | ||
17 | #endif | ||
13 | 18 | ||
14 | /* Dummy declarations */ | 19 | /* Dummy declarations */ |
15 | struct svc_rqst; | 20 | struct svc_rqst; |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index 47b7dbd647a6..862d9730a60d 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -37,17 +37,15 @@ | |||
37 | * Lockd host handle (used both by the client and server personality). | 37 | * Lockd host handle (used both by the client and server personality). |
38 | */ | 38 | */ |
39 | struct nlm_host { | 39 | struct nlm_host { |
40 | struct nlm_host * h_next; /* linked list (hash table) */ | 40 | struct hlist_node h_hash; /* doubly linked list */ |
41 | struct sockaddr_in h_addr; /* peer address */ | 41 | struct sockaddr_in h_addr; /* peer address */ |
42 | struct rpc_clnt * h_rpcclnt; /* RPC client to talk to peer */ | 42 | struct rpc_clnt * h_rpcclnt; /* RPC client to talk to peer */ |
43 | char h_name[20]; /* remote hostname */ | 43 | char * h_name; /* remote hostname */ |
44 | u32 h_version; /* interface version */ | 44 | u32 h_version; /* interface version */ |
45 | unsigned short h_proto; /* transport proto */ | 45 | unsigned short h_proto; /* transport proto */ |
46 | unsigned short h_reclaiming : 1, | 46 | unsigned short h_reclaiming : 1, |
47 | h_server : 1, /* server side, not client side */ | 47 | h_server : 1, /* server side, not client side */ |
48 | h_inuse : 1, | 48 | h_inuse : 1; |
49 | h_killed : 1, | ||
50 | h_monitored : 1; | ||
51 | wait_queue_head_t h_gracewait; /* wait while reclaiming */ | 49 | wait_queue_head_t h_gracewait; /* wait while reclaiming */ |
52 | struct rw_semaphore h_rwsem; /* Reboot recovery lock */ | 50 | struct rw_semaphore h_rwsem; /* Reboot recovery lock */ |
53 | u32 h_state; /* pseudo-state counter */ | 51 | u32 h_state; /* pseudo-state counter */ |
@@ -61,6 +59,16 @@ struct nlm_host { | |||
61 | spinlock_t h_lock; | 59 | spinlock_t h_lock; |
62 | struct list_head h_granted; /* Locks in GRANTED state */ | 60 | struct list_head h_granted; /* Locks in GRANTED state */ |
63 | struct list_head h_reclaim; /* Locks in RECLAIM state */ | 61 | struct list_head h_reclaim; /* Locks in RECLAIM state */ |
62 | struct nsm_handle * h_nsmhandle; /* NSM status handle */ | ||
63 | }; | ||
64 | |||
65 | struct nsm_handle { | ||
66 | struct list_head sm_link; | ||
67 | atomic_t sm_count; | ||
68 | char * sm_name; | ||
69 | struct sockaddr_in sm_addr; | ||
70 | unsigned int sm_monitored : 1, | ||
71 | sm_sticky : 1; /* don't unmonitor */ | ||
64 | }; | 72 | }; |
65 | 73 | ||
66 | /* | 74 | /* |
@@ -96,15 +104,14 @@ struct nlm_rqst { | |||
96 | * an NFS client. | 104 | * an NFS client. |
97 | */ | 105 | */ |
98 | struct nlm_file { | 106 | struct nlm_file { |
99 | struct nlm_file * f_next; /* linked list */ | 107 | struct hlist_node f_list; /* linked list */ |
100 | struct nfs_fh f_handle; /* NFS file handle */ | 108 | struct nfs_fh f_handle; /* NFS file handle */ |
101 | struct file * f_file; /* VFS file pointer */ | 109 | struct file * f_file; /* VFS file pointer */ |
102 | struct nlm_share * f_shares; /* DOS shares */ | 110 | struct nlm_share * f_shares; /* DOS shares */ |
103 | struct nlm_block * f_blocks; /* blocked locks */ | 111 | struct list_head f_blocks; /* blocked locks */ |
104 | unsigned int f_locks; /* guesstimate # of locks */ | 112 | unsigned int f_locks; /* guesstimate # of locks */ |
105 | unsigned int f_count; /* reference count */ | 113 | unsigned int f_count; /* reference count */ |
106 | struct semaphore f_sema; /* avoid concurrent access */ | 114 | struct mutex f_mutex; /* avoid concurrent access */ |
107 | int f_hash; /* hash of f_handle */ | ||
108 | }; | 115 | }; |
109 | 116 | ||
110 | /* | 117 | /* |
@@ -114,26 +121,18 @@ struct nlm_file { | |||
114 | #define NLM_NEVER (~(unsigned long) 0) | 121 | #define NLM_NEVER (~(unsigned long) 0) |
115 | struct nlm_block { | 122 | struct nlm_block { |
116 | struct kref b_count; /* Reference count */ | 123 | struct kref b_count; /* Reference count */ |
117 | struct nlm_block * b_next; /* linked list (all blocks) */ | 124 | struct list_head b_list; /* linked list of all blocks */ |
118 | struct nlm_block * b_fnext; /* linked list (per file) */ | 125 | struct list_head b_flist; /* linked list (per file) */ |
119 | struct nlm_rqst * b_call; /* RPC args & callback info */ | 126 | struct nlm_rqst * b_call; /* RPC args & callback info */ |
120 | struct svc_serv * b_daemon; /* NLM service */ | 127 | struct svc_serv * b_daemon; /* NLM service */ |
121 | struct nlm_host * b_host; /* host handle for RPC clnt */ | 128 | struct nlm_host * b_host; /* host handle for RPC clnt */ |
122 | unsigned long b_when; /* next re-xmit */ | 129 | unsigned long b_when; /* next re-xmit */ |
123 | unsigned int b_id; /* block id */ | 130 | unsigned int b_id; /* block id */ |
124 | unsigned char b_queued; /* re-queued */ | ||
125 | unsigned char b_granted; /* VFS granted lock */ | 131 | unsigned char b_granted; /* VFS granted lock */ |
126 | struct nlm_file * b_file; /* file in question */ | 132 | struct nlm_file * b_file; /* file in question */ |
127 | }; | 133 | }; |
128 | 134 | ||
129 | /* | 135 | /* |
130 | * Valid actions for nlmsvc_traverse_files | ||
131 | */ | ||
132 | #define NLM_ACT_CHECK 0 /* check for locks */ | ||
133 | #define NLM_ACT_MARK 1 /* mark & sweep */ | ||
134 | #define NLM_ACT_UNLOCK 2 /* release all locks */ | ||
135 | |||
136 | /* | ||
137 | * Global variables | 136 | * Global variables |
138 | */ | 137 | */ |
139 | extern struct rpc_program nlm_program; | 138 | extern struct rpc_program nlm_program; |
@@ -143,6 +142,7 @@ extern struct svc_procedure nlmsvc_procedures4[]; | |||
143 | #endif | 142 | #endif |
144 | extern int nlmsvc_grace_period; | 143 | extern int nlmsvc_grace_period; |
145 | extern unsigned long nlmsvc_timeout; | 144 | extern unsigned long nlmsvc_timeout; |
145 | extern int nsm_use_hostnames; | ||
146 | 146 | ||
147 | /* | 147 | /* |
148 | * Lockd client functions | 148 | * Lockd client functions |
@@ -154,42 +154,51 @@ int nlm_async_reply(struct nlm_rqst *, u32, const struct rpc_call_ops *); | |||
154 | struct nlm_wait * nlmclnt_prepare_block(struct nlm_host *host, struct file_lock *fl); | 154 | struct nlm_wait * nlmclnt_prepare_block(struct nlm_host *host, struct file_lock *fl); |
155 | void nlmclnt_finish_block(struct nlm_wait *block); | 155 | void nlmclnt_finish_block(struct nlm_wait *block); |
156 | int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout); | 156 | int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout); |
157 | u32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *); | 157 | __be32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *); |
158 | void nlmclnt_recovery(struct nlm_host *, u32); | 158 | void nlmclnt_recovery(struct nlm_host *); |
159 | int nlmclnt_reclaim(struct nlm_host *, struct file_lock *); | 159 | int nlmclnt_reclaim(struct nlm_host *, struct file_lock *); |
160 | void nlmclnt_next_cookie(struct nlm_cookie *); | ||
160 | 161 | ||
161 | /* | 162 | /* |
162 | * Host cache | 163 | * Host cache |
163 | */ | 164 | */ |
164 | struct nlm_host * nlmclnt_lookup_host(struct sockaddr_in *, int, int); | 165 | struct nlm_host * nlmclnt_lookup_host(const struct sockaddr_in *, int, int, const char *, int); |
165 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *); | 166 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *, const char *, int); |
166 | struct nlm_host * nlm_lookup_host(int server, struct sockaddr_in *, int, int); | 167 | struct nlm_host * nlm_lookup_host(int server, const struct sockaddr_in *, int, int, const char *, int); |
167 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); | 168 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); |
168 | void nlm_rebind_host(struct nlm_host *); | 169 | void nlm_rebind_host(struct nlm_host *); |
169 | struct nlm_host * nlm_get_host(struct nlm_host *); | 170 | struct nlm_host * nlm_get_host(struct nlm_host *); |
170 | void nlm_release_host(struct nlm_host *); | 171 | void nlm_release_host(struct nlm_host *); |
171 | void nlm_shutdown_hosts(void); | 172 | void nlm_shutdown_hosts(void); |
172 | extern struct nlm_host *nlm_find_client(void); | 173 | extern void nlm_host_rebooted(const struct sockaddr_in *, const char *, int, u32); |
174 | struct nsm_handle *nsm_find(const struct sockaddr_in *, const char *, int); | ||
175 | void nsm_release(struct nsm_handle *); | ||
176 | |||
173 | 177 | ||
178 | /* | ||
179 | * This is used in garbage collection and resource reclaim | ||
180 | * A return value != 0 means destroy the lock/block/share | ||
181 | */ | ||
182 | typedef int (*nlm_host_match_fn_t)(struct nlm_host *cur, struct nlm_host *ref); | ||
174 | 183 | ||
175 | /* | 184 | /* |
176 | * Server-side lock handling | 185 | * Server-side lock handling |
177 | */ | 186 | */ |
178 | u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, | 187 | __be32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, |
179 | struct nlm_lock *, int, struct nlm_cookie *); | 188 | struct nlm_lock *, int, struct nlm_cookie *); |
180 | u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); | 189 | __be32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); |
181 | u32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *, | 190 | __be32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *, |
182 | struct nlm_lock *); | 191 | struct nlm_lock *); |
183 | u32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *); | 192 | __be32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *); |
184 | unsigned long nlmsvc_retry_blocked(void); | 193 | unsigned long nlmsvc_retry_blocked(void); |
185 | void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *, | 194 | void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *, |
186 | int action); | 195 | nlm_host_match_fn_t match); |
187 | void nlmsvc_grant_reply(struct svc_rqst *, struct nlm_cookie *, u32); | 196 | void nlmsvc_grant_reply(struct nlm_cookie *, u32); |
188 | 197 | ||
189 | /* | 198 | /* |
190 | * File handling for the server personality | 199 | * File handling for the server personality |
191 | */ | 200 | */ |
192 | u32 nlm_lookup_file(struct svc_rqst *, struct nlm_file **, | 201 | __be32 nlm_lookup_file(struct svc_rqst *, struct nlm_file **, |
193 | struct nfs_fh *); | 202 | struct nfs_fh *); |
194 | void nlm_release_file(struct nlm_file *); | 203 | void nlm_release_file(struct nlm_file *); |
195 | void nlmsvc_mark_resources(void); | 204 | void nlmsvc_mark_resources(void); |
diff --git a/include/linux/lockd/share.h b/include/linux/lockd/share.h index c75a424ebe4c..630c5bf69b07 100644 --- a/include/linux/lockd/share.h +++ b/include/linux/lockd/share.h | |||
@@ -21,10 +21,11 @@ struct nlm_share { | |||
21 | u32 s_mode; /* deny mode */ | 21 | u32 s_mode; /* deny mode */ |
22 | }; | 22 | }; |
23 | 23 | ||
24 | u32 nlmsvc_share_file(struct nlm_host *, struct nlm_file *, | 24 | __be32 nlmsvc_share_file(struct nlm_host *, struct nlm_file *, |
25 | struct nlm_args *); | 25 | struct nlm_args *); |
26 | u32 nlmsvc_unshare_file(struct nlm_host *, struct nlm_file *, | 26 | __be32 nlmsvc_unshare_file(struct nlm_host *, struct nlm_file *, |
27 | struct nlm_args *); | 27 | struct nlm_args *); |
28 | void nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *, int); | 28 | void nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *, |
29 | nlm_host_match_fn_t); | ||
29 | 30 | ||
30 | #endif /* LINUX_LOCKD_SHARE_H */ | 31 | #endif /* LINUX_LOCKD_SHARE_H */ |
diff --git a/include/linux/lockd/sm_inter.h b/include/linux/lockd/sm_inter.h index 1080bb6ae315..fc61d40964da 100644 --- a/include/linux/lockd/sm_inter.h +++ b/include/linux/lockd/sm_inter.h | |||
@@ -28,7 +28,8 @@ struct nsm_args { | |||
28 | u32 prog; /* RPC callback info */ | 28 | u32 prog; /* RPC callback info */ |
29 | u32 vers; | 29 | u32 vers; |
30 | u32 proc; | 30 | u32 proc; |
31 | u32 proto; /* protocol (udp/tcp) plus server/client flag */ | 31 | |
32 | char * mon_name; | ||
32 | }; | 33 | }; |
33 | 34 | ||
34 | /* | 35 | /* |
@@ -41,6 +42,6 @@ struct nsm_res { | |||
41 | 42 | ||
42 | int nsm_monitor(struct nlm_host *); | 43 | int nsm_monitor(struct nlm_host *); |
43 | int nsm_unmonitor(struct nlm_host *); | 44 | int nsm_unmonitor(struct nlm_host *); |
44 | extern u32 nsm_local_state; | 45 | extern int nsm_local_state; |
45 | 46 | ||
46 | #endif /* LINUX_LOCKD_SM_INTER_H */ | 47 | #endif /* LINUX_LOCKD_SM_INTER_H */ |
diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h index bb0a0f1caa91..29e7d9fc9dad 100644 --- a/include/linux/lockd/xdr.h +++ b/include/linux/lockd/xdr.h | |||
@@ -13,6 +13,8 @@ | |||
13 | #include <linux/nfs.h> | 13 | #include <linux/nfs.h> |
14 | #include <linux/sunrpc/xdr.h> | 14 | #include <linux/sunrpc/xdr.h> |
15 | 15 | ||
16 | struct svc_rqst; | ||
17 | |||
16 | #define NLM_MAXCOOKIELEN 32 | 18 | #define NLM_MAXCOOKIELEN 32 |
17 | #define NLM_MAXSTRLEN 1024 | 19 | #define NLM_MAXSTRLEN 1024 |
18 | 20 | ||
@@ -22,6 +24,8 @@ | |||
22 | #define nlm_lck_blocked __constant_htonl(NLM_LCK_BLOCKED) | 24 | #define nlm_lck_blocked __constant_htonl(NLM_LCK_BLOCKED) |
23 | #define nlm_lck_denied_grace_period __constant_htonl(NLM_LCK_DENIED_GRACE_PERIOD) | 25 | #define nlm_lck_denied_grace_period __constant_htonl(NLM_LCK_DENIED_GRACE_PERIOD) |
24 | 26 | ||
27 | #define nlm_drop_reply __constant_htonl(30000) | ||
28 | |||
25 | /* Lock info passed via NLM */ | 29 | /* Lock info passed via NLM */ |
26 | struct nlm_lock { | 30 | struct nlm_lock { |
27 | char * caller; | 31 | char * caller; |
@@ -86,19 +90,19 @@ struct nlm_reboot { | |||
86 | */ | 90 | */ |
87 | #define NLMSVC_XDRSIZE sizeof(struct nlm_args) | 91 | #define NLMSVC_XDRSIZE sizeof(struct nlm_args) |
88 | 92 | ||
89 | int nlmsvc_decode_testargs(struct svc_rqst *, u32 *, struct nlm_args *); | 93 | int nlmsvc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
90 | int nlmsvc_encode_testres(struct svc_rqst *, u32 *, struct nlm_res *); | 94 | int nlmsvc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *); |
91 | int nlmsvc_decode_lockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 95 | int nlmsvc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
92 | int nlmsvc_decode_cancargs(struct svc_rqst *, u32 *, struct nlm_args *); | 96 | int nlmsvc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
93 | int nlmsvc_decode_unlockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 97 | int nlmsvc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
94 | int nlmsvc_encode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 98 | int nlmsvc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
95 | int nlmsvc_decode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 99 | int nlmsvc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
96 | int nlmsvc_encode_void(struct svc_rqst *, u32 *, void *); | 100 | int nlmsvc_encode_void(struct svc_rqst *, __be32 *, void *); |
97 | int nlmsvc_decode_void(struct svc_rqst *, u32 *, void *); | 101 | int nlmsvc_decode_void(struct svc_rqst *, __be32 *, void *); |
98 | int nlmsvc_decode_shareargs(struct svc_rqst *, u32 *, struct nlm_args *); | 102 | int nlmsvc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
99 | int nlmsvc_encode_shareres(struct svc_rqst *, u32 *, struct nlm_res *); | 103 | int nlmsvc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *); |
100 | int nlmsvc_decode_notify(struct svc_rqst *, u32 *, struct nlm_args *); | 104 | int nlmsvc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *); |
101 | int nlmsvc_decode_reboot(struct svc_rqst *, u32 *, struct nlm_reboot *); | 105 | int nlmsvc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *); |
102 | /* | 106 | /* |
103 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 107 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
104 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 108 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
diff --git a/include/linux/lockd/xdr4.h b/include/linux/lockd/xdr4.h index 3cc1ae25009b..dd12b4c9e613 100644 --- a/include/linux/lockd/xdr4.h +++ b/include/linux/lockd/xdr4.h | |||
@@ -23,19 +23,19 @@ | |||
23 | 23 | ||
24 | 24 | ||
25 | 25 | ||
26 | int nlm4svc_decode_testargs(struct svc_rqst *, u32 *, struct nlm_args *); | 26 | int nlm4svc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
27 | int nlm4svc_encode_testres(struct svc_rqst *, u32 *, struct nlm_res *); | 27 | int nlm4svc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *); |
28 | int nlm4svc_decode_lockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 28 | int nlm4svc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
29 | int nlm4svc_decode_cancargs(struct svc_rqst *, u32 *, struct nlm_args *); | 29 | int nlm4svc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
30 | int nlm4svc_decode_unlockargs(struct svc_rqst *, u32 *, struct nlm_args *); | 30 | int nlm4svc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
31 | int nlm4svc_encode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 31 | int nlm4svc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
32 | int nlm4svc_decode_res(struct svc_rqst *, u32 *, struct nlm_res *); | 32 | int nlm4svc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *); |
33 | int nlm4svc_encode_void(struct svc_rqst *, u32 *, void *); | 33 | int nlm4svc_encode_void(struct svc_rqst *, __be32 *, void *); |
34 | int nlm4svc_decode_void(struct svc_rqst *, u32 *, void *); | 34 | int nlm4svc_decode_void(struct svc_rqst *, __be32 *, void *); |
35 | int nlm4svc_decode_shareargs(struct svc_rqst *, u32 *, struct nlm_args *); | 35 | int nlm4svc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *); |
36 | int nlm4svc_encode_shareres(struct svc_rqst *, u32 *, struct nlm_res *); | 36 | int nlm4svc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *); |
37 | int nlm4svc_decode_notify(struct svc_rqst *, u32 *, struct nlm_args *); | 37 | int nlm4svc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *); |
38 | int nlm4svc_decode_reboot(struct svc_rqst *, u32 *, struct nlm_reboot *); | 38 | int nlm4svc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *); |
39 | /* | 39 | /* |
40 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 40 | int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
41 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 41 | int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 1314ca0f29be..819f08f1310d 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -202,7 +202,7 @@ extern int lockdep_internal(void); | |||
202 | */ | 202 | */ |
203 | 203 | ||
204 | extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | 204 | extern void lockdep_init_map(struct lockdep_map *lock, const char *name, |
205 | struct lock_class_key *key); | 205 | struct lock_class_key *key, int subclass); |
206 | 206 | ||
207 | /* | 207 | /* |
208 | * Reinitialize a lock key - for cases where there is special locking or | 208 | * Reinitialize a lock key - for cases where there is special locking or |
@@ -211,9 +211,14 @@ extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | |||
211 | * or they are too narrow (they suffer from a false class-split): | 211 | * or they are too narrow (they suffer from a false class-split): |
212 | */ | 212 | */ |
213 | #define lockdep_set_class(lock, key) \ | 213 | #define lockdep_set_class(lock, key) \ |
214 | lockdep_init_map(&(lock)->dep_map, #key, key) | 214 | lockdep_init_map(&(lock)->dep_map, #key, key, 0) |
215 | #define lockdep_set_class_and_name(lock, key, name) \ | 215 | #define lockdep_set_class_and_name(lock, key, name) \ |
216 | lockdep_init_map(&(lock)->dep_map, name, key) | 216 | lockdep_init_map(&(lock)->dep_map, name, key, 0) |
217 | #define lockdep_set_class_and_subclass(lock, key, sub) \ | ||
218 | lockdep_init_map(&(lock)->dep_map, #key, key, sub) | ||
219 | #define lockdep_set_subclass(lock, sub) \ | ||
220 | lockdep_init_map(&(lock)->dep_map, #lock, \ | ||
221 | (lock)->dep_map.key, sub) | ||
217 | 222 | ||
218 | /* | 223 | /* |
219 | * Acquire a lock. | 224 | * Acquire a lock. |
@@ -257,10 +262,14 @@ static inline int lockdep_internal(void) | |||
257 | # define lock_release(l, n, i) do { } while (0) | 262 | # define lock_release(l, n, i) do { } while (0) |
258 | # define lockdep_init() do { } while (0) | 263 | # define lockdep_init() do { } while (0) |
259 | # define lockdep_info() do { } while (0) | 264 | # define lockdep_info() do { } while (0) |
260 | # define lockdep_init_map(lock, name, key) do { (void)(key); } while (0) | 265 | # define lockdep_init_map(lock, name, key, sub) do { (void)(key); } while (0) |
261 | # define lockdep_set_class(lock, key) do { (void)(key); } while (0) | 266 | # define lockdep_set_class(lock, key) do { (void)(key); } while (0) |
262 | # define lockdep_set_class_and_name(lock, key, name) \ | 267 | # define lockdep_set_class_and_name(lock, key, name) \ |
263 | do { (void)(key); } while (0) | 268 | do { (void)(key); } while (0) |
269 | #define lockdep_set_class_and_subclass(lock, key, sub) \ | ||
270 | do { (void)(key); } while (0) | ||
271 | #define lockdep_set_subclass(lock, sub) do { } while (0) | ||
272 | |||
264 | # define INIT_LOCKDEP | 273 | # define INIT_LOCKDEP |
265 | # define lockdep_reset() do { debug_locks = 1; } while (0) | 274 | # define lockdep_reset() do { debug_locks = 1; } while (0) |
266 | # define lockdep_free_key_range(start, size) do { } while (0) | 275 | # define lockdep_free_key_range(start, size) do { } while (0) |
diff --git a/include/linux/magic.h b/include/linux/magic.h index 22036dd2ba36..156c40fc664e 100644 --- a/include/linux/magic.h +++ b/include/linux/magic.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #define EFS_SUPER_MAGIC 0x414A53 | 8 | #define EFS_SUPER_MAGIC 0x414A53 |
9 | #define EXT2_SUPER_MAGIC 0xEF53 | 9 | #define EXT2_SUPER_MAGIC 0xEF53 |
10 | #define EXT3_SUPER_MAGIC 0xEF53 | 10 | #define EXT3_SUPER_MAGIC 0xEF53 |
11 | #define EXT4_SUPER_MAGIC 0xEF53 | ||
11 | #define HPFS_SUPER_MAGIC 0xf995e849 | 12 | #define HPFS_SUPER_MAGIC 0xf995e849 |
12 | #define ISOFS_SUPER_MAGIC 0x9660 | 13 | #define ISOFS_SUPER_MAGIC 0x9660 |
13 | #define JFFS2_SUPER_MAGIC 0x72b6 | 14 | #define JFFS2_SUPER_MAGIC 0x72b6 |
diff --git a/include/linux/mm.h b/include/linux/mm.h index b7966ab8cb6a..d538de901965 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -593,6 +593,7 @@ static inline int page_mapped(struct page *page) | |||
593 | */ | 593 | */ |
594 | #define NOPAGE_SIGBUS (NULL) | 594 | #define NOPAGE_SIGBUS (NULL) |
595 | #define NOPAGE_OOM ((struct page *) (-1)) | 595 | #define NOPAGE_OOM ((struct page *) (-1)) |
596 | #define NOPAGE_REFAULT ((struct page *) (-2)) /* Return to userspace, rerun */ | ||
596 | 597 | ||
597 | /* | 598 | /* |
598 | * Error return values for the *_nopfn functions | 599 | * Error return values for the *_nopfn functions |
@@ -1102,12 +1103,7 @@ static inline void vm_stat_account(struct mm_struct *mm, | |||
1102 | 1103 | ||
1103 | #ifndef CONFIG_DEBUG_PAGEALLOC | 1104 | #ifndef CONFIG_DEBUG_PAGEALLOC |
1104 | static inline void | 1105 | static inline void |
1105 | kernel_map_pages(struct page *page, int numpages, int enable) | 1106 | kernel_map_pages(struct page *page, int numpages, int enable) {} |
1106 | { | ||
1107 | if (!PageHighMem(page) && !enable) | ||
1108 | debug_check_no_locks_freed(page_address(page), | ||
1109 | numpages * PAGE_SIZE); | ||
1110 | } | ||
1111 | #endif | 1107 | #endif |
1112 | 1108 | ||
1113 | extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk); | 1109 | extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk); |
@@ -1119,9 +1115,6 @@ int in_gate_area_no_task(unsigned long addr); | |||
1119 | #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) | 1115 | #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) |
1120 | #endif /* __HAVE_ARCH_GATE_AREA */ | 1116 | #endif /* __HAVE_ARCH_GATE_AREA */ |
1121 | 1117 | ||
1122 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ | ||
1123 | #define OOM_DISABLE -17 | ||
1124 | |||
1125 | int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, | 1118 | int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, |
1126 | void __user *, size_t *, loff_t *); | 1119 | void __user *, size_t *, loff_t *); |
1127 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, | 1120 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, |
diff --git a/include/linux/mmc/protocol.h b/include/linux/mmc/protocol.h index 81c3f77f652c..08dec8d9e703 100644 --- a/include/linux/mmc/protocol.h +++ b/include/linux/mmc/protocol.h | |||
@@ -83,6 +83,7 @@ | |||
83 | 83 | ||
84 | /* Application commands */ | 84 | /* Application commands */ |
85 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ | 85 | #define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */ |
86 | #define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */ | ||
86 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ | 87 | #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ |
87 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ | 88 | #define SD_APP_SEND_SCR 51 /* adtc R1 */ |
88 | 89 | ||
diff --git a/include/linux/module.h b/include/linux/module.h index 4b2d8091a410..d1d00ce8f4ed 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -317,9 +317,6 @@ struct module | |||
317 | /* Am I unsafe to unload? */ | 317 | /* Am I unsafe to unload? */ |
318 | int unsafe; | 318 | int unsafe; |
319 | 319 | ||
320 | /* Am I GPL-compatible */ | ||
321 | int license_gplok; | ||
322 | |||
323 | unsigned int taints; /* same bits as kernel:tainted */ | 320 | unsigned int taints; /* same bits as kernel:tainted */ |
324 | 321 | ||
325 | #ifdef CONFIG_MODULE_UNLOAD | 322 | #ifdef CONFIG_MODULE_UNLOAD |
diff --git a/include/linux/msi.h b/include/linux/msi.h new file mode 100644 index 000000000000..c7ef94343673 --- /dev/null +++ b/include/linux/msi.h | |||
@@ -0,0 +1,49 @@ | |||
1 | #ifndef LINUX_MSI_H | ||
2 | #define LINUX_MSI_H | ||
3 | |||
4 | struct msi_msg { | ||
5 | u32 address_lo; /* low 32 bits of msi message address */ | ||
6 | u32 address_hi; /* high 32 bits of msi message address */ | ||
7 | u32 data; /* 16 bits of msi message data */ | ||
8 | }; | ||
9 | |||
10 | /* Heper functions */ | ||
11 | extern void mask_msi_irq(unsigned int irq); | ||
12 | extern void unmask_msi_irq(unsigned int irq); | ||
13 | extern void read_msi_msg(unsigned int irq, struct msi_msg *msg); | ||
14 | |||
15 | extern void write_msi_msg(unsigned int irq, struct msi_msg *msg); | ||
16 | |||
17 | struct msi_desc { | ||
18 | struct { | ||
19 | __u8 type : 5; /* {0: unused, 5h:MSI, 11h:MSI-X} */ | ||
20 | __u8 maskbit : 1; /* mask-pending bit supported ? */ | ||
21 | __u8 unused : 1; | ||
22 | __u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */ | ||
23 | __u8 pos; /* Location of the msi capability */ | ||
24 | __u16 entry_nr; /* specific enabled entry */ | ||
25 | unsigned default_irq; /* default pre-assigned irq */ | ||
26 | }msi_attrib; | ||
27 | |||
28 | struct { | ||
29 | __u16 head; | ||
30 | __u16 tail; | ||
31 | }link; | ||
32 | |||
33 | void __iomem *mask_base; | ||
34 | struct pci_dev *dev; | ||
35 | |||
36 | #ifdef CONFIG_PM | ||
37 | /* PM save area for MSIX address/data */ | ||
38 | struct msi_msg msg_save; | ||
39 | #endif | ||
40 | }; | ||
41 | |||
42 | /* | ||
43 | * The arch hook for setup up msi irqs | ||
44 | */ | ||
45 | int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev); | ||
46 | void arch_teardown_msi_irq(unsigned int irq); | ||
47 | |||
48 | |||
49 | #endif /* LINUX_MSI_H */ | ||
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index e712e7d47cc2..d6b6dc09ad97 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
@@ -15,6 +15,8 @@ | |||
15 | #ifndef LINUX_NBD_H | 15 | #ifndef LINUX_NBD_H |
16 | #define LINUX_NBD_H | 16 | #define LINUX_NBD_H |
17 | 17 | ||
18 | #include <linux/types.h> | ||
19 | |||
18 | #define NBD_SET_SOCK _IO( 0xab, 0 ) | 20 | #define NBD_SET_SOCK _IO( 0xab, 0 ) |
19 | #define NBD_SET_BLKSIZE _IO( 0xab, 1 ) | 21 | #define NBD_SET_BLKSIZE _IO( 0xab, 1 ) |
20 | #define NBD_SET_SIZE _IO( 0xab, 2 ) | 22 | #define NBD_SET_SIZE _IO( 0xab, 2 ) |
diff --git a/include/linux/net.h b/include/linux/net.h index c257f716e00f..15c733b816f0 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #define _LINUX_NET_H | 19 | #define _LINUX_NET_H |
20 | 20 | ||
21 | #include <linux/wait.h> | 21 | #include <linux/wait.h> |
22 | #include <linux/random.h> | ||
22 | #include <asm/socket.h> | 23 | #include <asm/socket.h> |
23 | 24 | ||
24 | struct poll_table_struct; | 25 | struct poll_table_struct; |
@@ -193,9 +194,9 @@ extern int sock_map_fd(struct socket *sock); | |||
193 | extern struct socket *sockfd_lookup(int fd, int *err); | 194 | extern struct socket *sockfd_lookup(int fd, int *err); |
194 | #define sockfd_put(sock) fput(sock->file) | 195 | #define sockfd_put(sock) fput(sock->file) |
195 | extern int net_ratelimit(void); | 196 | extern int net_ratelimit(void); |
196 | extern unsigned long net_random(void); | 197 | |
197 | extern void net_srandom(unsigned long); | 198 | #define net_random() random32() |
198 | extern void net_random_init(void); | 199 | #define net_srandom(seed) srandom32(seed) |
199 | 200 | ||
200 | extern int kernel_sendmsg(struct socket *sock, struct msghdr *msg, | 201 | extern int kernel_sendmsg(struct socket *sock, struct msghdr *msg, |
201 | struct kvec *vec, size_t num, size_t len); | 202 | struct kvec *vec, size_t num, size_t len); |
diff --git a/include/linux/netfilter_bridge/ebt_mark_t.h b/include/linux/netfilter_bridge/ebt_mark_t.h index 110fec6a40a2..6270f6f33693 100644 --- a/include/linux/netfilter_bridge/ebt_mark_t.h +++ b/include/linux/netfilter_bridge/ebt_mark_t.h | |||
@@ -1,6 +1,18 @@ | |||
1 | #ifndef __LINUX_BRIDGE_EBT_MARK_T_H | 1 | #ifndef __LINUX_BRIDGE_EBT_MARK_T_H |
2 | #define __LINUX_BRIDGE_EBT_MARK_T_H | 2 | #define __LINUX_BRIDGE_EBT_MARK_T_H |
3 | 3 | ||
4 | /* The target member is reused for adding new actions, the | ||
5 | * value of the real target is -1 to -NUM_STANDARD_TARGETS. | ||
6 | * For backward compatibility, the 4 lsb (2 would be enough, | ||
7 | * but let's play it safe) are kept to designate this target. | ||
8 | * The remaining bits designate the action. By making the set | ||
9 | * action 0xfffffff0, the result will look ok for older | ||
10 | * versions. [September 2006] */ | ||
11 | #define MARK_SET_VALUE (0xfffffff0) | ||
12 | #define MARK_OR_VALUE (0xffffffe0) | ||
13 | #define MARK_AND_VALUE (0xffffffd0) | ||
14 | #define MARK_XOR_VALUE (0xffffffc0) | ||
15 | |||
4 | struct ebt_mark_t_info | 16 | struct ebt_mark_t_info |
5 | { | 17 | { |
6 | unsigned long mark; | 18 | unsigned long mark; |
diff --git a/include/linux/netfilter_ipv4.h b/include/linux/netfilter_ipv4.h index ce02c984f3ba..5b63a231a76b 100644 --- a/include/linux/netfilter_ipv4.h +++ b/include/linux/netfilter_ipv4.h | |||
@@ -77,7 +77,7 @@ enum nf_ip_hook_priorities { | |||
77 | #define SO_ORIGINAL_DST 80 | 77 | #define SO_ORIGINAL_DST 80 |
78 | 78 | ||
79 | #ifdef __KERNEL__ | 79 | #ifdef __KERNEL__ |
80 | extern int ip_route_me_harder(struct sk_buff **pskb); | 80 | extern int ip_route_me_harder(struct sk_buff **pskb, unsigned addr_type); |
81 | extern int ip_xfrm_me_harder(struct sk_buff **pskb); | 81 | extern int ip_xfrm_me_harder(struct sk_buff **pskb); |
82 | extern unsigned int nf_ip_checksum(struct sk_buff *skb, unsigned int hook, | 82 | extern unsigned int nf_ip_checksum(struct sk_buff *skb, unsigned int hook, |
83 | unsigned int dataoff, u_int8_t protocol); | 83 | unsigned int dataoff, u_int8_t protocol); |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 76ff54846ada..45228c1a1195 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -157,7 +157,7 @@ struct nfs_inode { | |||
157 | * This is the cookie verifier used for NFSv3 readdir | 157 | * This is the cookie verifier used for NFSv3 readdir |
158 | * operations | 158 | * operations |
159 | */ | 159 | */ |
160 | __u32 cookieverf[2]; | 160 | __be32 cookieverf[2]; |
161 | 161 | ||
162 | /* | 162 | /* |
163 | * This is the list of dirty unwritten pages. | 163 | * This is the list of dirty unwritten pages. |
@@ -290,6 +290,7 @@ static inline int nfs_verify_change_attribute(struct inode *inode, unsigned long | |||
290 | * linux/fs/nfs/inode.c | 290 | * linux/fs/nfs/inode.c |
291 | */ | 291 | */ |
292 | extern int nfs_sync_mapping(struct address_space *mapping); | 292 | extern int nfs_sync_mapping(struct address_space *mapping); |
293 | extern void nfs_zap_mapping(struct inode *inode, struct address_space *mapping); | ||
293 | extern void nfs_zap_caches(struct inode *); | 294 | extern void nfs_zap_caches(struct inode *); |
294 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, | 295 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, |
295 | struct nfs_fattr *); | 296 | struct nfs_fattr *); |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index dc5397d9d23c..768c1ad5ff6f 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -266,7 +266,7 @@ struct nfs_writeargs { | |||
266 | 266 | ||
267 | struct nfs_writeverf { | 267 | struct nfs_writeverf { |
268 | enum nfs3_stable_how committed; | 268 | enum nfs3_stable_how committed; |
269 | __u32 verifier[2]; | 269 | __be32 verifier[2]; |
270 | }; | 270 | }; |
271 | 271 | ||
272 | struct nfs_writeres { | 272 | struct nfs_writeres { |
@@ -420,7 +420,7 @@ struct nfs3_createargs { | |||
420 | unsigned int len; | 420 | unsigned int len; |
421 | struct iattr * sattr; | 421 | struct iattr * sattr; |
422 | enum nfs3_createmode createmode; | 422 | enum nfs3_createmode createmode; |
423 | __u32 verifier[2]; | 423 | __be32 verifier[2]; |
424 | }; | 424 | }; |
425 | 425 | ||
426 | struct nfs3_mkdirargs { | 426 | struct nfs3_mkdirargs { |
@@ -467,7 +467,7 @@ struct nfs3_linkargs { | |||
467 | struct nfs3_readdirargs { | 467 | struct nfs3_readdirargs { |
468 | struct nfs_fh * fh; | 468 | struct nfs_fh * fh; |
469 | __u64 cookie; | 469 | __u64 cookie; |
470 | __u32 verf[2]; | 470 | __be32 verf[2]; |
471 | int plus; | 471 | int plus; |
472 | unsigned int count; | 472 | unsigned int count; |
473 | struct page ** pages; | 473 | struct page ** pages; |
@@ -503,7 +503,7 @@ struct nfs3_linkres { | |||
503 | 503 | ||
504 | struct nfs3_readdirres { | 504 | struct nfs3_readdirres { |
505 | struct nfs_fattr * dir_attr; | 505 | struct nfs_fattr * dir_attr; |
506 | __u32 * verf; | 506 | __be32 * verf; |
507 | int plus; | 507 | int plus; |
508 | }; | 508 | }; |
509 | 509 | ||
@@ -811,7 +811,7 @@ struct nfs_rpc_ops { | |||
811 | int (*pathconf) (struct nfs_server *, struct nfs_fh *, | 811 | int (*pathconf) (struct nfs_server *, struct nfs_fh *, |
812 | struct nfs_pathconf *); | 812 | struct nfs_pathconf *); |
813 | int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); | 813 | int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); |
814 | u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); | 814 | __be32 *(*decode_dirent)(__be32 *, struct nfs_entry *, int plus); |
815 | void (*read_setup) (struct nfs_read_data *); | 815 | void (*read_setup) (struct nfs_read_data *); |
816 | int (*read_done) (struct rpc_task *, struct nfs_read_data *); | 816 | int (*read_done) (struct rpc_task *, struct nfs_read_data *); |
817 | void (*write_setup) (struct nfs_write_data *, int how); | 817 | void (*write_setup) (struct nfs_write_data *, int how); |
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h index c3a3557c2a5b..007480cd6a60 100644 --- a/include/linux/nfsd/cache.h +++ b/include/linux/nfsd/cache.h | |||
@@ -26,14 +26,14 @@ struct svc_cacherep { | |||
26 | c_type, /* status, buffer */ | 26 | c_type, /* status, buffer */ |
27 | c_secure : 1; /* req came from port < 1024 */ | 27 | c_secure : 1; /* req came from port < 1024 */ |
28 | struct sockaddr_in c_addr; | 28 | struct sockaddr_in c_addr; |
29 | u32 c_xid; | 29 | __be32 c_xid; |
30 | u32 c_prot; | 30 | u32 c_prot; |
31 | u32 c_proc; | 31 | u32 c_proc; |
32 | u32 c_vers; | 32 | u32 c_vers; |
33 | unsigned long c_timestamp; | 33 | unsigned long c_timestamp; |
34 | union { | 34 | union { |
35 | struct kvec u_vec; | 35 | struct kvec u_vec; |
36 | u32 u_status; | 36 | __be32 u_status; |
37 | } c_u; | 37 | } c_u; |
38 | }; | 38 | }; |
39 | 39 | ||
@@ -75,7 +75,7 @@ enum { | |||
75 | void nfsd_cache_init(void); | 75 | void nfsd_cache_init(void); |
76 | void nfsd_cache_shutdown(void); | 76 | void nfsd_cache_shutdown(void); |
77 | int nfsd_cache_lookup(struct svc_rqst *, int); | 77 | int nfsd_cache_lookup(struct svc_rqst *, int); |
78 | void nfsd_cache_update(struct svc_rqst *, int, u32 *); | 78 | void nfsd_cache_update(struct svc_rqst *, int, __be32 *); |
79 | 79 | ||
80 | #endif /* __KERNEL__ */ | 80 | #endif /* __KERNEL__ */ |
81 | #endif /* NFSCACHE_H */ | 81 | #endif /* NFSCACHE_H */ |
diff --git a/include/linux/nfsd/const.h b/include/linux/nfsd/const.h index b75bb1b38d09..f0cc77790527 100644 --- a/include/linux/nfsd/const.h +++ b/include/linux/nfsd/const.h | |||
@@ -20,17 +20,31 @@ | |||
20 | #define NFSSVC_MAXVERS 3 | 20 | #define NFSSVC_MAXVERS 3 |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * Maximum blocksize supported by daemon currently at 32K | 23 | * Maximum blocksizes supported by daemon under various circumstances. |
24 | */ | 24 | */ |
25 | #define NFSSVC_MAXBLKSIZE (32*1024) | 25 | #define NFSSVC_MAXBLKSIZE RPCSVC_MAXPAYLOAD |
26 | /* NFSv2 is limited by the protocol specification, see RFC 1094 */ | ||
27 | #define NFSSVC_MAXBLKSIZE_V2 (8*1024) | ||
26 | 28 | ||
27 | #ifdef __KERNEL__ | 29 | #ifdef __KERNEL__ |
28 | 30 | ||
31 | #include <linux/sunrpc/msg_prot.h> | ||
32 | |||
29 | #ifndef NFS_SUPER_MAGIC | 33 | #ifndef NFS_SUPER_MAGIC |
30 | # define NFS_SUPER_MAGIC 0x6969 | 34 | # define NFS_SUPER_MAGIC 0x6969 |
31 | #endif | 35 | #endif |
32 | 36 | ||
33 | #define NFSD_BUFSIZE (1024 + NFSSVC_MAXBLKSIZE) | 37 | /* |
38 | * Largest number of bytes we need to allocate for an NFS | ||
39 | * call or reply. Used to control buffer sizes. We use | ||
40 | * the length of v3 WRITE, READDIR and READDIR replies | ||
41 | * which are an RPC header, up to 26 XDR units of reply | ||
42 | * data, and some page data. | ||
43 | * | ||
44 | * Note that accuracy here doesn't matter too much as the | ||
45 | * size is rounded up to a page size when allocating space. | ||
46 | */ | ||
47 | #define NFSD_BUFSIZE ((RPC_MAX_HEADER_WITH_AUTH+26)*XDR_UNIT + NFSSVC_MAXBLKSIZE) | ||
34 | 48 | ||
35 | #ifdef CONFIG_NFSD_V4 | 49 | #ifdef CONFIG_NFSD_V4 |
36 | # define NFSSVC_XDRSIZE NFS4_SVC_XDRSIZE | 50 | # define NFSSVC_XDRSIZE NFS4_SVC_XDRSIZE |
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index d2a8abb5011a..045e38cdbe64 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h | |||
@@ -45,15 +45,36 @@ | |||
45 | 45 | ||
46 | #ifdef __KERNEL__ | 46 | #ifdef __KERNEL__ |
47 | 47 | ||
48 | /* | ||
49 | * FS Locations | ||
50 | */ | ||
51 | |||
52 | #define MAX_FS_LOCATIONS 128 | ||
53 | |||
54 | struct nfsd4_fs_location { | ||
55 | char *hosts; /* colon separated list of hosts */ | ||
56 | char *path; /* slash separated list of path components */ | ||
57 | }; | ||
58 | |||
59 | struct nfsd4_fs_locations { | ||
60 | uint32_t locations_count; | ||
61 | struct nfsd4_fs_location *locations; | ||
62 | /* If we're not actually serving this data ourselves (only providing a | ||
63 | * list of replicas that do serve it) then we set "migrated": */ | ||
64 | int migrated; | ||
65 | }; | ||
66 | |||
48 | struct svc_export { | 67 | struct svc_export { |
49 | struct cache_head h; | 68 | struct cache_head h; |
50 | struct auth_domain * ex_client; | 69 | struct auth_domain * ex_client; |
51 | int ex_flags; | 70 | int ex_flags; |
52 | struct vfsmount * ex_mnt; | 71 | struct vfsmount * ex_mnt; |
53 | struct dentry * ex_dentry; | 72 | struct dentry * ex_dentry; |
73 | char * ex_path; | ||
54 | uid_t ex_anon_uid; | 74 | uid_t ex_anon_uid; |
55 | gid_t ex_anon_gid; | 75 | gid_t ex_anon_gid; |
56 | int ex_fsid; | 76 | int ex_fsid; |
77 | struct nfsd4_fs_locations ex_fslocs; | ||
57 | }; | 78 | }; |
58 | 79 | ||
59 | /* an "export key" (expkey) maps a filehandlefragement to an | 80 | /* an "export key" (expkey) maps a filehandlefragement to an |
@@ -96,8 +117,8 @@ struct svc_export * exp_parent(struct auth_domain *clp, | |||
96 | struct cache_req *reqp); | 117 | struct cache_req *reqp); |
97 | int exp_rootfh(struct auth_domain *, | 118 | int exp_rootfh(struct auth_domain *, |
98 | char *path, struct knfsd_fh *, int maxsize); | 119 | char *path, struct knfsd_fh *, int maxsize); |
99 | int exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq); | 120 | __be32 exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq); |
100 | int nfserrno(int errno); | 121 | __be32 nfserrno(int errno); |
101 | 122 | ||
102 | extern struct cache_detail svc_export_cache; | 123 | extern struct cache_detail svc_export_cache; |
103 | 124 | ||
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index e1dbc86c270b..eb231143d579 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h | |||
@@ -50,7 +50,7 @@ | |||
50 | * Callback function for readdir | 50 | * Callback function for readdir |
51 | */ | 51 | */ |
52 | struct readdir_cd { | 52 | struct readdir_cd { |
53 | int err; /* 0, nfserr, or nfserr_eof */ | 53 | __be32 err; /* 0, nfserr, or nfserr_eof */ |
54 | }; | 54 | }; |
55 | typedef int (*encode_dent_fn)(struct readdir_cd *, const char *, | 55 | typedef int (*encode_dent_fn)(struct readdir_cd *, const char *, |
56 | int, loff_t, ino_t, unsigned int); | 56 | int, loff_t, ino_t, unsigned int); |
@@ -64,7 +64,7 @@ extern struct svc_serv *nfsd_serv; | |||
64 | * Function prototypes. | 64 | * Function prototypes. |
65 | */ | 65 | */ |
66 | int nfsd_svc(unsigned short port, int nrservs); | 66 | int nfsd_svc(unsigned short port, int nrservs); |
67 | int nfsd_dispatch(struct svc_rqst *rqstp, u32 *statp); | 67 | int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp); |
68 | 68 | ||
69 | /* nfsd/vfs.c */ | 69 | /* nfsd/vfs.c */ |
70 | int fh_lock_parent(struct svc_fh *, struct dentry *); | 70 | int fh_lock_parent(struct svc_fh *, struct dentry *); |
@@ -72,57 +72,57 @@ int nfsd_racache_init(int); | |||
72 | void nfsd_racache_shutdown(void); | 72 | void nfsd_racache_shutdown(void); |
73 | int nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp, | 73 | int nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp, |
74 | struct svc_export **expp); | 74 | struct svc_export **expp); |
75 | int nfsd_lookup(struct svc_rqst *, struct svc_fh *, | 75 | __be32 nfsd_lookup(struct svc_rqst *, struct svc_fh *, |
76 | const char *, int, struct svc_fh *); | 76 | const char *, int, struct svc_fh *); |
77 | int nfsd_setattr(struct svc_rqst *, struct svc_fh *, | 77 | __be32 nfsd_setattr(struct svc_rqst *, struct svc_fh *, |
78 | struct iattr *, int, time_t); | 78 | struct iattr *, int, time_t); |
79 | #ifdef CONFIG_NFSD_V4 | 79 | #ifdef CONFIG_NFSD_V4 |
80 | int nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *, | 80 | __be32 nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *, |
81 | struct nfs4_acl *); | 81 | struct nfs4_acl *); |
82 | int nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *, struct nfs4_acl **); | 82 | int nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *, struct nfs4_acl **); |
83 | #endif /* CONFIG_NFSD_V4 */ | 83 | #endif /* CONFIG_NFSD_V4 */ |
84 | int nfsd_create(struct svc_rqst *, struct svc_fh *, | 84 | __be32 nfsd_create(struct svc_rqst *, struct svc_fh *, |
85 | char *name, int len, struct iattr *attrs, | 85 | char *name, int len, struct iattr *attrs, |
86 | int type, dev_t rdev, struct svc_fh *res); | 86 | int type, dev_t rdev, struct svc_fh *res); |
87 | #ifdef CONFIG_NFSD_V3 | 87 | #ifdef CONFIG_NFSD_V3 |
88 | int nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *); | 88 | __be32 nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *); |
89 | int nfsd_create_v3(struct svc_rqst *, struct svc_fh *, | 89 | __be32 nfsd_create_v3(struct svc_rqst *, struct svc_fh *, |
90 | char *name, int len, struct iattr *attrs, | 90 | char *name, int len, struct iattr *attrs, |
91 | struct svc_fh *res, int createmode, | 91 | struct svc_fh *res, int createmode, |
92 | u32 *verifier, int *truncp); | 92 | u32 *verifier, int *truncp); |
93 | int nfsd_commit(struct svc_rqst *, struct svc_fh *, | 93 | __be32 nfsd_commit(struct svc_rqst *, struct svc_fh *, |
94 | loff_t, unsigned long); | 94 | loff_t, unsigned long); |
95 | #endif /* CONFIG_NFSD_V3 */ | 95 | #endif /* CONFIG_NFSD_V3 */ |
96 | int nfsd_open(struct svc_rqst *, struct svc_fh *, int, | 96 | __be32 nfsd_open(struct svc_rqst *, struct svc_fh *, int, |
97 | int, struct file **); | 97 | int, struct file **); |
98 | void nfsd_close(struct file *); | 98 | void nfsd_close(struct file *); |
99 | int nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, | 99 | __be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, |
100 | loff_t, struct kvec *, int, unsigned long *); | 100 | loff_t, struct kvec *, int, unsigned long *); |
101 | int nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, | 101 | __be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, |
102 | loff_t, struct kvec *,int, unsigned long, int *); | 102 | loff_t, struct kvec *,int, unsigned long, int *); |
103 | int nfsd_readlink(struct svc_rqst *, struct svc_fh *, | 103 | __be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *, |
104 | char *, int *); | 104 | char *, int *); |
105 | int nfsd_symlink(struct svc_rqst *, struct svc_fh *, | 105 | __be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *, |
106 | char *name, int len, char *path, int plen, | 106 | char *name, int len, char *path, int plen, |
107 | struct svc_fh *res, struct iattr *); | 107 | struct svc_fh *res, struct iattr *); |
108 | int nfsd_link(struct svc_rqst *, struct svc_fh *, | 108 | __be32 nfsd_link(struct svc_rqst *, struct svc_fh *, |
109 | char *, int, struct svc_fh *); | 109 | char *, int, struct svc_fh *); |
110 | int nfsd_rename(struct svc_rqst *, | 110 | __be32 nfsd_rename(struct svc_rqst *, |
111 | struct svc_fh *, char *, int, | 111 | struct svc_fh *, char *, int, |
112 | struct svc_fh *, char *, int); | 112 | struct svc_fh *, char *, int); |
113 | int nfsd_remove(struct svc_rqst *, | 113 | __be32 nfsd_remove(struct svc_rqst *, |
114 | struct svc_fh *, char *, int); | 114 | struct svc_fh *, char *, int); |
115 | int nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type, | 115 | __be32 nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type, |
116 | char *name, int len); | 116 | char *name, int len); |
117 | int nfsd_truncate(struct svc_rqst *, struct svc_fh *, | 117 | int nfsd_truncate(struct svc_rqst *, struct svc_fh *, |
118 | unsigned long size); | 118 | unsigned long size); |
119 | int nfsd_readdir(struct svc_rqst *, struct svc_fh *, | 119 | __be32 nfsd_readdir(struct svc_rqst *, struct svc_fh *, |
120 | loff_t *, struct readdir_cd *, encode_dent_fn); | 120 | loff_t *, struct readdir_cd *, encode_dent_fn); |
121 | int nfsd_statfs(struct svc_rqst *, struct svc_fh *, | 121 | __be32 nfsd_statfs(struct svc_rqst *, struct svc_fh *, |
122 | struct kstatfs *); | 122 | struct kstatfs *); |
123 | 123 | ||
124 | int nfsd_notify_change(struct inode *, struct iattr *); | 124 | int nfsd_notify_change(struct inode *, struct iattr *); |
125 | int nfsd_permission(struct svc_export *, struct dentry *, int); | 125 | __be32 nfsd_permission(struct svc_export *, struct dentry *, int); |
126 | int nfsd_sync_dir(struct dentry *dp); | 126 | int nfsd_sync_dir(struct dentry *dp); |
127 | 127 | ||
128 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) | 128 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) |
@@ -145,6 +145,7 @@ int nfsd_vers(int vers, enum vers_op change); | |||
145 | void nfsd_reset_versions(void); | 145 | void nfsd_reset_versions(void); |
146 | int nfsd_create_serv(void); | 146 | int nfsd_create_serv(void); |
147 | 147 | ||
148 | extern int nfsd_max_blksize; | ||
148 | 149 | ||
149 | /* | 150 | /* |
150 | * NFSv4 State | 151 | * NFSv4 State |
@@ -215,6 +216,7 @@ void nfsd_lockd_shutdown(void); | |||
215 | #define nfserr_clid_inuse __constant_htonl(NFSERR_CLID_INUSE) | 216 | #define nfserr_clid_inuse __constant_htonl(NFSERR_CLID_INUSE) |
216 | #define nfserr_stale_clientid __constant_htonl(NFSERR_STALE_CLIENTID) | 217 | #define nfserr_stale_clientid __constant_htonl(NFSERR_STALE_CLIENTID) |
217 | #define nfserr_resource __constant_htonl(NFSERR_RESOURCE) | 218 | #define nfserr_resource __constant_htonl(NFSERR_RESOURCE) |
219 | #define nfserr_moved __constant_htonl(NFSERR_MOVED) | ||
218 | #define nfserr_nofilehandle __constant_htonl(NFSERR_NOFILEHANDLE) | 220 | #define nfserr_nofilehandle __constant_htonl(NFSERR_NOFILEHANDLE) |
219 | #define nfserr_minor_vers_mismatch __constant_htonl(NFSERR_MINOR_VERS_MISMATCH) | 221 | #define nfserr_minor_vers_mismatch __constant_htonl(NFSERR_MINOR_VERS_MISMATCH) |
220 | #define nfserr_share_denied __constant_htonl(NFSERR_SHARE_DENIED) | 222 | #define nfserr_share_denied __constant_htonl(NFSERR_SHARE_DENIED) |
@@ -236,6 +238,7 @@ void nfsd_lockd_shutdown(void); | |||
236 | #define nfserr_badname __constant_htonl(NFSERR_BADNAME) | 238 | #define nfserr_badname __constant_htonl(NFSERR_BADNAME) |
237 | #define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN) | 239 | #define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN) |
238 | #define nfserr_locked __constant_htonl(NFSERR_LOCKED) | 240 | #define nfserr_locked __constant_htonl(NFSERR_LOCKED) |
241 | #define nfserr_replay_me __constant_htonl(NFSERR_REPLAY_ME) | ||
239 | 242 | ||
240 | /* error codes for internal use */ | 243 | /* error codes for internal use */ |
241 | /* if a request fails due to kmalloc failure, it gets dropped. | 244 | /* if a request fails due to kmalloc failure, it gets dropped. |
@@ -291,7 +294,6 @@ static inline int is_fsid(struct svc_fh *fh, struct knfsd_fh *reffh) | |||
291 | /* | 294 | /* |
292 | * The following attributes are currently not supported by the NFSv4 server: | 295 | * The following attributes are currently not supported by the NFSv4 server: |
293 | * ARCHIVE (deprecated anyway) | 296 | * ARCHIVE (deprecated anyway) |
294 | * FS_LOCATIONS (will be supported eventually) | ||
295 | * HIDDEN (unlikely to be supported any time soon) | 297 | * HIDDEN (unlikely to be supported any time soon) |
296 | * MIMETYPE (unlikely to be supported any time soon) | 298 | * MIMETYPE (unlikely to be supported any time soon) |
297 | * QUOTA_* (will be supported in a forthcoming patch) | 299 | * QUOTA_* (will be supported in a forthcoming patch) |
@@ -307,7 +309,7 @@ static inline int is_fsid(struct svc_fh *fh, struct knfsd_fh *reffh) | |||
307 | | FATTR4_WORD0_ACLSUPPORT | FATTR4_WORD0_CANSETTIME | FATTR4_WORD0_CASE_INSENSITIVE \ | 309 | | FATTR4_WORD0_ACLSUPPORT | FATTR4_WORD0_CANSETTIME | FATTR4_WORD0_CASE_INSENSITIVE \ |
308 | | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED \ | 310 | | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED \ |
309 | | FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FILEID | FATTR4_WORD0_FILES_AVAIL \ | 311 | | FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FILEID | FATTR4_WORD0_FILES_AVAIL \ |
310 | | FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_HOMOGENEOUS \ | 312 | | FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_HOMOGENEOUS \ |
311 | | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \ | 313 | | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \ |
312 | | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL) | 314 | | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL) |
313 | 315 | ||
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h index 069257ea99a0..f3b51d62ec7d 100644 --- a/include/linux/nfsd/nfsfh.h +++ b/include/linux/nfsd/nfsfh.h | |||
@@ -157,7 +157,7 @@ typedef struct svc_fh { | |||
157 | __u64 fh_post_size; /* i_size */ | 157 | __u64 fh_post_size; /* i_size */ |
158 | unsigned long fh_post_blocks; /* i_blocks */ | 158 | unsigned long fh_post_blocks; /* i_blocks */ |
159 | unsigned long fh_post_blksize;/* i_blksize */ | 159 | unsigned long fh_post_blksize;/* i_blksize */ |
160 | __u32 fh_post_rdev[2];/* i_rdev */ | 160 | __be32 fh_post_rdev[2];/* i_rdev */ |
161 | struct timespec fh_post_atime; /* i_atime */ | 161 | struct timespec fh_post_atime; /* i_atime */ |
162 | struct timespec fh_post_mtime; /* i_mtime */ | 162 | struct timespec fh_post_mtime; /* i_mtime */ |
163 | struct timespec fh_post_ctime; /* i_ctime */ | 163 | struct timespec fh_post_ctime; /* i_ctime */ |
@@ -209,9 +209,9 @@ extern char * SVCFH_fmt(struct svc_fh *fhp); | |||
209 | /* | 209 | /* |
210 | * Function prototypes | 210 | * Function prototypes |
211 | */ | 211 | */ |
212 | u32 fh_verify(struct svc_rqst *, struct svc_fh *, int, int); | 212 | __be32 fh_verify(struct svc_rqst *, struct svc_fh *, int, int); |
213 | int fh_compose(struct svc_fh *, struct svc_export *, struct dentry *, struct svc_fh *); | 213 | __be32 fh_compose(struct svc_fh *, struct svc_export *, struct dentry *, struct svc_fh *); |
214 | int fh_update(struct svc_fh *); | 214 | __be32 fh_update(struct svc_fh *); |
215 | void fh_put(struct svc_fh *); | 215 | void fh_put(struct svc_fh *); |
216 | 216 | ||
217 | static __inline__ struct svc_fh * | 217 | static __inline__ struct svc_fh * |
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h index 8bf23cf8b603..c3673f487e84 100644 --- a/include/linux/nfsd/state.h +++ b/include/linux/nfsd/state.h | |||
@@ -125,7 +125,7 @@ struct nfs4_client { | |||
125 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ | 125 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ |
126 | nfs4_verifier cl_verifier; /* generated by client */ | 126 | nfs4_verifier cl_verifier; /* generated by client */ |
127 | time_t cl_time; /* time of last lease renewal */ | 127 | time_t cl_time; /* time of last lease renewal */ |
128 | u32 cl_addr; /* client ipaddress */ | 128 | __be32 cl_addr; /* client ipaddress */ |
129 | struct svc_cred cl_cred; /* setclientid principal */ | 129 | struct svc_cred cl_cred; /* setclientid principal */ |
130 | clientid_t cl_clientid; /* generated by server */ | 130 | clientid_t cl_clientid; /* generated by server */ |
131 | nfs4_verifier cl_confirm; /* generated by server */ | 131 | nfs4_verifier cl_confirm; /* generated by server */ |
@@ -164,7 +164,7 @@ update_stateid(stateid_t *stateid) | |||
164 | * is cached. | 164 | * is cached. |
165 | */ | 165 | */ |
166 | struct nfs4_replay { | 166 | struct nfs4_replay { |
167 | u32 rp_status; | 167 | __be32 rp_status; |
168 | unsigned int rp_buflen; | 168 | unsigned int rp_buflen; |
169 | char *rp_buf; | 169 | char *rp_buf; |
170 | unsigned intrp_allocated; | 170 | unsigned intrp_allocated; |
@@ -273,19 +273,19 @@ struct nfs4_stateid { | |||
273 | ((err) != nfserr_stale_stateid) && \ | 273 | ((err) != nfserr_stale_stateid) && \ |
274 | ((err) != nfserr_bad_stateid)) | 274 | ((err) != nfserr_bad_stateid)) |
275 | 275 | ||
276 | extern int nfsd4_renew(clientid_t *clid); | 276 | extern __be32 nfsd4_renew(clientid_t *clid); |
277 | extern int nfs4_preprocess_stateid_op(struct svc_fh *current_fh, | 277 | extern __be32 nfs4_preprocess_stateid_op(struct svc_fh *current_fh, |
278 | stateid_t *stateid, int flags, struct file **filp); | 278 | stateid_t *stateid, int flags, struct file **filp); |
279 | extern void nfs4_lock_state(void); | 279 | extern void nfs4_lock_state(void); |
280 | extern void nfs4_unlock_state(void); | 280 | extern void nfs4_unlock_state(void); |
281 | extern int nfs4_in_grace(void); | 281 | extern int nfs4_in_grace(void); |
282 | extern int nfs4_check_open_reclaim(clientid_t *clid); | 282 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid); |
283 | extern void put_nfs4_client(struct nfs4_client *clp); | 283 | extern void put_nfs4_client(struct nfs4_client *clp); |
284 | extern void nfs4_free_stateowner(struct kref *kref); | 284 | extern void nfs4_free_stateowner(struct kref *kref); |
285 | extern void nfsd4_probe_callback(struct nfs4_client *clp); | 285 | extern void nfsd4_probe_callback(struct nfs4_client *clp); |
286 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); | 286 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); |
287 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); | 287 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); |
288 | extern int nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname); | 288 | extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname); |
289 | extern void nfsd4_init_recdir(char *recdir_name); | 289 | extern void nfsd4_init_recdir(char *recdir_name); |
290 | extern int nfsd4_recdir_load(void); | 290 | extern int nfsd4_recdir_load(void); |
291 | extern void nfsd4_shutdown_recdir(void); | 291 | extern void nfsd4_shutdown_recdir(void); |
diff --git a/include/linux/nfsd/xdr.h b/include/linux/nfsd/xdr.h index a38f9d776de9..877192d3ae79 100644 --- a/include/linux/nfsd/xdr.h +++ b/include/linux/nfsd/xdr.h | |||
@@ -30,7 +30,6 @@ struct nfsd_readargs { | |||
30 | struct svc_fh fh; | 30 | struct svc_fh fh; |
31 | __u32 offset; | 31 | __u32 offset; |
32 | __u32 count; | 32 | __u32 count; |
33 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
34 | int vlen; | 33 | int vlen; |
35 | }; | 34 | }; |
36 | 35 | ||
@@ -38,7 +37,6 @@ struct nfsd_writeargs { | |||
38 | svc_fh fh; | 37 | svc_fh fh; |
39 | __u32 offset; | 38 | __u32 offset; |
40 | int len; | 39 | int len; |
41 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
42 | int vlen; | 40 | int vlen; |
43 | }; | 41 | }; |
44 | 42 | ||
@@ -83,7 +81,7 @@ struct nfsd_readdirargs { | |||
83 | struct svc_fh fh; | 81 | struct svc_fh fh; |
84 | __u32 cookie; | 82 | __u32 cookie; |
85 | __u32 count; | 83 | __u32 count; |
86 | u32 * buffer; | 84 | __be32 * buffer; |
87 | }; | 85 | }; |
88 | 86 | ||
89 | struct nfsd_attrstat { | 87 | struct nfsd_attrstat { |
@@ -110,9 +108,9 @@ struct nfsd_readdirres { | |||
110 | int count; | 108 | int count; |
111 | 109 | ||
112 | struct readdir_cd common; | 110 | struct readdir_cd common; |
113 | u32 * buffer; | 111 | __be32 * buffer; |
114 | int buflen; | 112 | int buflen; |
115 | u32 * offset; | 113 | __be32 * offset; |
116 | }; | 114 | }; |
117 | 115 | ||
118 | struct nfsd_statfsres { | 116 | struct nfsd_statfsres { |
@@ -137,43 +135,43 @@ union nfsd_xdrstore { | |||
137 | #define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) | 135 | #define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) |
138 | 136 | ||
139 | 137 | ||
140 | int nfssvc_decode_void(struct svc_rqst *, u32 *, void *); | 138 | int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *); |
141 | int nfssvc_decode_fhandle(struct svc_rqst *, u32 *, struct nfsd_fhandle *); | 139 | int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); |
142 | int nfssvc_decode_sattrargs(struct svc_rqst *, u32 *, | 140 | int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *, |
143 | struct nfsd_sattrargs *); | 141 | struct nfsd_sattrargs *); |
144 | int nfssvc_decode_diropargs(struct svc_rqst *, u32 *, | 142 | int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *, |
145 | struct nfsd_diropargs *); | 143 | struct nfsd_diropargs *); |
146 | int nfssvc_decode_readargs(struct svc_rqst *, u32 *, | 144 | int nfssvc_decode_readargs(struct svc_rqst *, __be32 *, |
147 | struct nfsd_readargs *); | 145 | struct nfsd_readargs *); |
148 | int nfssvc_decode_writeargs(struct svc_rqst *, u32 *, | 146 | int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *, |
149 | struct nfsd_writeargs *); | 147 | struct nfsd_writeargs *); |
150 | int nfssvc_decode_createargs(struct svc_rqst *, u32 *, | 148 | int nfssvc_decode_createargs(struct svc_rqst *, __be32 *, |
151 | struct nfsd_createargs *); | 149 | struct nfsd_createargs *); |
152 | int nfssvc_decode_renameargs(struct svc_rqst *, u32 *, | 150 | int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *, |
153 | struct nfsd_renameargs *); | 151 | struct nfsd_renameargs *); |
154 | int nfssvc_decode_readlinkargs(struct svc_rqst *, u32 *, | 152 | int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *, |
155 | struct nfsd_readlinkargs *); | 153 | struct nfsd_readlinkargs *); |
156 | int nfssvc_decode_linkargs(struct svc_rqst *, u32 *, | 154 | int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *, |
157 | struct nfsd_linkargs *); | 155 | struct nfsd_linkargs *); |
158 | int nfssvc_decode_symlinkargs(struct svc_rqst *, u32 *, | 156 | int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *, |
159 | struct nfsd_symlinkargs *); | 157 | struct nfsd_symlinkargs *); |
160 | int nfssvc_decode_readdirargs(struct svc_rqst *, u32 *, | 158 | int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *, |
161 | struct nfsd_readdirargs *); | 159 | struct nfsd_readdirargs *); |
162 | int nfssvc_encode_void(struct svc_rqst *, u32 *, void *); | 160 | int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *); |
163 | int nfssvc_encode_attrstat(struct svc_rqst *, u32 *, struct nfsd_attrstat *); | 161 | int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *); |
164 | int nfssvc_encode_diropres(struct svc_rqst *, u32 *, struct nfsd_diropres *); | 162 | int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *); |
165 | int nfssvc_encode_readlinkres(struct svc_rqst *, u32 *, struct nfsd_readlinkres *); | 163 | int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *); |
166 | int nfssvc_encode_readres(struct svc_rqst *, u32 *, struct nfsd_readres *); | 164 | int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *); |
167 | int nfssvc_encode_statfsres(struct svc_rqst *, u32 *, struct nfsd_statfsres *); | 165 | int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *); |
168 | int nfssvc_encode_readdirres(struct svc_rqst *, u32 *, struct nfsd_readdirres *); | 166 | int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *); |
169 | 167 | ||
170 | int nfssvc_encode_entry(struct readdir_cd *, const char *name, | 168 | int nfssvc_encode_entry(struct readdir_cd *, const char *name, |
171 | int namlen, loff_t offset, ino_t ino, unsigned int); | 169 | int namlen, loff_t offset, ino_t ino, unsigned int); |
172 | 170 | ||
173 | int nfssvc_release_fhandle(struct svc_rqst *, u32 *, struct nfsd_fhandle *); | 171 | int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); |
174 | 172 | ||
175 | /* Helper functions for NFSv2 ACL code */ | 173 | /* Helper functions for NFSv2 ACL code */ |
176 | u32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, u32 *p, struct svc_fh *fhp); | 174 | __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp); |
177 | u32 *nfs2svc_decode_fh(u32 *p, struct svc_fh *fhp); | 175 | __be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp); |
178 | 176 | ||
179 | #endif /* LINUX_NFSD_H */ | 177 | #endif /* LINUX_NFSD_H */ |
diff --git a/include/linux/nfsd/xdr3.h b/include/linux/nfsd/xdr3.h index a4322741f8b9..79963867b0d7 100644 --- a/include/linux/nfsd/xdr3.h +++ b/include/linux/nfsd/xdr3.h | |||
@@ -33,7 +33,6 @@ struct nfsd3_readargs { | |||
33 | struct svc_fh fh; | 33 | struct svc_fh fh; |
34 | __u64 offset; | 34 | __u64 offset; |
35 | __u32 count; | 35 | __u32 count; |
36 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
37 | int vlen; | 36 | int vlen; |
38 | }; | 37 | }; |
39 | 38 | ||
@@ -43,7 +42,6 @@ struct nfsd3_writeargs { | |||
43 | __u32 count; | 42 | __u32 count; |
44 | int stable; | 43 | int stable; |
45 | __u32 len; | 44 | __u32 len; |
46 | struct kvec vec[RPCSVC_MAXPAGES]; | ||
47 | int vlen; | 45 | int vlen; |
48 | }; | 46 | }; |
49 | 47 | ||
@@ -53,7 +51,7 @@ struct nfsd3_createargs { | |||
53 | int len; | 51 | int len; |
54 | int createmode; | 52 | int createmode; |
55 | struct iattr attrs; | 53 | struct iattr attrs; |
56 | __u32 * verf; | 54 | __be32 * verf; |
57 | }; | 55 | }; |
58 | 56 | ||
59 | struct nfsd3_mknodargs { | 57 | struct nfsd3_mknodargs { |
@@ -100,8 +98,8 @@ struct nfsd3_readdirargs { | |||
100 | __u64 cookie; | 98 | __u64 cookie; |
101 | __u32 dircount; | 99 | __u32 dircount; |
102 | __u32 count; | 100 | __u32 count; |
103 | __u32 * verf; | 101 | __be32 * verf; |
104 | u32 * buffer; | 102 | __be32 * buffer; |
105 | }; | 103 | }; |
106 | 104 | ||
107 | struct nfsd3_commitargs { | 105 | struct nfsd3_commitargs { |
@@ -124,79 +122,79 @@ struct nfsd3_setaclargs { | |||
124 | }; | 122 | }; |
125 | 123 | ||
126 | struct nfsd3_attrstat { | 124 | struct nfsd3_attrstat { |
127 | __u32 status; | 125 | __be32 status; |
128 | struct svc_fh fh; | 126 | struct svc_fh fh; |
129 | struct kstat stat; | 127 | struct kstat stat; |
130 | }; | 128 | }; |
131 | 129 | ||
132 | /* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ | 130 | /* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ |
133 | struct nfsd3_diropres { | 131 | struct nfsd3_diropres { |
134 | __u32 status; | 132 | __be32 status; |
135 | struct svc_fh dirfh; | 133 | struct svc_fh dirfh; |
136 | struct svc_fh fh; | 134 | struct svc_fh fh; |
137 | }; | 135 | }; |
138 | 136 | ||
139 | struct nfsd3_accessres { | 137 | struct nfsd3_accessres { |
140 | __u32 status; | 138 | __be32 status; |
141 | struct svc_fh fh; | 139 | struct svc_fh fh; |
142 | __u32 access; | 140 | __u32 access; |
143 | }; | 141 | }; |
144 | 142 | ||
145 | struct nfsd3_readlinkres { | 143 | struct nfsd3_readlinkres { |
146 | __u32 status; | 144 | __be32 status; |
147 | struct svc_fh fh; | 145 | struct svc_fh fh; |
148 | __u32 len; | 146 | __u32 len; |
149 | }; | 147 | }; |
150 | 148 | ||
151 | struct nfsd3_readres { | 149 | struct nfsd3_readres { |
152 | __u32 status; | 150 | __be32 status; |
153 | struct svc_fh fh; | 151 | struct svc_fh fh; |
154 | unsigned long count; | 152 | unsigned long count; |
155 | int eof; | 153 | int eof; |
156 | }; | 154 | }; |
157 | 155 | ||
158 | struct nfsd3_writeres { | 156 | struct nfsd3_writeres { |
159 | __u32 status; | 157 | __be32 status; |
160 | struct svc_fh fh; | 158 | struct svc_fh fh; |
161 | unsigned long count; | 159 | unsigned long count; |
162 | int committed; | 160 | int committed; |
163 | }; | 161 | }; |
164 | 162 | ||
165 | struct nfsd3_renameres { | 163 | struct nfsd3_renameres { |
166 | __u32 status; | 164 | __be32 status; |
167 | struct svc_fh ffh; | 165 | struct svc_fh ffh; |
168 | struct svc_fh tfh; | 166 | struct svc_fh tfh; |
169 | }; | 167 | }; |
170 | 168 | ||
171 | struct nfsd3_linkres { | 169 | struct nfsd3_linkres { |
172 | __u32 status; | 170 | __be32 status; |
173 | struct svc_fh tfh; | 171 | struct svc_fh tfh; |
174 | struct svc_fh fh; | 172 | struct svc_fh fh; |
175 | }; | 173 | }; |
176 | 174 | ||
177 | struct nfsd3_readdirres { | 175 | struct nfsd3_readdirres { |
178 | __u32 status; | 176 | __be32 status; |
179 | struct svc_fh fh; | 177 | struct svc_fh fh; |
180 | int count; | 178 | int count; |
181 | __u32 verf[2]; | 179 | __be32 verf[2]; |
182 | 180 | ||
183 | struct readdir_cd common; | 181 | struct readdir_cd common; |
184 | u32 * buffer; | 182 | __be32 * buffer; |
185 | int buflen; | 183 | int buflen; |
186 | u32 * offset; | 184 | __be32 * offset; |
187 | u32 * offset1; | 185 | __be32 * offset1; |
188 | struct svc_rqst * rqstp; | 186 | struct svc_rqst * rqstp; |
189 | 187 | ||
190 | }; | 188 | }; |
191 | 189 | ||
192 | struct nfsd3_fsstatres { | 190 | struct nfsd3_fsstatres { |
193 | __u32 status; | 191 | __be32 status; |
194 | struct kstatfs stats; | 192 | struct kstatfs stats; |
195 | __u32 invarsec; | 193 | __u32 invarsec; |
196 | }; | 194 | }; |
197 | 195 | ||
198 | struct nfsd3_fsinfores { | 196 | struct nfsd3_fsinfores { |
199 | __u32 status; | 197 | __be32 status; |
200 | __u32 f_rtmax; | 198 | __u32 f_rtmax; |
201 | __u32 f_rtpref; | 199 | __u32 f_rtpref; |
202 | __u32 f_rtmult; | 200 | __u32 f_rtmult; |
@@ -209,7 +207,7 @@ struct nfsd3_fsinfores { | |||
209 | }; | 207 | }; |
210 | 208 | ||
211 | struct nfsd3_pathconfres { | 209 | struct nfsd3_pathconfres { |
212 | __u32 status; | 210 | __be32 status; |
213 | __u32 p_link_max; | 211 | __u32 p_link_max; |
214 | __u32 p_name_max; | 212 | __u32 p_name_max; |
215 | __u32 p_no_trunc; | 213 | __u32 p_no_trunc; |
@@ -219,12 +217,12 @@ struct nfsd3_pathconfres { | |||
219 | }; | 217 | }; |
220 | 218 | ||
221 | struct nfsd3_commitres { | 219 | struct nfsd3_commitres { |
222 | __u32 status; | 220 | __be32 status; |
223 | struct svc_fh fh; | 221 | struct svc_fh fh; |
224 | }; | 222 | }; |
225 | 223 | ||
226 | struct nfsd3_getaclres { | 224 | struct nfsd3_getaclres { |
227 | __u32 status; | 225 | __be32 status; |
228 | struct svc_fh fh; | 226 | struct svc_fh fh; |
229 | int mask; | 227 | int mask; |
230 | struct posix_acl *acl_access; | 228 | struct posix_acl *acl_access; |
@@ -268,70 +266,70 @@ union nfsd3_xdrstore { | |||
268 | 266 | ||
269 | #define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) | 267 | #define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) |
270 | 268 | ||
271 | int nfs3svc_decode_fhandle(struct svc_rqst *, u32 *, struct nfsd_fhandle *); | 269 | int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); |
272 | int nfs3svc_decode_sattrargs(struct svc_rqst *, u32 *, | 270 | int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *, |
273 | struct nfsd3_sattrargs *); | 271 | struct nfsd3_sattrargs *); |
274 | int nfs3svc_decode_diropargs(struct svc_rqst *, u32 *, | 272 | int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *, |
275 | struct nfsd3_diropargs *); | 273 | struct nfsd3_diropargs *); |
276 | int nfs3svc_decode_accessargs(struct svc_rqst *, u32 *, | 274 | int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *, |
277 | struct nfsd3_accessargs *); | 275 | struct nfsd3_accessargs *); |
278 | int nfs3svc_decode_readargs(struct svc_rqst *, u32 *, | 276 | int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *, |
279 | struct nfsd3_readargs *); | 277 | struct nfsd3_readargs *); |
280 | int nfs3svc_decode_writeargs(struct svc_rqst *, u32 *, | 278 | int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *, |
281 | struct nfsd3_writeargs *); | 279 | struct nfsd3_writeargs *); |
282 | int nfs3svc_decode_createargs(struct svc_rqst *, u32 *, | 280 | int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *, |
283 | struct nfsd3_createargs *); | 281 | struct nfsd3_createargs *); |
284 | int nfs3svc_decode_mkdirargs(struct svc_rqst *, u32 *, | 282 | int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *, |
285 | struct nfsd3_createargs *); | 283 | struct nfsd3_createargs *); |
286 | int nfs3svc_decode_mknodargs(struct svc_rqst *, u32 *, | 284 | int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *, |
287 | struct nfsd3_mknodargs *); | 285 | struct nfsd3_mknodargs *); |
288 | int nfs3svc_decode_renameargs(struct svc_rqst *, u32 *, | 286 | int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *, |
289 | struct nfsd3_renameargs *); | 287 | struct nfsd3_renameargs *); |
290 | int nfs3svc_decode_readlinkargs(struct svc_rqst *, u32 *, | 288 | int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *, |
291 | struct nfsd3_readlinkargs *); | 289 | struct nfsd3_readlinkargs *); |
292 | int nfs3svc_decode_linkargs(struct svc_rqst *, u32 *, | 290 | int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *, |
293 | struct nfsd3_linkargs *); | 291 | struct nfsd3_linkargs *); |
294 | int nfs3svc_decode_symlinkargs(struct svc_rqst *, u32 *, | 292 | int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *, |
295 | struct nfsd3_symlinkargs *); | 293 | struct nfsd3_symlinkargs *); |
296 | int nfs3svc_decode_readdirargs(struct svc_rqst *, u32 *, | 294 | int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *, |
297 | struct nfsd3_readdirargs *); | 295 | struct nfsd3_readdirargs *); |
298 | int nfs3svc_decode_readdirplusargs(struct svc_rqst *, u32 *, | 296 | int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *, |
299 | struct nfsd3_readdirargs *); | 297 | struct nfsd3_readdirargs *); |
300 | int nfs3svc_decode_commitargs(struct svc_rqst *, u32 *, | 298 | int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *, |
301 | struct nfsd3_commitargs *); | 299 | struct nfsd3_commitargs *); |
302 | int nfs3svc_encode_voidres(struct svc_rqst *, u32 *, void *); | 300 | int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *); |
303 | int nfs3svc_encode_attrstat(struct svc_rqst *, u32 *, | 301 | int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *, |
304 | struct nfsd3_attrstat *); | 302 | struct nfsd3_attrstat *); |
305 | int nfs3svc_encode_wccstat(struct svc_rqst *, u32 *, | 303 | int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *, |
306 | struct nfsd3_attrstat *); | 304 | struct nfsd3_attrstat *); |
307 | int nfs3svc_encode_diropres(struct svc_rqst *, u32 *, | 305 | int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *, |
308 | struct nfsd3_diropres *); | 306 | struct nfsd3_diropres *); |
309 | int nfs3svc_encode_accessres(struct svc_rqst *, u32 *, | 307 | int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *, |
310 | struct nfsd3_accessres *); | 308 | struct nfsd3_accessres *); |
311 | int nfs3svc_encode_readlinkres(struct svc_rqst *, u32 *, | 309 | int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *, |
312 | struct nfsd3_readlinkres *); | 310 | struct nfsd3_readlinkres *); |
313 | int nfs3svc_encode_readres(struct svc_rqst *, u32 *, struct nfsd3_readres *); | 311 | int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *); |
314 | int nfs3svc_encode_writeres(struct svc_rqst *, u32 *, struct nfsd3_writeres *); | 312 | int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *); |
315 | int nfs3svc_encode_createres(struct svc_rqst *, u32 *, | 313 | int nfs3svc_encode_createres(struct svc_rqst *, __be32 *, |
316 | struct nfsd3_diropres *); | 314 | struct nfsd3_diropres *); |
317 | int nfs3svc_encode_renameres(struct svc_rqst *, u32 *, | 315 | int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *, |
318 | struct nfsd3_renameres *); | 316 | struct nfsd3_renameres *); |
319 | int nfs3svc_encode_linkres(struct svc_rqst *, u32 *, | 317 | int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *, |
320 | struct nfsd3_linkres *); | 318 | struct nfsd3_linkres *); |
321 | int nfs3svc_encode_readdirres(struct svc_rqst *, u32 *, | 319 | int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *, |
322 | struct nfsd3_readdirres *); | 320 | struct nfsd3_readdirres *); |
323 | int nfs3svc_encode_fsstatres(struct svc_rqst *, u32 *, | 321 | int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *, |
324 | struct nfsd3_fsstatres *); | 322 | struct nfsd3_fsstatres *); |
325 | int nfs3svc_encode_fsinfores(struct svc_rqst *, u32 *, | 323 | int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *, |
326 | struct nfsd3_fsinfores *); | 324 | struct nfsd3_fsinfores *); |
327 | int nfs3svc_encode_pathconfres(struct svc_rqst *, u32 *, | 325 | int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *, |
328 | struct nfsd3_pathconfres *); | 326 | struct nfsd3_pathconfres *); |
329 | int nfs3svc_encode_commitres(struct svc_rqst *, u32 *, | 327 | int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *, |
330 | struct nfsd3_commitres *); | 328 | struct nfsd3_commitres *); |
331 | 329 | ||
332 | int nfs3svc_release_fhandle(struct svc_rqst *, u32 *, | 330 | int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *, |
333 | struct nfsd3_attrstat *); | 331 | struct nfsd3_attrstat *); |
334 | int nfs3svc_release_fhandle2(struct svc_rqst *, u32 *, | 332 | int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *, |
335 | struct nfsd3_fhandle_pair *); | 333 | struct nfsd3_fhandle_pair *); |
336 | int nfs3svc_encode_entry(struct readdir_cd *, const char *name, | 334 | int nfs3svc_encode_entry(struct readdir_cd *, const char *name, |
337 | int namlen, loff_t offset, ino_t ino, | 335 | int namlen, loff_t offset, ino_t ino, |
@@ -340,9 +338,9 @@ int nfs3svc_encode_entry_plus(struct readdir_cd *, const char *name, | |||
340 | int namlen, loff_t offset, ino_t ino, | 338 | int namlen, loff_t offset, ino_t ino, |
341 | unsigned int); | 339 | unsigned int); |
342 | /* Helper functions for NFSv3 ACL code */ | 340 | /* Helper functions for NFSv3 ACL code */ |
343 | u32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, u32 *p, | 341 | __be32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p, |
344 | struct svc_fh *fhp); | 342 | struct svc_fh *fhp); |
345 | u32 *nfs3svc_decode_fh(u32 *p, struct svc_fh *fhp); | 343 | __be32 *nfs3svc_decode_fh(__be32 *p, struct svc_fh *fhp); |
346 | 344 | ||
347 | 345 | ||
348 | #endif /* _LINUX_NFSD_XDR3_H */ | 346 | #endif /* _LINUX_NFSD_XDR3_H */ |
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h index 77adba7d2281..45ca01b5f844 100644 --- a/include/linux/nfsd/xdr4.h +++ b/include/linux/nfsd/xdr4.h | |||
@@ -241,7 +241,6 @@ struct nfsd4_read { | |||
241 | stateid_t rd_stateid; /* request */ | 241 | stateid_t rd_stateid; /* request */ |
242 | u64 rd_offset; /* request */ | 242 | u64 rd_offset; /* request */ |
243 | u32 rd_length; /* request */ | 243 | u32 rd_length; /* request */ |
244 | struct kvec rd_iov[RPCSVC_MAXPAGES]; | ||
245 | int rd_vlen; | 244 | int rd_vlen; |
246 | struct file *rd_filp; | 245 | struct file *rd_filp; |
247 | 246 | ||
@@ -259,9 +258,9 @@ struct nfsd4_readdir { | |||
259 | struct svc_fh * rd_fhp; /* response */ | 258 | struct svc_fh * rd_fhp; /* response */ |
260 | 259 | ||
261 | struct readdir_cd common; | 260 | struct readdir_cd common; |
262 | u32 * buffer; | 261 | __be32 * buffer; |
263 | int buflen; | 262 | int buflen; |
264 | u32 * offset; | 263 | __be32 * offset; |
265 | }; | 264 | }; |
266 | 265 | ||
267 | struct nfsd4_release_lockowner { | 266 | struct nfsd4_release_lockowner { |
@@ -326,7 +325,6 @@ struct nfsd4_write { | |||
326 | u64 wr_offset; /* request */ | 325 | u64 wr_offset; /* request */ |
327 | u32 wr_stable_how; /* request */ | 326 | u32 wr_stable_how; /* request */ |
328 | u32 wr_buflen; /* request */ | 327 | u32 wr_buflen; /* request */ |
329 | struct kvec wr_vec[RPCSVC_MAXPAGES]; /* request */ | ||
330 | int wr_vlen; | 328 | int wr_vlen; |
331 | 329 | ||
332 | u32 wr_bytes_written; /* response */ | 330 | u32 wr_bytes_written; /* response */ |
@@ -336,7 +334,7 @@ struct nfsd4_write { | |||
336 | 334 | ||
337 | struct nfsd4_op { | 335 | struct nfsd4_op { |
338 | int opnum; | 336 | int opnum; |
339 | int status; | 337 | __be32 status; |
340 | union { | 338 | union { |
341 | struct nfsd4_access access; | 339 | struct nfsd4_access access; |
342 | struct nfsd4_close close; | 340 | struct nfsd4_close close; |
@@ -373,12 +371,12 @@ struct nfsd4_op { | |||
373 | 371 | ||
374 | struct nfsd4_compoundargs { | 372 | struct nfsd4_compoundargs { |
375 | /* scratch variables for XDR decode */ | 373 | /* scratch variables for XDR decode */ |
376 | u32 * p; | 374 | __be32 * p; |
377 | u32 * end; | 375 | __be32 * end; |
378 | struct page ** pagelist; | 376 | struct page ** pagelist; |
379 | int pagelen; | 377 | int pagelen; |
380 | u32 tmp[8]; | 378 | __be32 tmp[8]; |
381 | u32 * tmpp; | 379 | __be32 * tmpp; |
382 | struct tmpbuf { | 380 | struct tmpbuf { |
383 | struct tmpbuf *next; | 381 | struct tmpbuf *next; |
384 | void (*release)(const void *); | 382 | void (*release)(const void *); |
@@ -397,15 +395,15 @@ struct nfsd4_compoundargs { | |||
397 | 395 | ||
398 | struct nfsd4_compoundres { | 396 | struct nfsd4_compoundres { |
399 | /* scratch variables for XDR encode */ | 397 | /* scratch variables for XDR encode */ |
400 | u32 * p; | 398 | __be32 * p; |
401 | u32 * end; | 399 | __be32 * end; |
402 | struct xdr_buf * xbuf; | 400 | struct xdr_buf * xbuf; |
403 | struct svc_rqst * rqstp; | 401 | struct svc_rqst * rqstp; |
404 | 402 | ||
405 | u32 taglen; | 403 | u32 taglen; |
406 | char * tag; | 404 | char * tag; |
407 | u32 opcnt; | 405 | u32 opcnt; |
408 | u32 * tagp; /* where to encode tag and opcount */ | 406 | __be32 * tagp; /* where to encode tag and opcount */ |
409 | }; | 407 | }; |
410 | 408 | ||
411 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) | 409 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) |
@@ -421,45 +419,45 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp) | |||
421 | cinfo->after_ctime_nsec = fhp->fh_post_ctime.tv_nsec; | 419 | cinfo->after_ctime_nsec = fhp->fh_post_ctime.tv_nsec; |
422 | } | 420 | } |
423 | 421 | ||
424 | int nfs4svc_encode_voidres(struct svc_rqst *, u32 *, void *); | 422 | int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *); |
425 | int nfs4svc_decode_compoundargs(struct svc_rqst *, u32 *, | 423 | int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *, |
426 | struct nfsd4_compoundargs *); | 424 | struct nfsd4_compoundargs *); |
427 | int nfs4svc_encode_compoundres(struct svc_rqst *, u32 *, | 425 | int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *, |
428 | struct nfsd4_compoundres *); | 426 | struct nfsd4_compoundres *); |
429 | void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); | 427 | void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); |
430 | void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); | 428 | void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); |
431 | int nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | 429 | __be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, |
432 | struct dentry *dentry, u32 *buffer, int *countp, | 430 | struct dentry *dentry, __be32 *buffer, int *countp, |
433 | u32 *bmval, struct svc_rqst *); | 431 | u32 *bmval, struct svc_rqst *); |
434 | extern int nfsd4_setclientid(struct svc_rqst *rqstp, | 432 | extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp, |
435 | struct nfsd4_setclientid *setclid); | 433 | struct nfsd4_setclientid *setclid); |
436 | extern int nfsd4_setclientid_confirm(struct svc_rqst *rqstp, | 434 | extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, |
437 | struct nfsd4_setclientid_confirm *setclientid_confirm); | 435 | struct nfsd4_setclientid_confirm *setclientid_confirm); |
438 | extern int nfsd4_process_open1(struct nfsd4_open *open); | 436 | extern __be32 nfsd4_process_open1(struct nfsd4_open *open); |
439 | extern int nfsd4_process_open2(struct svc_rqst *rqstp, | 437 | extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp, |
440 | struct svc_fh *current_fh, struct nfsd4_open *open); | 438 | struct svc_fh *current_fh, struct nfsd4_open *open); |
441 | extern int nfsd4_open_confirm(struct svc_rqst *rqstp, | 439 | extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, |
442 | struct svc_fh *current_fh, struct nfsd4_open_confirm *oc, | 440 | struct svc_fh *current_fh, struct nfsd4_open_confirm *oc, |
443 | struct nfs4_stateowner **); | 441 | struct nfs4_stateowner **); |
444 | extern int nfsd4_close(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 442 | extern __be32 nfsd4_close(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
445 | struct nfsd4_close *close, | 443 | struct nfsd4_close *close, |
446 | struct nfs4_stateowner **replay_owner); | 444 | struct nfs4_stateowner **replay_owner); |
447 | extern int nfsd4_open_downgrade(struct svc_rqst *rqstp, | 445 | extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp, |
448 | struct svc_fh *current_fh, struct nfsd4_open_downgrade *od, | 446 | struct svc_fh *current_fh, struct nfsd4_open_downgrade *od, |
449 | struct nfs4_stateowner **replay_owner); | 447 | struct nfs4_stateowner **replay_owner); |
450 | extern int nfsd4_lock(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 448 | extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
451 | struct nfsd4_lock *lock, | 449 | struct nfsd4_lock *lock, |
452 | struct nfs4_stateowner **replay_owner); | 450 | struct nfs4_stateowner **replay_owner); |
453 | extern int nfsd4_lockt(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 451 | extern __be32 nfsd4_lockt(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
454 | struct nfsd4_lockt *lockt); | 452 | struct nfsd4_lockt *lockt); |
455 | extern int nfsd4_locku(struct svc_rqst *rqstp, struct svc_fh *current_fh, | 453 | extern __be32 nfsd4_locku(struct svc_rqst *rqstp, struct svc_fh *current_fh, |
456 | struct nfsd4_locku *locku, | 454 | struct nfsd4_locku *locku, |
457 | struct nfs4_stateowner **replay_owner); | 455 | struct nfs4_stateowner **replay_owner); |
458 | extern int | 456 | extern __be32 |
459 | nfsd4_release_lockowner(struct svc_rqst *rqstp, | 457 | nfsd4_release_lockowner(struct svc_rqst *rqstp, |
460 | struct nfsd4_release_lockowner *rlockowner); | 458 | struct nfsd4_release_lockowner *rlockowner); |
461 | extern void nfsd4_release_compoundargs(struct nfsd4_compoundargs *); | 459 | extern void nfsd4_release_compoundargs(struct nfsd4_compoundargs *); |
462 | extern int nfsd4_delegreturn(struct svc_rqst *rqstp, | 460 | extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp, |
463 | struct svc_fh *current_fh, struct nfsd4_delegreturn *dr); | 461 | struct svc_fh *current_fh, struct nfsd4_delegreturn *dr); |
464 | #endif | 462 | #endif |
465 | 463 | ||
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index 5dce5c21822c..b1063e9cdb1b 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * See detailed comments in the file linux/bitmap.h describing the | 8 | * See detailed comments in the file linux/bitmap.h describing the |
9 | * data type on which these nodemasks are based. | 9 | * data type on which these nodemasks are based. |
10 | * | 10 | * |
11 | * For details of nodemask_scnprintf() and nodemask_parse(), | 11 | * For details of nodemask_scnprintf() and nodemask_parse_user(), |
12 | * see bitmap_scnprintf() and bitmap_parse() in lib/bitmap.c. | 12 | * see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c. |
13 | * For details of nodelist_scnprintf() and nodelist_parse(), see | 13 | * For details of nodelist_scnprintf() and nodelist_parse(), see |
14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. | 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. |
15 | * For details of node_remap(), see bitmap_bitremap in lib/bitmap.c. | 15 | * For details of node_remap(), see bitmap_bitremap in lib/bitmap.c. |
@@ -51,7 +51,7 @@ | |||
51 | * unsigned long *nodes_addr(mask) Array of unsigned long's in mask | 51 | * unsigned long *nodes_addr(mask) Array of unsigned long's in mask |
52 | * | 52 | * |
53 | * int nodemask_scnprintf(buf, len, mask) Format nodemask for printing | 53 | * int nodemask_scnprintf(buf, len, mask) Format nodemask for printing |
54 | * int nodemask_parse(ubuf, ulen, mask) Parse ascii string as nodemask | 54 | * int nodemask_parse_user(ubuf, ulen, mask) Parse ascii string as nodemask |
55 | * int nodelist_scnprintf(buf, len, mask) Format nodemask as list for printing | 55 | * int nodelist_scnprintf(buf, len, mask) Format nodemask as list for printing |
56 | * int nodelist_parse(buf, map) Parse ascii string as nodelist | 56 | * int nodelist_parse(buf, map) Parse ascii string as nodelist |
57 | * int node_remap(oldbit, old, new) newbit = map(old, new)(oldbit) | 57 | * int node_remap(oldbit, old, new) newbit = map(old, new)(oldbit) |
@@ -288,12 +288,12 @@ static inline int __nodemask_scnprintf(char *buf, int len, | |||
288 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); | 288 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); |
289 | } | 289 | } |
290 | 290 | ||
291 | #define nodemask_parse(ubuf, ulen, dst) \ | 291 | #define nodemask_parse_user(ubuf, ulen, dst) \ |
292 | __nodemask_parse((ubuf), (ulen), &(dst), MAX_NUMNODES) | 292 | __nodemask_parse_user((ubuf), (ulen), &(dst), MAX_NUMNODES) |
293 | static inline int __nodemask_parse(const char __user *buf, int len, | 293 | static inline int __nodemask_parse_user(const char __user *buf, int len, |
294 | nodemask_t *dstp, int nbits) | 294 | nodemask_t *dstp, int nbits) |
295 | { | 295 | { |
296 | return bitmap_parse(buf, len, dstp->bits, nbits); | 296 | return bitmap_parse_user(buf, len, dstp->bits, nbits); |
297 | } | 297 | } |
298 | 298 | ||
299 | #define nodelist_scnprintf(buf, len, src) \ | 299 | #define nodelist_scnprintf(buf, len, src) \ |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 7ff386a6ae87..10a43ed0527e 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
@@ -12,9 +12,10 @@ | |||
12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
13 | #include <linux/mutex.h> | 13 | #include <linux/mutex.h> |
14 | #include <linux/rwsem.h> | 14 | #include <linux/rwsem.h> |
15 | #include <linux/srcu.h> | ||
15 | 16 | ||
16 | /* | 17 | /* |
17 | * Notifier chains are of three types: | 18 | * Notifier chains are of four types: |
18 | * | 19 | * |
19 | * Atomic notifier chains: Chain callbacks run in interrupt/atomic | 20 | * Atomic notifier chains: Chain callbacks run in interrupt/atomic |
20 | * context. Callouts are not allowed to block. | 21 | * context. Callouts are not allowed to block. |
@@ -23,13 +24,27 @@ | |||
23 | * Raw notifier chains: There are no restrictions on callbacks, | 24 | * Raw notifier chains: There are no restrictions on callbacks, |
24 | * registration, or unregistration. All locking and protection | 25 | * registration, or unregistration. All locking and protection |
25 | * must be provided by the caller. | 26 | * must be provided by the caller. |
27 | * SRCU notifier chains: A variant of blocking notifier chains, with | ||
28 | * the same restrictions. | ||
26 | * | 29 | * |
27 | * atomic_notifier_chain_register() may be called from an atomic context, | 30 | * atomic_notifier_chain_register() may be called from an atomic context, |
28 | * but blocking_notifier_chain_register() must be called from a process | 31 | * but blocking_notifier_chain_register() and srcu_notifier_chain_register() |
29 | * context. Ditto for the corresponding _unregister() routines. | 32 | * must be called from a process context. Ditto for the corresponding |
33 | * _unregister() routines. | ||
30 | * | 34 | * |
31 | * atomic_notifier_chain_unregister() and blocking_notifier_chain_unregister() | 35 | * atomic_notifier_chain_unregister(), blocking_notifier_chain_unregister(), |
32 | * _must not_ be called from within the call chain. | 36 | * and srcu_notifier_chain_unregister() _must not_ be called from within |
37 | * the call chain. | ||
38 | * | ||
39 | * SRCU notifier chains are an alternative form of blocking notifier chains. | ||
40 | * They use SRCU (Sleepable Read-Copy Update) instead of rw-semaphores for | ||
41 | * protection of the chain links. This means there is _very_ low overhead | ||
42 | * in srcu_notifier_call_chain(): no cache bounces and no memory barriers. | ||
43 | * As compensation, srcu_notifier_chain_unregister() is rather expensive. | ||
44 | * SRCU notifier chains should be used when the chain will be called very | ||
45 | * often but notifier_blocks will seldom be removed. Also, SRCU notifier | ||
46 | * chains are slightly more difficult to use because they require special | ||
47 | * runtime initialization. | ||
33 | */ | 48 | */ |
34 | 49 | ||
35 | struct notifier_block { | 50 | struct notifier_block { |
@@ -52,6 +67,12 @@ struct raw_notifier_head { | |||
52 | struct notifier_block *head; | 67 | struct notifier_block *head; |
53 | }; | 68 | }; |
54 | 69 | ||
70 | struct srcu_notifier_head { | ||
71 | struct mutex mutex; | ||
72 | struct srcu_struct srcu; | ||
73 | struct notifier_block *head; | ||
74 | }; | ||
75 | |||
55 | #define ATOMIC_INIT_NOTIFIER_HEAD(name) do { \ | 76 | #define ATOMIC_INIT_NOTIFIER_HEAD(name) do { \ |
56 | spin_lock_init(&(name)->lock); \ | 77 | spin_lock_init(&(name)->lock); \ |
57 | (name)->head = NULL; \ | 78 | (name)->head = NULL; \ |
@@ -64,6 +85,11 @@ struct raw_notifier_head { | |||
64 | (name)->head = NULL; \ | 85 | (name)->head = NULL; \ |
65 | } while (0) | 86 | } while (0) |
66 | 87 | ||
88 | /* srcu_notifier_heads must be initialized and cleaned up dynamically */ | ||
89 | extern void srcu_init_notifier_head(struct srcu_notifier_head *nh); | ||
90 | #define srcu_cleanup_notifier_head(name) \ | ||
91 | cleanup_srcu_struct(&(name)->srcu); | ||
92 | |||
67 | #define ATOMIC_NOTIFIER_INIT(name) { \ | 93 | #define ATOMIC_NOTIFIER_INIT(name) { \ |
68 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ | 94 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ |
69 | .head = NULL } | 95 | .head = NULL } |
@@ -72,6 +98,7 @@ struct raw_notifier_head { | |||
72 | .head = NULL } | 98 | .head = NULL } |
73 | #define RAW_NOTIFIER_INIT(name) { \ | 99 | #define RAW_NOTIFIER_INIT(name) { \ |
74 | .head = NULL } | 100 | .head = NULL } |
101 | /* srcu_notifier_heads cannot be initialized statically */ | ||
75 | 102 | ||
76 | #define ATOMIC_NOTIFIER_HEAD(name) \ | 103 | #define ATOMIC_NOTIFIER_HEAD(name) \ |
77 | struct atomic_notifier_head name = \ | 104 | struct atomic_notifier_head name = \ |
@@ -91,6 +118,8 @@ extern int blocking_notifier_chain_register(struct blocking_notifier_head *, | |||
91 | struct notifier_block *); | 118 | struct notifier_block *); |
92 | extern int raw_notifier_chain_register(struct raw_notifier_head *, | 119 | extern int raw_notifier_chain_register(struct raw_notifier_head *, |
93 | struct notifier_block *); | 120 | struct notifier_block *); |
121 | extern int srcu_notifier_chain_register(struct srcu_notifier_head *, | ||
122 | struct notifier_block *); | ||
94 | 123 | ||
95 | extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *, | 124 | extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *, |
96 | struct notifier_block *); | 125 | struct notifier_block *); |
@@ -98,6 +127,8 @@ extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *, | |||
98 | struct notifier_block *); | 127 | struct notifier_block *); |
99 | extern int raw_notifier_chain_unregister(struct raw_notifier_head *, | 128 | extern int raw_notifier_chain_unregister(struct raw_notifier_head *, |
100 | struct notifier_block *); | 129 | struct notifier_block *); |
130 | extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *, | ||
131 | struct notifier_block *); | ||
101 | 132 | ||
102 | extern int atomic_notifier_call_chain(struct atomic_notifier_head *, | 133 | extern int atomic_notifier_call_chain(struct atomic_notifier_head *, |
103 | unsigned long val, void *v); | 134 | unsigned long val, void *v); |
@@ -105,6 +136,8 @@ extern int blocking_notifier_call_chain(struct blocking_notifier_head *, | |||
105 | unsigned long val, void *v); | 136 | unsigned long val, void *v); |
106 | extern int raw_notifier_call_chain(struct raw_notifier_head *, | 137 | extern int raw_notifier_call_chain(struct raw_notifier_head *, |
107 | unsigned long val, void *v); | 138 | unsigned long val, void *v); |
139 | extern int srcu_notifier_call_chain(struct srcu_notifier_head *, | ||
140 | unsigned long val, void *v); | ||
108 | 141 | ||
109 | #define NOTIFY_DONE 0x0000 /* Don't care */ | 142 | #define NOTIFY_DONE 0x0000 /* Don't care */ |
110 | #define NOTIFY_OK 0x0001 /* Suits me */ | 143 | #define NOTIFY_OK 0x0001 /* Suits me */ |
diff --git a/include/linux/oom.h b/include/linux/oom.h new file mode 100644 index 000000000000..ad76463629a0 --- /dev/null +++ b/include/linux/oom.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef __INCLUDE_LINUX_OOM_H | ||
2 | #define __INCLUDE_LINUX_OOM_H | ||
3 | |||
4 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ | ||
5 | #define OOM_DISABLE (-17) | ||
6 | /* inclusive */ | ||
7 | #define OOM_ADJUST_MIN (-16) | ||
8 | #define OOM_ADJUST_MAX 15 | ||
9 | |||
10 | #endif | ||
diff --git a/include/linux/parport.h b/include/linux/parport.h index 5bf321e82c99..80682aaa8f18 100644 --- a/include/linux/parport.h +++ b/include/linux/parport.h | |||
@@ -229,7 +229,7 @@ struct pardevice { | |||
229 | int (*preempt)(void *); | 229 | int (*preempt)(void *); |
230 | void (*wakeup)(void *); | 230 | void (*wakeup)(void *); |
231 | void *private; | 231 | void *private; |
232 | void (*irq_func)(int, void *, struct pt_regs *); | 232 | void (*irq_func)(int, void *); |
233 | unsigned int flags; | 233 | unsigned int flags; |
234 | struct pardevice *next; | 234 | struct pardevice *next; |
235 | struct pardevice *prev; | 235 | struct pardevice *prev; |
@@ -375,7 +375,7 @@ extern void parport_put_port (struct parport *); | |||
375 | struct pardevice *parport_register_device(struct parport *port, | 375 | struct pardevice *parport_register_device(struct parport *port, |
376 | const char *name, | 376 | const char *name, |
377 | int (*pf)(void *), void (*kf)(void *), | 377 | int (*pf)(void *), void (*kf)(void *), |
378 | void (*irq_func)(int, void *, struct pt_regs *), | 378 | void (*irq_func)(int, void *), |
379 | int flags, void *handle); | 379 | int flags, void *handle); |
380 | 380 | ||
381 | /* parport_unregister unlinks a device from the chain. */ | 381 | /* parport_unregister unlinks a device from the chain. */ |
@@ -457,7 +457,7 @@ static __inline__ int parport_yield_blocking(struct pardevice *dev) | |||
457 | #define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ | 457 | #define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ |
458 | 458 | ||
459 | /* IEEE1284 functions */ | 459 | /* IEEE1284 functions */ |
460 | extern void parport_ieee1284_interrupt (int, void *, struct pt_regs *); | 460 | extern void parport_ieee1284_interrupt (int, void *); |
461 | extern int parport_negotiate (struct parport *, int mode); | 461 | extern int parport_negotiate (struct parport *, int mode); |
462 | extern ssize_t parport_write (struct parport *, const void *buf, size_t len); | 462 | extern ssize_t parport_write (struct parport *, const void *buf, size_t len); |
463 | extern ssize_t parport_read (struct parport *, void *buf, size_t len); | 463 | extern ssize_t parport_read (struct parport *, void *buf, size_t len); |
@@ -502,8 +502,7 @@ extern void parport_daisy_fini (struct parport *port); | |||
502 | extern struct pardevice *parport_open (int devnum, const char *name, | 502 | extern struct pardevice *parport_open (int devnum, const char *name, |
503 | int (*pf) (void *), | 503 | int (*pf) (void *), |
504 | void (*kf) (void *), | 504 | void (*kf) (void *), |
505 | void (*irqf) (int, void *, | 505 | void (*irqf) (int, void *), |
506 | struct pt_regs *), | ||
507 | int flags, void *handle); | 506 | int flags, void *handle); |
508 | extern void parport_close (struct pardevice *dev); | 507 | extern void parport_close (struct pardevice *dev); |
509 | extern ssize_t parport_device_id (int devnum, char *buffer, size_t len); | 508 | extern ssize_t parport_device_id (int devnum, char *buffer, size_t len); |
@@ -512,13 +511,12 @@ extern void parport_daisy_deselect_all (struct parport *port); | |||
512 | extern int parport_daisy_select (struct parport *port, int daisy, int mode); | 511 | extern int parport_daisy_select (struct parport *port, int daisy, int mode); |
513 | 512 | ||
514 | /* Lowlevel drivers _can_ call this support function to handle irqs. */ | 513 | /* Lowlevel drivers _can_ call this support function to handle irqs. */ |
515 | static __inline__ void parport_generic_irq(int irq, struct parport *port, | 514 | static __inline__ void parport_generic_irq(int irq, struct parport *port) |
516 | struct pt_regs *regs) | ||
517 | { | 515 | { |
518 | parport_ieee1284_interrupt (irq, port, regs); | 516 | parport_ieee1284_interrupt (irq, port); |
519 | read_lock(&port->cad_lock); | 517 | read_lock(&port->cad_lock); |
520 | if (port->cad && port->cad->irq_func) | 518 | if (port->cad && port->cad->irq_func) |
521 | port->cad->irq_func(irq, port->cad->private, regs); | 519 | port->cad->irq_func(irq, port->cad->private); |
522 | read_unlock(&port->cad_lock); | 520 | read_unlock(&port->cad_lock); |
523 | } | 521 | } |
524 | 522 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index 4431ce4e1e6f..4689e2a699c0 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -443,6 +443,7 @@ extern void pci_remove_bus(struct pci_bus *b); | |||
443 | extern void pci_remove_bus_device(struct pci_dev *dev); | 443 | extern void pci_remove_bus_device(struct pci_dev *dev); |
444 | extern void pci_stop_bus_device(struct pci_dev *dev); | 444 | extern void pci_stop_bus_device(struct pci_dev *dev); |
445 | void pci_setup_cardbus(struct pci_bus *bus); | 445 | void pci_setup_cardbus(struct pci_bus *bus); |
446 | extern void pci_sort_breadthfirst(void); | ||
446 | 447 | ||
447 | /* Generic PCI functions exported to card drivers */ | 448 | /* Generic PCI functions exported to card drivers */ |
448 | 449 | ||
@@ -452,13 +453,14 @@ struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); | |||
452 | int pci_find_capability (struct pci_dev *dev, int cap); | 453 | int pci_find_capability (struct pci_dev *dev, int cap); |
453 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); | 454 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); |
454 | int pci_find_ext_capability (struct pci_dev *dev, int cap); | 455 | int pci_find_ext_capability (struct pci_dev *dev, int cap); |
455 | struct pci_bus * pci_find_next_bus(const struct pci_bus *from); | 456 | struct pci_bus *pci_find_next_bus(const struct pci_bus *from); |
456 | 457 | ||
457 | struct pci_dev *pci_get_device (unsigned int vendor, unsigned int device, struct pci_dev *from); | 458 | struct pci_dev *pci_get_device (unsigned int vendor, unsigned int device, struct pci_dev *from); |
458 | struct pci_dev *pci_get_subsys (unsigned int vendor, unsigned int device, | 459 | struct pci_dev *pci_get_subsys (unsigned int vendor, unsigned int device, |
459 | unsigned int ss_vendor, unsigned int ss_device, | 460 | unsigned int ss_vendor, unsigned int ss_device, |
460 | struct pci_dev *from); | 461 | struct pci_dev *from); |
461 | struct pci_dev *pci_get_slot (struct pci_bus *bus, unsigned int devfn); | 462 | struct pci_dev *pci_get_slot (struct pci_bus *bus, unsigned int devfn); |
463 | struct pci_dev *pci_get_bus_and_slot (unsigned int bus, unsigned int devfn); | ||
462 | struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from); | 464 | struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from); |
463 | int pci_dev_present(const struct pci_device_id *ids); | 465 | int pci_dev_present(const struct pci_device_id *ids); |
464 | 466 | ||
@@ -595,6 +597,7 @@ struct msix_entry { | |||
595 | u16 entry; /* driver uses to specify entry, OS writes */ | 597 | u16 entry; /* driver uses to specify entry, OS writes */ |
596 | }; | 598 | }; |
597 | 599 | ||
600 | |||
598 | #ifndef CONFIG_PCI_MSI | 601 | #ifndef CONFIG_PCI_MSI |
599 | static inline void pci_scan_msi_device(struct pci_dev *dev) {} | 602 | static inline void pci_scan_msi_device(struct pci_dev *dev) {} |
600 | static inline int pci_enable_msi(struct pci_dev *dev) {return -1;} | 603 | static inline int pci_enable_msi(struct pci_dev *dev) {return -1;} |
@@ -613,6 +616,12 @@ extern void pci_disable_msix(struct pci_dev *dev); | |||
613 | extern void msi_remove_pci_irq_vectors(struct pci_dev *dev); | 616 | extern void msi_remove_pci_irq_vectors(struct pci_dev *dev); |
614 | #endif | 617 | #endif |
615 | 618 | ||
619 | #ifdef CONFIG_HT_IRQ | ||
620 | /* The functions a driver should call */ | ||
621 | int ht_create_irq(struct pci_dev *dev, int idx); | ||
622 | void ht_destroy_irq(unsigned int irq); | ||
623 | #endif /* CONFIG_HT_IRQ */ | ||
624 | |||
616 | extern void pci_block_user_cfg_access(struct pci_dev *dev); | 625 | extern void pci_block_user_cfg_access(struct pci_dev *dev); |
617 | extern void pci_unblock_user_cfg_access(struct pci_dev *dev); | 626 | extern void pci_unblock_user_cfg_access(struct pci_dev *dev); |
618 | 627 | ||
diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h new file mode 100644 index 000000000000..a675a05c4091 --- /dev/null +++ b/include/linux/pci_hotplug.h | |||
@@ -0,0 +1,236 @@ | |||
1 | /* | ||
2 | * PCI HotPlug Core Functions | ||
3 | * | ||
4 | * Copyright (C) 1995,2001 Compaq Computer Corporation | ||
5 | * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) | ||
6 | * Copyright (C) 2001 IBM Corp. | ||
7 | * | ||
8 | * All rights reserved. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or (at | ||
13 | * your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, but | ||
16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or | ||
18 | * NON INFRINGEMENT. See the GNU General Public License for more | ||
19 | * details. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public License | ||
22 | * along with this program; if not, write to the Free Software | ||
23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
24 | * | ||
25 | * Send feedback to <kristen.c.accardi@intel.com> | ||
26 | * | ||
27 | */ | ||
28 | #ifndef _PCI_HOTPLUG_H | ||
29 | #define _PCI_HOTPLUG_H | ||
30 | |||
31 | |||
32 | /* These values come from the PCI Hotplug Spec */ | ||
33 | enum pci_bus_speed { | ||
34 | PCI_SPEED_33MHz = 0x00, | ||
35 | PCI_SPEED_66MHz = 0x01, | ||
36 | PCI_SPEED_66MHz_PCIX = 0x02, | ||
37 | PCI_SPEED_100MHz_PCIX = 0x03, | ||
38 | PCI_SPEED_133MHz_PCIX = 0x04, | ||
39 | PCI_SPEED_66MHz_PCIX_ECC = 0x05, | ||
40 | PCI_SPEED_100MHz_PCIX_ECC = 0x06, | ||
41 | PCI_SPEED_133MHz_PCIX_ECC = 0x07, | ||
42 | PCI_SPEED_66MHz_PCIX_266 = 0x09, | ||
43 | PCI_SPEED_100MHz_PCIX_266 = 0x0a, | ||
44 | PCI_SPEED_133MHz_PCIX_266 = 0x0b, | ||
45 | PCI_SPEED_66MHz_PCIX_533 = 0x11, | ||
46 | PCI_SPEED_100MHz_PCIX_533 = 0x12, | ||
47 | PCI_SPEED_133MHz_PCIX_533 = 0x13, | ||
48 | PCI_SPEED_UNKNOWN = 0xff, | ||
49 | }; | ||
50 | |||
51 | /* These values come from the PCI Express Spec */ | ||
52 | enum pcie_link_width { | ||
53 | PCIE_LNK_WIDTH_RESRV = 0x00, | ||
54 | PCIE_LNK_X1 = 0x01, | ||
55 | PCIE_LNK_X2 = 0x02, | ||
56 | PCIE_LNK_X4 = 0x04, | ||
57 | PCIE_LNK_X8 = 0x08, | ||
58 | PCIE_LNK_X12 = 0x0C, | ||
59 | PCIE_LNK_X16 = 0x10, | ||
60 | PCIE_LNK_X32 = 0x20, | ||
61 | PCIE_LNK_WIDTH_UNKNOWN = 0xFF, | ||
62 | }; | ||
63 | |||
64 | enum pcie_link_speed { | ||
65 | PCIE_2PT5GB = 0x14, | ||
66 | PCIE_LNK_SPEED_UNKNOWN = 0xFF, | ||
67 | }; | ||
68 | |||
69 | struct hotplug_slot; | ||
70 | struct hotplug_slot_attribute { | ||
71 | struct attribute attr; | ||
72 | ssize_t (*show)(struct hotplug_slot *, char *); | ||
73 | ssize_t (*store)(struct hotplug_slot *, const char *, size_t); | ||
74 | }; | ||
75 | #define to_hotplug_attr(n) container_of(n, struct hotplug_slot_attribute, attr); | ||
76 | |||
77 | /** | ||
78 | * struct hotplug_slot_ops -the callbacks that the hotplug pci core can use | ||
79 | * @owner: The module owner of this structure | ||
80 | * @enable_slot: Called when the user wants to enable a specific pci slot | ||
81 | * @disable_slot: Called when the user wants to disable a specific pci slot | ||
82 | * @set_attention_status: Called to set the specific slot's attention LED to | ||
83 | * the specified value | ||
84 | * @hardware_test: Called to run a specified hardware test on the specified | ||
85 | * slot. | ||
86 | * @get_power_status: Called to get the current power status of a slot. | ||
87 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
88 | * will be used when this value is requested by a user. | ||
89 | * @get_attention_status: Called to get the current attention status of a slot. | ||
90 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
91 | * will be used when this value is requested by a user. | ||
92 | * @get_latch_status: Called to get the current latch status of a slot. | ||
93 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
94 | * will be used when this value is requested by a user. | ||
95 | * @get_adapter_status: Called to get see if an adapter is present in the slot or not. | ||
96 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
97 | * will be used when this value is requested by a user. | ||
98 | * @get_address: Called to get pci address of a slot. | ||
99 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
100 | * will be used when this value is requested by a user. | ||
101 | * @get_max_bus_speed: Called to get the max bus speed for a slot. | ||
102 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
103 | * will be used when this value is requested by a user. | ||
104 | * @get_cur_bus_speed: Called to get the current bus speed for a slot. | ||
105 | * If this field is NULL, the value passed in the struct hotplug_slot_info | ||
106 | * will be used when this value is requested by a user. | ||
107 | * | ||
108 | * The table of function pointers that is passed to the hotplug pci core by a | ||
109 | * hotplug pci driver. These functions are called by the hotplug pci core when | ||
110 | * the user wants to do something to a specific slot (query it for information, | ||
111 | * set an LED, enable / disable power, etc.) | ||
112 | */ | ||
113 | struct hotplug_slot_ops { | ||
114 | struct module *owner; | ||
115 | int (*enable_slot) (struct hotplug_slot *slot); | ||
116 | int (*disable_slot) (struct hotplug_slot *slot); | ||
117 | int (*set_attention_status) (struct hotplug_slot *slot, u8 value); | ||
118 | int (*hardware_test) (struct hotplug_slot *slot, u32 value); | ||
119 | int (*get_power_status) (struct hotplug_slot *slot, u8 *value); | ||
120 | int (*get_attention_status) (struct hotplug_slot *slot, u8 *value); | ||
121 | int (*get_latch_status) (struct hotplug_slot *slot, u8 *value); | ||
122 | int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value); | ||
123 | int (*get_address) (struct hotplug_slot *slot, u32 *value); | ||
124 | int (*get_max_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); | ||
125 | int (*get_cur_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value); | ||
126 | }; | ||
127 | |||
128 | /** | ||
129 | * struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot | ||
130 | * @power: if power is enabled or not (1/0) | ||
131 | * @attention_status: if the attention light is enabled or not (1/0) | ||
132 | * @latch_status: if the latch (if any) is open or closed (1/0) | ||
133 | * @adapter_present: if there is a pci board present in the slot or not (1/0) | ||
134 | * @address: (domain << 16 | bus << 8 | dev) | ||
135 | * | ||
136 | * Used to notify the hotplug pci core of the status of a specific slot. | ||
137 | */ | ||
138 | struct hotplug_slot_info { | ||
139 | u8 power_status; | ||
140 | u8 attention_status; | ||
141 | u8 latch_status; | ||
142 | u8 adapter_status; | ||
143 | u32 address; | ||
144 | enum pci_bus_speed max_bus_speed; | ||
145 | enum pci_bus_speed cur_bus_speed; | ||
146 | }; | ||
147 | |||
148 | /** | ||
149 | * struct hotplug_slot - used to register a physical slot with the hotplug pci core | ||
150 | * @name: the name of the slot being registered. This string must | ||
151 | * be unique amoung slots registered on this system. | ||
152 | * @ops: pointer to the &struct hotplug_slot_ops to be used for this slot | ||
153 | * @info: pointer to the &struct hotplug_slot_info for the initial values for | ||
154 | * this slot. | ||
155 | * @release: called during pci_hp_deregister to free memory allocated in a | ||
156 | * hotplug_slot structure. | ||
157 | * @private: used by the hotplug pci controller driver to store whatever it | ||
158 | * needs. | ||
159 | */ | ||
160 | struct hotplug_slot { | ||
161 | char *name; | ||
162 | struct hotplug_slot_ops *ops; | ||
163 | struct hotplug_slot_info *info; | ||
164 | void (*release) (struct hotplug_slot *slot); | ||
165 | void *private; | ||
166 | |||
167 | /* Variables below this are for use only by the hotplug pci core. */ | ||
168 | struct list_head slot_list; | ||
169 | struct kobject kobj; | ||
170 | }; | ||
171 | #define to_hotplug_slot(n) container_of(n, struct hotplug_slot, kobj) | ||
172 | |||
173 | extern int pci_hp_register (struct hotplug_slot *slot); | ||
174 | extern int pci_hp_deregister (struct hotplug_slot *slot); | ||
175 | extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot, | ||
176 | struct hotplug_slot_info *info); | ||
177 | extern struct subsystem pci_hotplug_slots_subsys; | ||
178 | |||
179 | /* PCI Setting Record (Type 0) */ | ||
180 | struct hpp_type0 { | ||
181 | u32 revision; | ||
182 | u8 cache_line_size; | ||
183 | u8 latency_timer; | ||
184 | u8 enable_serr; | ||
185 | u8 enable_perr; | ||
186 | }; | ||
187 | |||
188 | /* PCI-X Setting Record (Type 1) */ | ||
189 | struct hpp_type1 { | ||
190 | u32 revision; | ||
191 | u8 max_mem_read; | ||
192 | u8 avg_max_split; | ||
193 | u16 tot_max_split; | ||
194 | }; | ||
195 | |||
196 | /* PCI Express Setting Record (Type 2) */ | ||
197 | struct hpp_type2 { | ||
198 | u32 revision; | ||
199 | u32 unc_err_mask_and; | ||
200 | u32 unc_err_mask_or; | ||
201 | u32 unc_err_sever_and; | ||
202 | u32 unc_err_sever_or; | ||
203 | u32 cor_err_mask_and; | ||
204 | u32 cor_err_mask_or; | ||
205 | u32 adv_err_cap_and; | ||
206 | u32 adv_err_cap_or; | ||
207 | u16 pci_exp_devctl_and; | ||
208 | u16 pci_exp_devctl_or; | ||
209 | u16 pci_exp_lnkctl_and; | ||
210 | u16 pci_exp_lnkctl_or; | ||
211 | u32 sec_unc_err_sever_and; | ||
212 | u32 sec_unc_err_sever_or; | ||
213 | u32 sec_unc_err_mask_and; | ||
214 | u32 sec_unc_err_mask_or; | ||
215 | }; | ||
216 | |||
217 | struct hotplug_params { | ||
218 | struct hpp_type0 *t0; /* Type0: NULL if not available */ | ||
219 | struct hpp_type1 *t1; /* Type1: NULL if not available */ | ||
220 | struct hpp_type2 *t2; /* Type2: NULL if not available */ | ||
221 | struct hpp_type0 type0_data; | ||
222 | struct hpp_type1 type1_data; | ||
223 | struct hpp_type2 type2_data; | ||
224 | }; | ||
225 | |||
226 | #ifdef CONFIG_ACPI | ||
227 | #include <acpi/acpi.h> | ||
228 | #include <acpi/acpi_bus.h> | ||
229 | #include <acpi/actypes.h> | ||
230 | extern acpi_status acpi_run_oshp(acpi_handle handle); | ||
231 | extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus, | ||
232 | struct hotplug_params *hpp); | ||
233 | int acpi_root_bridge(acpi_handle handle); | ||
234 | #endif | ||
235 | #endif | ||
236 | |||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f069df245469..f3a168f3c9df 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -2351,3 +2351,5 @@ | |||
2351 | #define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897 | 2351 | #define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897 |
2352 | #define PCI_DEVICE_ID_RME_DIGI32_8 0x9898 | 2352 | #define PCI_DEVICE_ID_RME_DIGI32_8 0x9898 |
2353 | 2353 | ||
2354 | #define PCI_VENDOR_ID_QUICKNET 0x15E2 | ||
2355 | #define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 | ||
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index 7d0e26cba420..c312a12ad2d6 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
@@ -12,6 +12,11 @@ | |||
12 | * PCI Local Bus Specification | 12 | * PCI Local Bus Specification |
13 | * PCI to PCI Bridge Specification | 13 | * PCI to PCI Bridge Specification |
14 | * PCI System Design Guide | 14 | * PCI System Design Guide |
15 | * | ||
16 | * For hypertransport information, please consult the following manuals | ||
17 | * from http://www.hypertransport.org | ||
18 | * | ||
19 | * The Hypertransport I/O Link Specification | ||
15 | */ | 20 | */ |
16 | 21 | ||
17 | #ifndef LINUX_PCI_REGS_H | 22 | #ifndef LINUX_PCI_REGS_H |
@@ -463,4 +468,20 @@ | |||
463 | #define PCI_PWR_CAP 12 /* Capability */ | 468 | #define PCI_PWR_CAP 12 /* Capability */ |
464 | #define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */ | 469 | #define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */ |
465 | 470 | ||
471 | /* Hypertransport sub capability types */ | ||
472 | #define HT_CAPTYPE_SLAVE 0x00 /* Slave/Primary link configuration */ | ||
473 | #define HT_CAPTYPE_HOST 0x20 /* Host/Secondary link configuration */ | ||
474 | #define HT_CAPTYPE_IRQ 0x80 /* IRQ Configuration */ | ||
475 | #define HT_CAPTYPE_REMAPPING_40 0xA0 /* 40 bit address remapping */ | ||
476 | #define HT_CAPTYPE_REMAPPING_64 0xA2 /* 64 bit address remapping */ | ||
477 | #define HT_CAPTYPE_UNITID_CLUMP 0x90 /* Unit ID clumping */ | ||
478 | #define HT_CAPTYPE_EXTCONF 0x98 /* Extended Configuration Space Access */ | ||
479 | #define HT_CAPTYPE_MSI_MAPPING 0xA8 /* MSI Mapping Capability */ | ||
480 | #define HT_CAPTYPE_DIRECT_ROUTE 0xB0 /* Direct routing configuration */ | ||
481 | #define HT_CAPTYPE_VCSET 0xB8 /* Virtual Channel configuration */ | ||
482 | #define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */ | ||
483 | #define HT_CAPTYPE_GEN3 0xD0 /* Generation 3 hypertransport configuration */ | ||
484 | #define HT_CAPTYPE_PM 0xE0 /* Hypertransport powermanagement configuration */ | ||
485 | |||
486 | |||
466 | #endif /* LINUX_PCI_REGS_H */ | 487 | #endif /* LINUX_PCI_REGS_H */ |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 46ec72fa2c84..600e3d387ffc 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -19,7 +19,7 @@ | |||
19 | * we force a syntax error here if it isn't. | 19 | * we force a syntax error here if it isn't. |
20 | */ | 20 | */ |
21 | #define get_cpu_var(var) (*({ \ | 21 | #define get_cpu_var(var) (*({ \ |
22 | extern int simple_indentifier_##var(void); \ | 22 | extern int simple_identifier_##var(void); \ |
23 | preempt_disable(); \ | 23 | preempt_disable(); \ |
24 | &__get_cpu_var(var); })) | 24 | &__get_cpu_var(var); })) |
25 | #define put_cpu_var(var) preempt_enable() | 25 | #define put_cpu_var(var) preempt_enable() |
diff --git a/include/linux/personality.h b/include/linux/personality.h index 80d780e5a8f5..bf4cf2080e5c 100644 --- a/include/linux/personality.h +++ b/include/linux/personality.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _LINUX_PERSONALITY_H | 1 | #ifndef _LINUX_PERSONALITY_H |
2 | #define _LINUX_PERSONALITY_H | 2 | #define _LINUX_PERSONALITY_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | ||
5 | |||
4 | /* | 6 | /* |
5 | * Handling of different ABIs (personalities). | 7 | * Handling of different ABIs (personalities). |
6 | */ | 8 | */ |
@@ -12,6 +14,8 @@ extern int register_exec_domain(struct exec_domain *); | |||
12 | extern int unregister_exec_domain(struct exec_domain *); | 14 | extern int unregister_exec_domain(struct exec_domain *); |
13 | extern int __set_personality(unsigned long); | 15 | extern int __set_personality(unsigned long); |
14 | 16 | ||
17 | #endif /* __KERNEL__ */ | ||
18 | |||
15 | /* | 19 | /* |
16 | * Flags for bug emulation. | 20 | * Flags for bug emulation. |
17 | * | 21 | * |
@@ -71,6 +75,7 @@ enum { | |||
71 | PER_MASK = 0x00ff, | 75 | PER_MASK = 0x00ff, |
72 | }; | 76 | }; |
73 | 77 | ||
78 | #ifdef __KERNEL__ | ||
74 | 79 | ||
75 | /* | 80 | /* |
76 | * Description of an execution domain. | 81 | * Description of an execution domain. |
@@ -111,4 +116,6 @@ struct exec_domain { | |||
111 | #define set_personality(pers) \ | 116 | #define set_personality(pers) \ |
112 | ((current->personality == pers) ? 0 : __set_personality(pers)) | 117 | ((current->personality == pers) ? 0 : __set_personality(pers)) |
113 | 118 | ||
119 | #endif /* __KERNEL__ */ | ||
120 | |||
114 | #endif /* _LINUX_PERSONALITY_H */ | 121 | #endif /* _LINUX_PERSONALITY_H */ |
diff --git a/include/linux/profile.h b/include/linux/profile.h index e633004ae052..acce53fd38b6 100644 --- a/include/linux/profile.h +++ b/include/linux/profile.h | |||
@@ -17,7 +17,7 @@ struct notifier_block; | |||
17 | 17 | ||
18 | /* init basic kernel profiler */ | 18 | /* init basic kernel profiler */ |
19 | void __init profile_init(void); | 19 | void __init profile_init(void); |
20 | void profile_tick(int, struct pt_regs *); | 20 | void profile_tick(int); |
21 | void profile_hit(int, void *); | 21 | void profile_hit(int, void *); |
22 | #ifdef CONFIG_PROC_FS | 22 | #ifdef CONFIG_PROC_FS |
23 | void create_prof_cpu_mask(struct proc_dir_entry *); | 23 | void create_prof_cpu_mask(struct proc_dir_entry *); |
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h index d0dd38b3a2fd..d22ad392242a 100644 --- a/include/linux/raid_class.h +++ b/include/linux/raid_class.h | |||
@@ -77,5 +77,6 @@ DEFINE_RAID_ATTRIBUTE(enum raid_state, state) | |||
77 | struct raid_template *raid_class_attach(struct raid_function_template *); | 77 | struct raid_template *raid_class_attach(struct raid_function_template *); |
78 | void raid_class_release(struct raid_template *); | 78 | void raid_class_release(struct raid_template *); |
79 | 79 | ||
80 | void raid_component_add(struct raid_template *, struct device *, | 80 | int __must_check raid_component_add(struct raid_template *, struct device *, |
81 | struct device *); | 81 | struct device *); |
82 | |||
diff --git a/include/linux/random.h b/include/linux/random.h index 5d6456bcdeba..0248b30e306d 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
@@ -69,6 +69,9 @@ extern struct file_operations random_fops, urandom_fops; | |||
69 | unsigned int get_random_int(void); | 69 | unsigned int get_random_int(void); |
70 | unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len); | 70 | unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len); |
71 | 71 | ||
72 | u32 random32(void); | ||
73 | void srandom32(u32 seed); | ||
74 | |||
72 | #endif /* __KERNEL___ */ | 75 | #endif /* __KERNEL___ */ |
73 | 76 | ||
74 | #endif /* _LINUX_RANDOM_H */ | 77 | #endif /* _LINUX_RANDOM_H */ |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index b4ca73d65891..c6b7485eac7c 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -19,7 +19,7 @@ | |||
19 | * | 19 | * |
20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | 20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> |
21 | * | 21 | * |
22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | 22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> |
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. |
24 | * Papers: | 24 | * Papers: |
25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | 25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf |
@@ -66,6 +66,8 @@ struct rcu_ctrlblk { | |||
66 | long completed; /* Number of the last completed batch */ | 66 | long completed; /* Number of the last completed batch */ |
67 | int next_pending; /* Is the next batch already waiting? */ | 67 | int next_pending; /* Is the next batch already waiting? */ |
68 | 68 | ||
69 | int signaled; | ||
70 | |||
69 | spinlock_t lock ____cacheline_internodealigned_in_smp; | 71 | spinlock_t lock ____cacheline_internodealigned_in_smp; |
70 | cpumask_t cpumask; /* CPUs that need to switch in order */ | 72 | cpumask_t cpumask; /* CPUs that need to switch in order */ |
71 | /* for current batch to proceed. */ | 73 | /* for current batch to proceed. */ |
@@ -106,9 +108,6 @@ struct rcu_data { | |||
106 | long blimit; /* Upper limit on a processed batch */ | 108 | long blimit; /* Upper limit on a processed batch */ |
107 | int cpu; | 109 | int cpu; |
108 | struct rcu_head barrier; | 110 | struct rcu_head barrier; |
109 | #ifdef CONFIG_SMP | ||
110 | long last_rs_qlen; /* qlen during the last resched */ | ||
111 | #endif | ||
112 | }; | 111 | }; |
113 | 112 | ||
114 | DECLARE_PER_CPU(struct rcu_data, rcu_data); | 113 | DECLARE_PER_CPU(struct rcu_data, rcu_data); |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index b89f09357054..09ff4c3e2713 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
@@ -208,7 +208,7 @@ int rtc_register(rtc_task_t *task); | |||
208 | int rtc_unregister(rtc_task_t *task); | 208 | int rtc_unregister(rtc_task_t *task); |
209 | int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg); | 209 | int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg); |
210 | void rtc_get_rtc_time(struct rtc_time *rtc_tm); | 210 | void rtc_get_rtc_time(struct rtc_time *rtc_tm); |
211 | irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs); | 211 | irqreturn_t rtc_interrupt(int irq, void *dev_id); |
212 | 212 | ||
213 | #endif /* __KERNEL__ */ | 213 | #endif /* __KERNEL__ */ |
214 | 214 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index 331f4502e92b..6735c1cf334c 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1065,9 +1065,10 @@ static inline int pid_alive(struct task_struct *p) | |||
1065 | } | 1065 | } |
1066 | 1066 | ||
1067 | /** | 1067 | /** |
1068 | * is_init - check if a task structure is the first user space | 1068 | * is_init - check if a task structure is init |
1069 | * task the kernel created. | 1069 | * @tsk: Task structure to be checked. |
1070 | * @p: Task structure to be checked. | 1070 | * |
1071 | * Check if a task structure is the first user space task the kernel created. | ||
1071 | */ | 1072 | */ |
1072 | static inline int is_init(struct task_struct *tsk) | 1073 | static inline int is_init(struct task_struct *tsk) |
1073 | { | 1074 | { |
diff --git a/include/linux/scx200.h b/include/linux/scx200.h index 693c0557e70b..de466e11e271 100644 --- a/include/linux/scx200.h +++ b/include/linux/scx200.h | |||
@@ -32,7 +32,7 @@ extern unsigned scx200_cb_base; | |||
32 | 32 | ||
33 | /* High Resolution Timer */ | 33 | /* High Resolution Timer */ |
34 | #define SCx200_TIMER_OFFSET 0x08 | 34 | #define SCx200_TIMER_OFFSET 0x08 |
35 | #define SCx200_TIMER_SIZE 0x05 | 35 | #define SCx200_TIMER_SIZE 0x06 |
36 | 36 | ||
37 | /* Clock Generators */ | 37 | /* Clock Generators */ |
38 | #define SCx200_CLOCKGEN_OFFSET 0x10 | 38 | #define SCx200_CLOCKGEN_OFFSET 0x10 |
diff --git a/include/linux/security.h b/include/linux/security.h index 9b5fea81f55e..b200b9856f32 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -882,7 +882,8 @@ struct request_sock; | |||
882 | * Check permission when a flow selects a xfrm_policy for processing | 882 | * Check permission when a flow selects a xfrm_policy for processing |
883 | * XFRMs on a packet. The hook is called when selecting either a | 883 | * XFRMs on a packet. The hook is called when selecting either a |
884 | * per-socket policy or a generic xfrm policy. | 884 | * per-socket policy or a generic xfrm policy. |
885 | * Return 0 if permission is granted. | 885 | * Return 0 if permission is granted, -ESRCH otherwise, or -errno |
886 | * on other errors. | ||
886 | * @xfrm_state_pol_flow_match: | 887 | * @xfrm_state_pol_flow_match: |
887 | * @x contains the state to match. | 888 | * @x contains the state to match. |
888 | * @xp contains the policy to check for a match. | 889 | * @xp contains the policy to check for a match. |
@@ -891,6 +892,7 @@ struct request_sock; | |||
891 | * @xfrm_flow_state_match: | 892 | * @xfrm_flow_state_match: |
892 | * @fl contains the flow key to match. | 893 | * @fl contains the flow key to match. |
893 | * @xfrm points to the xfrm_state to match. | 894 | * @xfrm points to the xfrm_state to match. |
895 | * @xp points to the xfrm_policy to match. | ||
894 | * Return 1 if there is a match. | 896 | * Return 1 if there is a match. |
895 | * @xfrm_decode_session: | 897 | * @xfrm_decode_session: |
896 | * @skb points to skb to decode. | 898 | * @skb points to skb to decode. |
@@ -1388,7 +1390,8 @@ struct security_operations { | |||
1388 | int (*xfrm_policy_lookup)(struct xfrm_policy *xp, u32 fl_secid, u8 dir); | 1390 | int (*xfrm_policy_lookup)(struct xfrm_policy *xp, u32 fl_secid, u8 dir); |
1389 | int (*xfrm_state_pol_flow_match)(struct xfrm_state *x, | 1391 | int (*xfrm_state_pol_flow_match)(struct xfrm_state *x, |
1390 | struct xfrm_policy *xp, struct flowi *fl); | 1392 | struct xfrm_policy *xp, struct flowi *fl); |
1391 | int (*xfrm_flow_state_match)(struct flowi *fl, struct xfrm_state *xfrm); | 1393 | int (*xfrm_flow_state_match)(struct flowi *fl, struct xfrm_state *xfrm, |
1394 | struct xfrm_policy *xp); | ||
1392 | int (*xfrm_decode_session)(struct sk_buff *skb, u32 *secid, int ckall); | 1395 | int (*xfrm_decode_session)(struct sk_buff *skb, u32 *secid, int ckall); |
1393 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ | 1396 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ |
1394 | 1397 | ||
@@ -3120,11 +3123,6 @@ static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm | |||
3120 | return security_ops->xfrm_policy_alloc_security(xp, sec_ctx, NULL); | 3123 | return security_ops->xfrm_policy_alloc_security(xp, sec_ctx, NULL); |
3121 | } | 3124 | } |
3122 | 3125 | ||
3123 | static inline int security_xfrm_sock_policy_alloc(struct xfrm_policy *xp, struct sock *sk) | ||
3124 | { | ||
3125 | return security_ops->xfrm_policy_alloc_security(xp, NULL, sk); | ||
3126 | } | ||
3127 | |||
3128 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) | 3126 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) |
3129 | { | 3127 | { |
3130 | return security_ops->xfrm_policy_clone_security(old, new); | 3128 | return security_ops->xfrm_policy_clone_security(old, new); |
@@ -3175,9 +3173,10 @@ static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, | |||
3175 | return security_ops->xfrm_state_pol_flow_match(x, xp, fl); | 3173 | return security_ops->xfrm_state_pol_flow_match(x, xp, fl); |
3176 | } | 3174 | } |
3177 | 3175 | ||
3178 | static inline int security_xfrm_flow_state_match(struct flowi *fl, struct xfrm_state *xfrm) | 3176 | static inline int security_xfrm_flow_state_match(struct flowi *fl, |
3177 | struct xfrm_state *xfrm, struct xfrm_policy *xp) | ||
3179 | { | 3178 | { |
3180 | return security_ops->xfrm_flow_state_match(fl, xfrm); | 3179 | return security_ops->xfrm_flow_state_match(fl, xfrm, xp); |
3181 | } | 3180 | } |
3182 | 3181 | ||
3183 | static inline int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid) | 3182 | static inline int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid) |
@@ -3197,11 +3196,6 @@ static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm | |||
3197 | return 0; | 3196 | return 0; |
3198 | } | 3197 | } |
3199 | 3198 | ||
3200 | static inline int security_xfrm_sock_policy_alloc(struct xfrm_policy *xp, struct sock *sk) | ||
3201 | { | ||
3202 | return 0; | ||
3203 | } | ||
3204 | |||
3205 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) | 3199 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) |
3206 | { | 3200 | { |
3207 | return 0; | 3201 | return 0; |
@@ -3249,7 +3243,7 @@ static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, | |||
3249 | } | 3243 | } |
3250 | 3244 | ||
3251 | static inline int security_xfrm_flow_state_match(struct flowi *fl, | 3245 | static inline int security_xfrm_flow_state_match(struct flowi *fl, |
3252 | struct xfrm_state *xfrm) | 3246 | struct xfrm_state *xfrm, struct xfrm_policy *xp) |
3253 | { | 3247 | { |
3254 | return 1; | 3248 | return 1; |
3255 | } | 3249 | } |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index de2e68159d96..463ab953b092 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -67,8 +67,8 @@ | |||
67 | /* Parisc type numbers. */ | 67 | /* Parisc type numbers. */ |
68 | #define PORT_MUX 48 | 68 | #define PORT_MUX 48 |
69 | 69 | ||
70 | /* Atmel AT91xxx SoC */ | 70 | /* Atmel AT91 / AT32 SoC */ |
71 | #define PORT_AT91 49 | 71 | #define PORT_ATMEL 49 |
72 | 72 | ||
73 | /* Macintosh Zilog type numbers */ | 73 | /* Macintosh Zilog type numbers */ |
74 | #define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */ | 74 | #define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */ |
@@ -409,13 +409,12 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port); | |||
409 | * The following are helper functions for the low level drivers. | 409 | * The following are helper functions for the low level drivers. |
410 | */ | 410 | */ |
411 | static inline int | 411 | static inline int |
412 | uart_handle_sysrq_char(struct uart_port *port, unsigned int ch, | 412 | uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) |
413 | struct pt_regs *regs) | ||
414 | { | 413 | { |
415 | #ifdef SUPPORT_SYSRQ | 414 | #ifdef SUPPORT_SYSRQ |
416 | if (port->sysrq) { | 415 | if (port->sysrq) { |
417 | if (ch && time_before(jiffies, port->sysrq)) { | 416 | if (ch && time_before(jiffies, port->sysrq)) { |
418 | handle_sysrq(ch, regs, port->info->tty); | 417 | handle_sysrq(ch, port->info->tty); |
419 | port->sysrq = 0; | 418 | port->sysrq = 0; |
420 | return 1; | 419 | return 1; |
421 | } | 420 | } |
@@ -425,7 +424,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch, | |||
425 | return 0; | 424 | return 0; |
426 | } | 425 | } |
427 | #ifndef SUPPORT_SYSRQ | 426 | #ifndef SUPPORT_SYSRQ |
428 | #define uart_handle_sysrq_char(port,ch,regs) uart_handle_sysrq_char(port, 0, NULL) | 427 | #define uart_handle_sysrq_char(port,ch) uart_handle_sysrq_char(port, 0) |
429 | #endif | 428 | #endif |
430 | 429 | ||
431 | /* | 430 | /* |
diff --git a/include/linux/serio.h b/include/linux/serio.h index c9069310b6ac..b99c5ca9708d 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -41,6 +41,7 @@ struct serio { | |||
41 | void (*stop)(struct serio *); | 41 | void (*stop)(struct serio *); |
42 | 42 | ||
43 | struct serio *parent, *child; | 43 | struct serio *parent, *child; |
44 | unsigned int depth; /* level of nesting in serio hierarchy */ | ||
44 | 45 | ||
45 | struct serio_driver *drv; /* accessed from interrupt, must be protected by serio->lock and serio->sem */ | 46 | struct serio_driver *drv; /* accessed from interrupt, must be protected by serio->lock and serio->sem */ |
46 | struct mutex drv_mutex; /* protects serio->drv so attributes can pin driver */ | 47 | struct mutex drv_mutex; /* protects serio->drv so attributes can pin driver */ |
@@ -60,8 +61,7 @@ struct serio_driver { | |||
60 | unsigned int manual_bind; | 61 | unsigned int manual_bind; |
61 | 62 | ||
62 | void (*write_wakeup)(struct serio *); | 63 | void (*write_wakeup)(struct serio *); |
63 | irqreturn_t (*interrupt)(struct serio *, unsigned char, | 64 | irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int); |
64 | unsigned int, struct pt_regs *); | ||
65 | int (*connect)(struct serio *, struct serio_driver *drv); | 65 | int (*connect)(struct serio *, struct serio_driver *drv); |
66 | int (*reconnect)(struct serio *); | 66 | int (*reconnect)(struct serio *); |
67 | void (*disconnect)(struct serio *); | 67 | void (*disconnect)(struct serio *); |
@@ -75,7 +75,7 @@ int serio_open(struct serio *serio, struct serio_driver *drv); | |||
75 | void serio_close(struct serio *serio); | 75 | void serio_close(struct serio *serio); |
76 | void serio_rescan(struct serio *serio); | 76 | void serio_rescan(struct serio *serio); |
77 | void serio_reconnect(struct serio *serio); | 77 | void serio_reconnect(struct serio *serio); |
78 | irqreturn_t serio_interrupt(struct serio *serio, unsigned char data, unsigned int flags, struct pt_regs *regs); | 78 | irqreturn_t serio_interrupt(struct serio *serio, unsigned char data, unsigned int flags); |
79 | 79 | ||
80 | void __serio_register_port(struct serio *serio, struct module *owner); | 80 | void __serio_register_port(struct serio *serio, struct module *owner); |
81 | static inline void serio_register_port(struct serio *serio) | 81 | static inline void serio_register_port(struct serio *serio) |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 70be57d8ae0d..c4947b8a2c03 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -77,13 +77,6 @@ struct cache_sizes { | |||
77 | extern struct cache_sizes malloc_sizes[]; | 77 | extern struct cache_sizes malloc_sizes[]; |
78 | 78 | ||
79 | extern void *__kmalloc(size_t, gfp_t); | 79 | extern void *__kmalloc(size_t, gfp_t); |
80 | #ifndef CONFIG_DEBUG_SLAB | ||
81 | #define ____kmalloc(size, flags) __kmalloc(size, flags) | ||
82 | #else | ||
83 | extern void *__kmalloc_track_caller(size_t, gfp_t, void*); | ||
84 | #define ____kmalloc(size, flags) \ | ||
85 | __kmalloc_track_caller(size, flags, __builtin_return_address(0)) | ||
86 | #endif | ||
87 | 80 | ||
88 | /** | 81 | /** |
89 | * kmalloc - allocate memory | 82 | * kmalloc - allocate memory |
@@ -153,6 +146,23 @@ found: | |||
153 | return __kmalloc(size, flags); | 146 | return __kmalloc(size, flags); |
154 | } | 147 | } |
155 | 148 | ||
149 | /* | ||
150 | * kmalloc_track_caller is a special version of kmalloc that records the | ||
151 | * calling function of the routine calling it for slab leak tracking instead | ||
152 | * of just the calling function (confusing, eh?). | ||
153 | * It's useful when the call to kmalloc comes from a widely-used standard | ||
154 | * allocator where we care about the real place the memory allocation | ||
155 | * request comes from. | ||
156 | */ | ||
157 | #ifndef CONFIG_DEBUG_SLAB | ||
158 | #define kmalloc_track_caller(size, flags) \ | ||
159 | __kmalloc(size, flags) | ||
160 | #else | ||
161 | extern void *__kmalloc_track_caller(size_t, gfp_t, void*); | ||
162 | #define kmalloc_track_caller(size, flags) \ | ||
163 | __kmalloc_track_caller(size, flags, __builtin_return_address(0)) | ||
164 | #endif | ||
165 | |||
156 | extern void *__kzalloc(size_t, gfp_t); | 166 | extern void *__kzalloc(size_t, gfp_t); |
157 | 167 | ||
158 | /** | 168 | /** |
@@ -271,7 +281,7 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | |||
271 | #define kmem_cache_alloc_node(c, f, n) kmem_cache_alloc(c, f) | 281 | #define kmem_cache_alloc_node(c, f, n) kmem_cache_alloc(c, f) |
272 | #define kmalloc_node(s, f, n) kmalloc(s, f) | 282 | #define kmalloc_node(s, f, n) kmalloc(s, f) |
273 | #define kzalloc(s, f) __kzalloc(s, f) | 283 | #define kzalloc(s, f) __kzalloc(s, f) |
274 | #define ____kmalloc kmalloc | 284 | #define kmalloc_track_caller kmalloc |
275 | 285 | ||
276 | #endif /* CONFIG_SLOB */ | 286 | #endif /* CONFIG_SLOB */ |
277 | 287 | ||
diff --git a/include/linux/smb_fs.h b/include/linux/smb_fs.h index 367d6c3e8ed4..13b3af547864 100644 --- a/include/linux/smb_fs.h +++ b/include/linux/smb_fs.h | |||
@@ -43,17 +43,17 @@ static inline struct smb_inode_info *SMB_I(struct inode *inode) | |||
43 | 43 | ||
44 | /* macro names are short for word, double-word, long value (?) */ | 44 | /* macro names are short for word, double-word, long value (?) */ |
45 | #define WVAL(buf,pos) \ | 45 | #define WVAL(buf,pos) \ |
46 | (le16_to_cpu(get_unaligned((u16 *)((u8 *)(buf) + (pos))))) | 46 | (le16_to_cpu(get_unaligned((__le16 *)((u8 *)(buf) + (pos))))) |
47 | #define DVAL(buf,pos) \ | 47 | #define DVAL(buf,pos) \ |
48 | (le32_to_cpu(get_unaligned((u32 *)((u8 *)(buf) + (pos))))) | 48 | (le32_to_cpu(get_unaligned((__le32 *)((u8 *)(buf) + (pos))))) |
49 | #define LVAL(buf,pos) \ | 49 | #define LVAL(buf,pos) \ |
50 | (le64_to_cpu(get_unaligned((u64 *)((u8 *)(buf) + (pos))))) | 50 | (le64_to_cpu(get_unaligned((__le64 *)((u8 *)(buf) + (pos))))) |
51 | #define WSET(buf,pos,val) \ | 51 | #define WSET(buf,pos,val) \ |
52 | put_unaligned(cpu_to_le16((u16)(val)), (u16 *)((u8 *)(buf) + (pos))) | 52 | put_unaligned(cpu_to_le16((u16)(val)), (__le16 *)((u8 *)(buf) + (pos))) |
53 | #define DSET(buf,pos,val) \ | 53 | #define DSET(buf,pos,val) \ |
54 | put_unaligned(cpu_to_le32((u32)(val)), (u32 *)((u8 *)(buf) + (pos))) | 54 | put_unaligned(cpu_to_le32((u32)(val)), (__le32 *)((u8 *)(buf) + (pos))) |
55 | #define LSET(buf,pos,val) \ | 55 | #define LSET(buf,pos,val) \ |
56 | put_unaligned(cpu_to_le64((u64)(val)), (u64 *)((u8 *)(buf) + (pos))) | 56 | put_unaligned(cpu_to_le64((u64)(val)), (__le64 *)((u8 *)(buf) + (pos))) |
57 | 57 | ||
58 | /* where to find the base of the SMB packet proper */ | 58 | /* where to find the base of the SMB packet proper */ |
59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) | 59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) |
diff --git a/include/linux/sound.h b/include/linux/sound.h index f63d8342ffa3..9e2a94feed6b 100644 --- a/include/linux/sound.h +++ b/include/linux/sound.h | |||
@@ -35,10 +35,8 @@ extern int register_sound_special_device(const struct file_operations *fops, int | |||
35 | extern int register_sound_mixer(const struct file_operations *fops, int dev); | 35 | extern int register_sound_mixer(const struct file_operations *fops, int dev); |
36 | extern int register_sound_midi(const struct file_operations *fops, int dev); | 36 | extern int register_sound_midi(const struct file_operations *fops, int dev); |
37 | extern int register_sound_dsp(const struct file_operations *fops, int dev); | 37 | extern int register_sound_dsp(const struct file_operations *fops, int dev); |
38 | extern int register_sound_synth(const struct file_operations *fops, int dev); | ||
39 | 38 | ||
40 | extern void unregister_sound_special(int unit); | 39 | extern void unregister_sound_special(int unit); |
41 | extern void unregister_sound_mixer(int unit); | 40 | extern void unregister_sound_mixer(int unit); |
42 | extern void unregister_sound_midi(int unit); | 41 | extern void unregister_sound_midi(int unit); |
43 | extern void unregister_sound_dsp(int unit); | 42 | extern void unregister_sound_dsp(int unit); |
44 | extern void unregister_sound_synth(int unit); | ||
diff --git a/include/linux/srcu.h b/include/linux/srcu.h new file mode 100644 index 000000000000..aca0eee53930 --- /dev/null +++ b/include/linux/srcu.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * Sleepable Read-Copy Update mechanism for mutual exclusion | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright (C) IBM Corporation, 2006 | ||
19 | * | ||
20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
21 | * | ||
22 | * For detailed explanation of Read-Copy Update mechanism see - | ||
23 | * Documentation/RCU/ *.txt | ||
24 | * | ||
25 | */ | ||
26 | |||
27 | #ifndef _LINUX_SRCU_H | ||
28 | #define _LINUX_SRCU_H | ||
29 | |||
30 | struct srcu_struct_array { | ||
31 | int c[2]; | ||
32 | }; | ||
33 | |||
34 | struct srcu_struct { | ||
35 | int completed; | ||
36 | struct srcu_struct_array *per_cpu_ref; | ||
37 | struct mutex mutex; | ||
38 | }; | ||
39 | |||
40 | #ifndef CONFIG_PREEMPT | ||
41 | #define srcu_barrier() barrier() | ||
42 | #else /* #ifndef CONFIG_PREEMPT */ | ||
43 | #define srcu_barrier() | ||
44 | #endif /* #else #ifndef CONFIG_PREEMPT */ | ||
45 | |||
46 | int init_srcu_struct(struct srcu_struct *sp); | ||
47 | void cleanup_srcu_struct(struct srcu_struct *sp); | ||
48 | int srcu_read_lock(struct srcu_struct *sp) __acquires(sp); | ||
49 | void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp); | ||
50 | void synchronize_srcu(struct srcu_struct *sp); | ||
51 | long srcu_batches_completed(struct srcu_struct *sp); | ||
52 | |||
53 | #endif | ||
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 862c0d8c8381..534cdc7be58d 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
@@ -20,9 +20,6 @@ | |||
20 | /* size of the nodename buffer */ | 20 | /* size of the nodename buffer */ |
21 | #define UNX_MAXNODENAME 32 | 21 | #define UNX_MAXNODENAME 32 |
22 | 22 | ||
23 | /* Maximum size (in bytes) of an rpc credential or verifier */ | ||
24 | #define RPC_MAX_AUTH_SIZE (400) | ||
25 | |||
26 | /* Work around the lack of a VFS credential */ | 23 | /* Work around the lack of a VFS credential */ |
27 | struct auth_cred { | 24 | struct auth_cred { |
28 | uid_t uid; | 25 | uid_t uid; |
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index b5612c958cce..3699dff7db8f 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
@@ -163,6 +163,17 @@ static inline void cache_put(struct cache_head *h, struct cache_detail *cd) | |||
163 | kref_put(&h->ref, cd->cache_put); | 163 | kref_put(&h->ref, cd->cache_put); |
164 | } | 164 | } |
165 | 165 | ||
166 | static inline int cache_valid(struct cache_head *h) | ||
167 | { | ||
168 | /* If an item has been unhashed pending removal when | ||
169 | * the refcount drops to 0, the expiry_time will be | ||
170 | * set to 0. We don't want to consider such items | ||
171 | * valid in this context even though CACHE_VALID is | ||
172 | * set. | ||
173 | */ | ||
174 | return (h->expiry_time != 0 && test_bit(CACHE_VALID, &h->flags)); | ||
175 | } | ||
176 | |||
166 | extern int cache_check(struct cache_detail *detail, | 177 | extern int cache_check(struct cache_detail *detail, |
167 | struct cache_head *h, struct cache_req *rqstp); | 178 | struct cache_head *h, struct cache_req *rqstp); |
168 | extern void cache_flush(void); | 179 | extern void cache_flush(void); |
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 8d10d148834e..606cb2165232 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h | |||
@@ -11,6 +11,9 @@ | |||
11 | 11 | ||
12 | #define RPC_VERSION 2 | 12 | #define RPC_VERSION 2 |
13 | 13 | ||
14 | /* size of an XDR encoding unit in bytes, i.e. 32bit */ | ||
15 | #define XDR_UNIT (4) | ||
16 | |||
14 | /* spec defines authentication flavor as an unsigned 32 bit integer */ | 17 | /* spec defines authentication flavor as an unsigned 32 bit integer */ |
15 | typedef u32 rpc_authflavor_t; | 18 | typedef u32 rpc_authflavor_t; |
16 | 19 | ||
@@ -34,6 +37,9 @@ enum rpc_auth_flavors { | |||
34 | RPC_AUTH_GSS_SPKMP = 390011, | 37 | RPC_AUTH_GSS_SPKMP = 390011, |
35 | }; | 38 | }; |
36 | 39 | ||
40 | /* Maximum size (in bytes) of an rpc credential or verifier */ | ||
41 | #define RPC_MAX_AUTH_SIZE (400) | ||
42 | |||
37 | enum rpc_msg_type { | 43 | enum rpc_msg_type { |
38 | RPC_CALL = 0, | 44 | RPC_CALL = 0, |
39 | RPC_REPLY = 1 | 45 | RPC_REPLY = 1 |
@@ -50,7 +56,9 @@ enum rpc_accept_stat { | |||
50 | RPC_PROG_MISMATCH = 2, | 56 | RPC_PROG_MISMATCH = 2, |
51 | RPC_PROC_UNAVAIL = 3, | 57 | RPC_PROC_UNAVAIL = 3, |
52 | RPC_GARBAGE_ARGS = 4, | 58 | RPC_GARBAGE_ARGS = 4, |
53 | RPC_SYSTEM_ERR = 5 | 59 | RPC_SYSTEM_ERR = 5, |
60 | /* internal use only */ | ||
61 | RPC_DROP_REPLY = 60000, | ||
54 | }; | 62 | }; |
55 | 63 | ||
56 | enum rpc_reject_stat { | 64 | enum rpc_reject_stat { |
@@ -101,5 +109,39 @@ typedef __be32 rpc_fraghdr; | |||
101 | #define RPC_FRAGMENT_SIZE_MASK (~RPC_LAST_STREAM_FRAGMENT) | 109 | #define RPC_FRAGMENT_SIZE_MASK (~RPC_LAST_STREAM_FRAGMENT) |
102 | #define RPC_MAX_FRAGMENT_SIZE ((1U << 31) - 1) | 110 | #define RPC_MAX_FRAGMENT_SIZE ((1U << 31) - 1) |
103 | 111 | ||
112 | /* | ||
113 | * RPC call and reply header size as number of 32bit words (verifier | ||
114 | * size computed separately, see below) | ||
115 | */ | ||
116 | #define RPC_CALLHDRSIZE (6) | ||
117 | #define RPC_REPHDRSIZE (4) | ||
118 | |||
119 | |||
120 | /* | ||
121 | * Maximum RPC header size, including authentication, | ||
122 | * as number of 32bit words (see RFCs 1831, 1832). | ||
123 | * | ||
124 | * xid 1 xdr unit = 4 bytes | ||
125 | * mtype 1 | ||
126 | * rpc_version 1 | ||
127 | * program 1 | ||
128 | * prog_version 1 | ||
129 | * procedure 1 | ||
130 | * cred { | ||
131 | * flavor 1 | ||
132 | * length 1 | ||
133 | * body<RPC_MAX_AUTH_SIZE> 100 xdr units = 400 bytes | ||
134 | * } | ||
135 | * verf { | ||
136 | * flavor 1 | ||
137 | * length 1 | ||
138 | * body<RPC_MAX_AUTH_SIZE> 100 xdr units = 400 bytes | ||
139 | * } | ||
140 | * TOTAL 210 xdr units = 840 bytes | ||
141 | */ | ||
142 | #define RPC_MAX_HEADER_WITH_AUTH \ | ||
143 | (RPC_CALLHDRSIZE + 2*(2+RPC_MAX_AUTH_SIZE/4)) | ||
144 | |||
145 | |||
104 | #endif /* __KERNEL__ */ | 146 | #endif /* __KERNEL__ */ |
105 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ | 147 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 4ebcdf91f3b3..965d6c20086e 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/in.h> | 13 | #include <linux/in.h> |
14 | #include <linux/sunrpc/types.h> | 14 | #include <linux/sunrpc/types.h> |
15 | #include <linux/sunrpc/xdr.h> | 15 | #include <linux/sunrpc/xdr.h> |
16 | #include <linux/sunrpc/auth.h> | ||
16 | #include <linux/sunrpc/svcauth.h> | 17 | #include <linux/sunrpc/svcauth.h> |
17 | #include <linux/wait.h> | 18 | #include <linux/wait.h> |
18 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
@@ -56,7 +57,8 @@ struct svc_serv { | |||
56 | struct svc_stat * sv_stats; /* RPC statistics */ | 57 | struct svc_stat * sv_stats; /* RPC statistics */ |
57 | spinlock_t sv_lock; | 58 | spinlock_t sv_lock; |
58 | unsigned int sv_nrthreads; /* # of server threads */ | 59 | unsigned int sv_nrthreads; /* # of server threads */ |
59 | unsigned int sv_bufsz; /* datagram buffer size */ | 60 | unsigned int sv_max_payload; /* datagram payload size */ |
61 | unsigned int sv_max_mesg; /* max_payload + 1 page for overheads */ | ||
60 | unsigned int sv_xdrsize; /* XDR buffer size */ | 62 | unsigned int sv_xdrsize; /* XDR buffer size */ |
61 | 63 | ||
62 | struct list_head sv_permsocks; /* all permanent sockets */ | 64 | struct list_head sv_permsocks; /* all permanent sockets */ |
@@ -95,8 +97,28 @@ static inline void svc_get(struct svc_serv *serv) | |||
95 | * Maximum payload size supported by a kernel RPC server. | 97 | * Maximum payload size supported by a kernel RPC server. |
96 | * This is use to determine the max number of pages nfsd is | 98 | * This is use to determine the max number of pages nfsd is |
97 | * willing to return in a single READ operation. | 99 | * willing to return in a single READ operation. |
100 | * | ||
101 | * These happen to all be powers of 2, which is not strictly | ||
102 | * necessary but helps enforce the real limitation, which is | ||
103 | * that they should be multiples of PAGE_CACHE_SIZE. | ||
104 | * | ||
105 | * For UDP transports, a block plus NFS,RPC, and UDP headers | ||
106 | * has to fit into the IP datagram limit of 64K. The largest | ||
107 | * feasible number for all known page sizes is probably 48K, | ||
108 | * but we choose 32K here. This is the same as the historical | ||
109 | * Linux limit; someone who cares more about NFS/UDP performance | ||
110 | * can test a larger number. | ||
111 | * | ||
112 | * For TCP transports we have more freedom. A size of 1MB is | ||
113 | * chosen to match the client limit. Other OSes are known to | ||
114 | * have larger limits, but those numbers are probably beyond | ||
115 | * the point of diminishing returns. | ||
98 | */ | 116 | */ |
99 | #define RPCSVC_MAXPAYLOAD (64*1024u) | 117 | #define RPCSVC_MAXPAYLOAD (1*1024*1024u) |
118 | #define RPCSVC_MAXPAYLOAD_TCP RPCSVC_MAXPAYLOAD | ||
119 | #define RPCSVC_MAXPAYLOAD_UDP (32*1024u) | ||
120 | |||
121 | extern u32 svc_max_payload(const struct svc_rqst *rqstp); | ||
100 | 122 | ||
101 | /* | 123 | /* |
102 | * RPC Requsts and replies are stored in one or more pages. | 124 | * RPC Requsts and replies are stored in one or more pages. |
@@ -170,7 +192,6 @@ static inline void svc_putu32(struct kvec *iov, __be32 val) | |||
170 | /* | 192 | /* |
171 | * The context of a single thread, including the request currently being | 193 | * The context of a single thread, including the request currently being |
172 | * processed. | 194 | * processed. |
173 | * NOTE: First two items must be prev/next. | ||
174 | */ | 195 | */ |
175 | struct svc_rqst { | 196 | struct svc_rqst { |
176 | struct list_head rq_list; /* idle list */ | 197 | struct list_head rq_list; /* idle list */ |
@@ -189,12 +210,11 @@ struct svc_rqst { | |||
189 | 210 | ||
190 | struct xdr_buf rq_arg; | 211 | struct xdr_buf rq_arg; |
191 | struct xdr_buf rq_res; | 212 | struct xdr_buf rq_res; |
192 | struct page * rq_argpages[RPCSVC_MAXPAGES]; | 213 | struct page * rq_pages[RPCSVC_MAXPAGES]; |
193 | struct page * rq_respages[RPCSVC_MAXPAGES]; | 214 | struct page * *rq_respages; /* points into rq_pages */ |
194 | int rq_restailpage; | 215 | int rq_resused; /* number of pages used for result */ |
195 | short rq_argused; /* pages used for argument */ | 216 | |
196 | short rq_arghi; /* pages available in argument page list */ | 217 | struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */ |
197 | short rq_resused; /* pages used for result */ | ||
198 | 218 | ||
199 | __be32 rq_xid; /* transmission id */ | 219 | __be32 rq_xid; /* transmission id */ |
200 | u32 rq_prog; /* program number */ | 220 | u32 rq_prog; /* program number */ |
@@ -255,63 +275,18 @@ xdr_ressize_check(struct svc_rqst *rqstp, __be32 *p) | |||
255 | return vec->iov_len <= PAGE_SIZE; | 275 | return vec->iov_len <= PAGE_SIZE; |
256 | } | 276 | } |
257 | 277 | ||
258 | static inline struct page * | 278 | static inline void svc_free_res_pages(struct svc_rqst *rqstp) |
259 | svc_take_res_page(struct svc_rqst *rqstp) | ||
260 | { | ||
261 | if (rqstp->rq_arghi <= rqstp->rq_argused) | ||
262 | return NULL; | ||
263 | rqstp->rq_arghi--; | ||
264 | rqstp->rq_respages[rqstp->rq_resused] = | ||
265 | rqstp->rq_argpages[rqstp->rq_arghi]; | ||
266 | return rqstp->rq_respages[rqstp->rq_resused++]; | ||
267 | } | ||
268 | |||
269 | static inline void svc_take_page(struct svc_rqst *rqstp) | ||
270 | { | ||
271 | if (rqstp->rq_arghi <= rqstp->rq_argused) { | ||
272 | WARN_ON(1); | ||
273 | return; | ||
274 | } | ||
275 | rqstp->rq_arghi--; | ||
276 | rqstp->rq_respages[rqstp->rq_resused] = | ||
277 | rqstp->rq_argpages[rqstp->rq_arghi]; | ||
278 | rqstp->rq_resused++; | ||
279 | } | ||
280 | |||
281 | static inline void svc_pushback_allpages(struct svc_rqst *rqstp) | ||
282 | { | ||
283 | while (rqstp->rq_resused) { | ||
284 | if (rqstp->rq_respages[--rqstp->rq_resused] == NULL) | ||
285 | continue; | ||
286 | rqstp->rq_argpages[rqstp->rq_arghi++] = | ||
287 | rqstp->rq_respages[rqstp->rq_resused]; | ||
288 | rqstp->rq_respages[rqstp->rq_resused] = NULL; | ||
289 | } | ||
290 | } | ||
291 | |||
292 | static inline void svc_pushback_unused_pages(struct svc_rqst *rqstp) | ||
293 | { | 279 | { |
294 | while (rqstp->rq_resused && | 280 | while (rqstp->rq_resused) { |
295 | rqstp->rq_res.pages != &rqstp->rq_respages[rqstp->rq_resused]) { | 281 | struct page **pp = (rqstp->rq_respages + |
296 | 282 | --rqstp->rq_resused); | |
297 | if (rqstp->rq_respages[--rqstp->rq_resused] != NULL) { | 283 | if (*pp) { |
298 | rqstp->rq_argpages[rqstp->rq_arghi++] = | 284 | put_page(*pp); |
299 | rqstp->rq_respages[rqstp->rq_resused]; | 285 | *pp = NULL; |
300 | rqstp->rq_respages[rqstp->rq_resused] = NULL; | ||
301 | } | 286 | } |
302 | } | 287 | } |
303 | } | 288 | } |
304 | 289 | ||
305 | static inline void svc_free_allpages(struct svc_rqst *rqstp) | ||
306 | { | ||
307 | while (rqstp->rq_resused) { | ||
308 | if (rqstp->rq_respages[--rqstp->rq_resused] == NULL) | ||
309 | continue; | ||
310 | put_page(rqstp->rq_respages[rqstp->rq_resused]); | ||
311 | rqstp->rq_respages[rqstp->rq_resused] = NULL; | ||
312 | } | ||
313 | } | ||
314 | |||
315 | struct svc_deferred_req { | 290 | struct svc_deferred_req { |
316 | u32 prot; /* protocol (UDP or TCP) */ | 291 | u32 prot; /* protocol (UDP or TCP) */ |
317 | struct sockaddr_in addr; | 292 | struct sockaddr_in addr; |
@@ -347,6 +322,9 @@ struct svc_version { | |||
347 | struct svc_procedure * vs_proc; /* per-procedure info */ | 322 | struct svc_procedure * vs_proc; /* per-procedure info */ |
348 | u32 vs_xdrsize; /* xdrsize needed for this version */ | 323 | u32 vs_xdrsize; /* xdrsize needed for this version */ |
349 | 324 | ||
325 | unsigned int vs_hidden : 1; /* Don't register with portmapper. | ||
326 | * Only used for nfsacl so far. */ | ||
327 | |||
350 | /* Override dispatch function (e.g. when caching replies). | 328 | /* Override dispatch function (e.g. when caching replies). |
351 | * A return value of 0 means drop the request. | 329 | * A return value of 0 means drop the request. |
352 | * vs_dispatch == NULL means use default dispatcher. | 330 | * vs_dispatch == NULL means use default dispatcher. |
@@ -357,7 +335,7 @@ struct svc_version { | |||
357 | /* | 335 | /* |
358 | * RPC procedure info | 336 | * RPC procedure info |
359 | */ | 337 | */ |
360 | typedef int (*svc_procfunc)(struct svc_rqst *, void *argp, void *resp); | 338 | typedef __be32 (*svc_procfunc)(struct svc_rqst *, void *argp, void *resp); |
361 | struct svc_procedure { | 339 | struct svc_procedure { |
362 | svc_procfunc pc_func; /* process the request */ | 340 | svc_procfunc pc_func; /* process the request */ |
363 | kxdrproc_t pc_decode; /* XDR decode args */ | 341 | kxdrproc_t pc_decode; /* XDR decode args */ |
diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h index a6601650deeb..de92619b0826 100644 --- a/include/linux/sunrpc/svcauth.h +++ b/include/linux/sunrpc/svcauth.h | |||
@@ -126,6 +126,7 @@ extern struct auth_domain *auth_domain_find(char *name); | |||
126 | extern struct auth_domain *auth_unix_lookup(struct in_addr addr); | 126 | extern struct auth_domain *auth_unix_lookup(struct in_addr addr); |
127 | extern int auth_unix_forget_old(struct auth_domain *dom); | 127 | extern int auth_unix_forget_old(struct auth_domain *dom); |
128 | extern void svcauth_unix_purge(void); | 128 | extern void svcauth_unix_purge(void); |
129 | extern void svcauth_unix_info_release(void *); | ||
129 | 130 | ||
130 | static inline unsigned long hash_str(char *name, int bits) | 131 | static inline unsigned long hash_str(char *name, int bits) |
131 | { | 132 | { |
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index 4c296152cbfa..98b21ad370fd 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h | |||
@@ -54,6 +54,9 @@ struct svc_sock { | |||
54 | int sk_reclen; /* length of record */ | 54 | int sk_reclen; /* length of record */ |
55 | int sk_tcplen; /* current read length */ | 55 | int sk_tcplen; /* current read length */ |
56 | time_t sk_lastrecv; /* time of last received request */ | 56 | time_t sk_lastrecv; /* time of last received request */ |
57 | |||
58 | /* cache of various info for TCP sockets */ | ||
59 | void *sk_info_authunix; | ||
57 | }; | 60 | }; |
58 | 61 | ||
59 | /* | 62 | /* |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 953723b09bc6..ac69e5511606 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
@@ -74,6 +74,7 @@ struct xdr_buf { | |||
74 | #define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL) | 74 | #define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL) |
75 | #define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS) | 75 | #define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS) |
76 | #define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR) | 76 | #define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR) |
77 | #define rpc_drop_reply __constant_htonl(RPC_DROP_REPLY) | ||
77 | 78 | ||
78 | #define rpc_auth_ok __constant_htonl(RPC_AUTH_OK) | 79 | #define rpc_auth_ok __constant_htonl(RPC_AUTH_OK) |
79 | #define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED) | 80 | #define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED) |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 6cf626580752..60394fbc4c70 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/kref.h> | 15 | #include <linux/kref.h> |
16 | #include <linux/sunrpc/sched.h> | 16 | #include <linux/sunrpc/sched.h> |
17 | #include <linux/sunrpc/xdr.h> | 17 | #include <linux/sunrpc/xdr.h> |
18 | #include <linux/sunrpc/msg_prot.h> | ||
18 | 19 | ||
19 | extern unsigned int xprt_udp_slot_table_entries; | 20 | extern unsigned int xprt_udp_slot_table_entries; |
20 | extern unsigned int xprt_tcp_slot_table_entries; | 21 | extern unsigned int xprt_tcp_slot_table_entries; |
@@ -24,13 +25,6 @@ extern unsigned int xprt_tcp_slot_table_entries; | |||
24 | #define RPC_MAX_SLOT_TABLE (128U) | 25 | #define RPC_MAX_SLOT_TABLE (128U) |
25 | 26 | ||
26 | /* | 27 | /* |
27 | * RPC call and reply header size as number of 32bit words (verifier | ||
28 | * size computed separately) | ||
29 | */ | ||
30 | #define RPC_CALLHDRSIZE 6 | ||
31 | #define RPC_REPHDRSIZE 4 | ||
32 | |||
33 | /* | ||
34 | * Parameters for choosing a free port | 28 | * Parameters for choosing a free port |
35 | */ | 29 | */ |
36 | extern unsigned int xprt_min_resvport; | 30 | extern unsigned int xprt_min_resvport; |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 3efcfc7e9c6c..1912c6cbef55 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -431,6 +431,10 @@ asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, | |||
431 | struct epoll_event __user *event); | 431 | struct epoll_event __user *event); |
432 | asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, | 432 | asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, |
433 | int maxevents, int timeout); | 433 | int maxevents, int timeout); |
434 | asmlinkage long sys_epoll_pwait(int epfd, struct epoll_event __user *events, | ||
435 | int maxevents, int timeout, | ||
436 | const sigset_t __user *sigmask, | ||
437 | size_t sigsetsize); | ||
434 | asmlinkage long sys_gethostname(char __user *name, int len); | 438 | asmlinkage long sys_gethostname(char __user *name, int len); |
435 | asmlinkage long sys_sethostname(char __user *name, int len); | 439 | asmlinkage long sys_sethostname(char __user *name, int len); |
436 | asmlinkage long sys_setdomainname(char __user *name, int len); | 440 | asmlinkage long sys_setdomainname(char __user *name, int len); |
@@ -593,7 +597,7 @@ asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags); | |||
593 | asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, | 597 | asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, |
594 | unsigned int flags); | 598 | unsigned int flags); |
595 | asmlinkage long sys_get_robust_list(int pid, | 599 | asmlinkage long sys_get_robust_list(int pid, |
596 | struct robust_list_head __user **head_ptr, | 600 | struct robust_list_head __user * __user *head_ptr, |
597 | size_t __user *len_ptr); | 601 | size_t __user *len_ptr); |
598 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, | 602 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, |
599 | size_t len); | 603 | size_t len); |
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h index e657e523b9bf..9df8833670cb 100644 --- a/include/linux/sysrq.h +++ b/include/linux/sysrq.h | |||
@@ -29,7 +29,7 @@ struct tty_struct; | |||
29 | #define SYSRQ_ENABLE_RTNICE 0x0100 | 29 | #define SYSRQ_ENABLE_RTNICE 0x0100 |
30 | 30 | ||
31 | struct sysrq_key_op { | 31 | struct sysrq_key_op { |
32 | void (*handler)(int, struct pt_regs *, struct tty_struct *); | 32 | void (*handler)(int, struct tty_struct *); |
33 | char *help_msg; | 33 | char *help_msg; |
34 | char *action_msg; | 34 | char *action_msg; |
35 | int enable_mask; | 35 | int enable_mask; |
@@ -42,8 +42,8 @@ struct sysrq_key_op { | |||
42 | * are available -- else NULL's). | 42 | * are available -- else NULL's). |
43 | */ | 43 | */ |
44 | 44 | ||
45 | void handle_sysrq(int, struct pt_regs *, struct tty_struct *); | 45 | void handle_sysrq(int, struct tty_struct *); |
46 | void __handle_sysrq(int, struct pt_regs *, struct tty_struct *, int check_mask); | 46 | void __handle_sysrq(int, struct tty_struct *, int check_mask); |
47 | int register_sysrq_key(int, struct sysrq_key_op *); | 47 | int register_sysrq_key(int, struct sysrq_key_op *); |
48 | int unregister_sysrq_key(int, struct sysrq_key_op *); | 48 | int unregister_sysrq_key(int, struct sysrq_key_op *); |
49 | struct sysrq_key_op *__sysrq_get_key_op(int key); | 49 | struct sysrq_key_op *__sysrq_get_key_op(int key); |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 0e058a2d1c6d..2d36f6db3706 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -342,6 +342,8 @@ struct tcp_sock { | |||
342 | 342 | ||
343 | unsigned long last_synq_overflow; | 343 | unsigned long last_synq_overflow; |
344 | 344 | ||
345 | __u32 tso_deferred; | ||
346 | |||
345 | /* Receiver side RTT estimation */ | 347 | /* Receiver side RTT estimation */ |
346 | struct { | 348 | struct { |
347 | __u32 rtt; | 349 | __u32 rtt; |
diff --git a/include/linux/tifm.h b/include/linux/tifm.h new file mode 100644 index 000000000000..dfb8052eee5e --- /dev/null +++ b/include/linux/tifm.h | |||
@@ -0,0 +1,159 @@ | |||
1 | /* | ||
2 | * tifm.h - TI FlashMedia driver | ||
3 | * | ||
4 | * Copyright (C) 2006 Alex Dubov <oakad@yahoo.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #ifndef _TIFM_H | ||
13 | #define _TIFM_H | ||
14 | |||
15 | #include <linux/spinlock.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | #include <linux/wait.h> | ||
18 | #include <linux/delay.h> | ||
19 | #include <linux/pci.h> | ||
20 | #include <linux/scatterlist.h> | ||
21 | |||
22 | /* Host registers (relative to pci base address): */ | ||
23 | enum { | ||
24 | FM_SET_INTERRUPT_ENABLE = 0x008, | ||
25 | FM_CLEAR_INTERRUPT_ENABLE = 0x00c, | ||
26 | FM_INTERRUPT_STATUS = 0x014 }; | ||
27 | |||
28 | /* Socket registers (relative to socket base address): */ | ||
29 | enum { | ||
30 | SOCK_CONTROL = 0x004, | ||
31 | SOCK_PRESENT_STATE = 0x008, | ||
32 | SOCK_DMA_ADDRESS = 0x00c, | ||
33 | SOCK_DMA_CONTROL = 0x010, | ||
34 | SOCK_DMA_FIFO_INT_ENABLE_SET = 0x014, | ||
35 | SOCK_DMA_FIFO_INT_ENABLE_CLEAR = 0x018, | ||
36 | SOCK_DMA_FIFO_STATUS = 0x020, | ||
37 | SOCK_FIFO_CONTROL = 0x024, | ||
38 | SOCK_FIFO_PAGE_SIZE = 0x028, | ||
39 | SOCK_MMCSD_COMMAND = 0x104, | ||
40 | SOCK_MMCSD_ARG_LOW = 0x108, | ||
41 | SOCK_MMCSD_ARG_HIGH = 0x10c, | ||
42 | SOCK_MMCSD_CONFIG = 0x110, | ||
43 | SOCK_MMCSD_STATUS = 0x114, | ||
44 | SOCK_MMCSD_INT_ENABLE = 0x118, | ||
45 | SOCK_MMCSD_COMMAND_TO = 0x11c, | ||
46 | SOCK_MMCSD_DATA_TO = 0x120, | ||
47 | SOCK_MMCSD_DATA = 0x124, | ||
48 | SOCK_MMCSD_BLOCK_LEN = 0x128, | ||
49 | SOCK_MMCSD_NUM_BLOCKS = 0x12c, | ||
50 | SOCK_MMCSD_BUFFER_CONFIG = 0x130, | ||
51 | SOCK_MMCSD_SPI_CONFIG = 0x134, | ||
52 | SOCK_MMCSD_SDIO_MODE_CONFIG = 0x138, | ||
53 | SOCK_MMCSD_RESPONSE = 0x144, | ||
54 | SOCK_MMCSD_SDIO_SR = 0x164, | ||
55 | SOCK_MMCSD_SYSTEM_CONTROL = 0x168, | ||
56 | SOCK_MMCSD_SYSTEM_STATUS = 0x16c, | ||
57 | SOCK_MS_COMMAND = 0x184, | ||
58 | SOCK_MS_DATA = 0x188, | ||
59 | SOCK_MS_STATUS = 0x18c, | ||
60 | SOCK_MS_SYSTEM = 0x190, | ||
61 | SOCK_FIFO_ACCESS = 0x200 }; | ||
62 | |||
63 | |||
64 | #define TIFM_IRQ_ENABLE 0x80000000 | ||
65 | #define TIFM_IRQ_SOCKMASK 0x00000001 | ||
66 | #define TIFM_IRQ_CARDMASK 0x00000100 | ||
67 | #define TIFM_IRQ_FIFOMASK 0x00010000 | ||
68 | #define TIFM_IRQ_SETALL 0xffffffff | ||
69 | #define TIFM_IRQ_SETALLSOCK 0x0000000f | ||
70 | |||
71 | #define TIFM_CTRL_LED 0x00000040 | ||
72 | #define TIFM_CTRL_FAST_CLK 0x00000100 | ||
73 | |||
74 | #define TIFM_SOCK_STATE_OCCUPIED 0x00000008 | ||
75 | #define TIFM_SOCK_STATE_POWERED 0x00000080 | ||
76 | |||
77 | #define TIFM_FIFO_ENABLE 0x00000001 /* Meaning of this constant is unverified */ | ||
78 | #define TIFM_FIFO_INT_SETALL 0x0000ffff | ||
79 | #define TIFM_FIFO_INTMASK 0x00000005 /* Meaning of this constant is unverified */ | ||
80 | |||
81 | #define TIFM_DMA_RESET 0x00000002 /* Meaning of this constant is unverified */ | ||
82 | #define TIFM_DMA_TX 0x00008000 /* Meaning of this constant is unverified */ | ||
83 | #define TIFM_DMA_EN 0x00000001 /* Meaning of this constant is unverified */ | ||
84 | |||
85 | typedef enum {FM_NULL = 0, FM_XD = 0x01, FM_MS = 0x02, FM_SD = 0x03} tifm_media_id; | ||
86 | |||
87 | struct tifm_driver; | ||
88 | struct tifm_dev { | ||
89 | char __iomem *addr; | ||
90 | spinlock_t lock; | ||
91 | tifm_media_id media_id; | ||
92 | char wq_name[KOBJ_NAME_LEN]; | ||
93 | struct workqueue_struct *wq; | ||
94 | |||
95 | unsigned int (*signal_irq)(struct tifm_dev *sock, | ||
96 | unsigned int sock_irq_status); | ||
97 | |||
98 | struct tifm_driver *drv; | ||
99 | struct device dev; | ||
100 | }; | ||
101 | |||
102 | struct tifm_driver { | ||
103 | tifm_media_id *id_table; | ||
104 | int (*probe)(struct tifm_dev *dev); | ||
105 | void (*remove)(struct tifm_dev *dev); | ||
106 | |||
107 | struct device_driver driver; | ||
108 | }; | ||
109 | |||
110 | struct tifm_adapter { | ||
111 | char __iomem *addr; | ||
112 | unsigned int irq_status; | ||
113 | unsigned int insert_mask; | ||
114 | unsigned int remove_mask; | ||
115 | spinlock_t lock; | ||
116 | unsigned int id; | ||
117 | unsigned int max_sockets; | ||
118 | char wq_name[KOBJ_NAME_LEN]; | ||
119 | unsigned int inhibit_new_cards; | ||
120 | struct workqueue_struct *wq; | ||
121 | struct work_struct media_inserter; | ||
122 | struct work_struct media_remover; | ||
123 | struct tifm_dev **sockets; | ||
124 | struct class_device cdev; | ||
125 | struct device *dev; | ||
126 | |||
127 | void (*eject)(struct tifm_adapter *fm, struct tifm_dev *sock); | ||
128 | }; | ||
129 | |||
130 | struct tifm_adapter *tifm_alloc_adapter(void); | ||
131 | void tifm_free_device(struct device *dev); | ||
132 | void tifm_free_adapter(struct tifm_adapter *fm); | ||
133 | int tifm_add_adapter(struct tifm_adapter *fm); | ||
134 | void tifm_remove_adapter(struct tifm_adapter *fm); | ||
135 | struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id); | ||
136 | int tifm_register_driver(struct tifm_driver *drv); | ||
137 | void tifm_unregister_driver(struct tifm_driver *drv); | ||
138 | void tifm_eject(struct tifm_dev *sock); | ||
139 | int tifm_map_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents, | ||
140 | int direction); | ||
141 | void tifm_unmap_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents, | ||
142 | int direction); | ||
143 | |||
144 | |||
145 | static inline void *tifm_get_drvdata(struct tifm_dev *dev) | ||
146 | { | ||
147 | return dev_get_drvdata(&dev->dev); | ||
148 | } | ||
149 | |||
150 | static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data) | ||
151 | { | ||
152 | dev_set_drvdata(&dev->dev, data); | ||
153 | } | ||
154 | |||
155 | struct tifm_device_id { | ||
156 | tifm_media_id media_id; | ||
157 | }; | ||
158 | |||
159 | #endif | ||
diff --git a/include/linux/timex.h b/include/linux/timex.h index 049dfe4a11f2..db501dc23c29 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
@@ -293,6 +293,9 @@ extern void second_overflow(void); | |||
293 | extern void update_ntp_one_tick(void); | 293 | extern void update_ntp_one_tick(void); |
294 | extern int do_adjtimex(struct timex *); | 294 | extern int do_adjtimex(struct timex *); |
295 | 295 | ||
296 | /* Don't use! Compatibility define for existing users. */ | ||
297 | #define tickadj (500/HZ ? : 1) | ||
298 | |||
296 | #endif /* KERNEL */ | 299 | #endif /* KERNEL */ |
297 | 300 | ||
298 | #endif /* LINUX_TIMEX_H */ | 301 | #endif /* LINUX_TIMEX_H */ |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h index 243a15f54002..bea469455a0c 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h | |||
@@ -129,6 +129,7 @@ static inline unsigned int tipc_node(__u32 addr) | |||
129 | 129 | ||
130 | #define TIPC_SUB_PORTS 0x01 /* filter for port availability */ | 130 | #define TIPC_SUB_PORTS 0x01 /* filter for port availability */ |
131 | #define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ | 131 | #define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ |
132 | #define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */ | ||
132 | #if 0 | 133 | #if 0 |
133 | /* The following filter options are not currently implemented */ | 134 | /* The following filter options are not currently implemented */ |
134 | #define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ | 135 | #define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ |
diff --git a/include/linux/types.h b/include/linux/types.h index 406d4ae57631..750f085fa564 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
@@ -129,8 +129,12 @@ typedef __s64 int64_t; | |||
129 | /* this is a special 64bit data type that is 8-byte aligned */ | 129 | /* this is a special 64bit data type that is 8-byte aligned */ |
130 | #define aligned_u64 unsigned long long __attribute__((aligned(8))) | 130 | #define aligned_u64 unsigned long long __attribute__((aligned(8))) |
131 | 131 | ||
132 | /* | 132 | /** |
133 | * The type used for indexing onto a disc or disc partition. | 133 | * The type used for indexing onto a disc or disc partition. |
134 | * | ||
135 | * Linux always considers sectors to be 512 bytes long independently | ||
136 | * of the devices real block size. | ||
137 | * | ||
134 | * If required, asm/types.h can override it and define | 138 | * If required, asm/types.h can override it and define |
135 | * HAVE_SECTOR_T | 139 | * HAVE_SECTOR_T |
136 | */ | 140 | */ |
diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index fc62887c5206..61eef508b041 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h | |||
@@ -351,6 +351,14 @@ struct ufs2_csum_total { | |||
351 | __fs64 cs_spare[3]; /* future expansion */ | 351 | __fs64 cs_spare[3]; /* future expansion */ |
352 | }; | 352 | }; |
353 | 353 | ||
354 | struct ufs_csum_core { | ||
355 | __u64 cs_ndir; /* number of directories */ | ||
356 | __u64 cs_nbfree; /* number of free blocks */ | ||
357 | __u64 cs_nifree; /* number of free inodes */ | ||
358 | __u64 cs_nffree; /* number of free frags */ | ||
359 | __u64 cs_numclusters; /* number of free clusters */ | ||
360 | }; | ||
361 | |||
354 | /* | 362 | /* |
355 | * File system flags | 363 | * File system flags |
356 | */ | 364 | */ |
@@ -715,7 +723,7 @@ struct ufs_cg_private_info { | |||
715 | 723 | ||
716 | struct ufs_sb_private_info { | 724 | struct ufs_sb_private_info { |
717 | struct ufs_buffer_head s_ubh; /* buffer containing super block */ | 725 | struct ufs_buffer_head s_ubh; /* buffer containing super block */ |
718 | struct ufs2_csum_total cs_total; | 726 | struct ufs_csum_core cs_total; |
719 | __u32 s_sblkno; /* offset of super-blocks in filesys */ | 727 | __u32 s_sblkno; /* offset of super-blocks in filesys */ |
720 | __u32 s_cblkno; /* offset of cg-block in filesys */ | 728 | __u32 s_cblkno; /* offset of cg-block in filesys */ |
721 | __u32 s_iblkno; /* offset of inode-blocks in filesys */ | 729 | __u32 s_iblkno; /* offset of inode-blocks in filesys */ |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 190cc1b78fe2..5482bfb3303d 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -764,9 +764,8 @@ struct usb_iso_packet_descriptor { | |||
764 | }; | 764 | }; |
765 | 765 | ||
766 | struct urb; | 766 | struct urb; |
767 | struct pt_regs; | ||
768 | 767 | ||
769 | typedef void (*usb_complete_t)(struct urb *, struct pt_regs *); | 768 | typedef void (*usb_complete_t)(struct urb *); |
770 | 769 | ||
771 | /** | 770 | /** |
772 | * struct urb - USB Request Block | 771 | * struct urb - USB Request Block |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 91c983eef899..91b3ea2bbb14 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
@@ -226,10 +226,10 @@ struct usb_serial_driver { | |||
226 | int (*tiocmget) (struct usb_serial_port *port, struct file *file); | 226 | int (*tiocmget) (struct usb_serial_port *port, struct file *file); |
227 | int (*tiocmset) (struct usb_serial_port *port, struct file *file, unsigned int set, unsigned int clear); | 227 | int (*tiocmset) (struct usb_serial_port *port, struct file *file, unsigned int set, unsigned int clear); |
228 | 228 | ||
229 | void (*read_int_callback)(struct urb *urb, struct pt_regs *regs); | 229 | void (*read_int_callback)(struct urb *urb); |
230 | void (*write_int_callback)(struct urb *urb, struct pt_regs *regs); | 230 | void (*write_int_callback)(struct urb *urb); |
231 | void (*read_bulk_callback)(struct urb *urb, struct pt_regs *regs); | 231 | void (*read_bulk_callback)(struct urb *urb); |
232 | void (*write_bulk_callback)(struct urb *urb, struct pt_regs *regs); | 232 | void (*write_bulk_callback)(struct urb *urb); |
233 | }; | 233 | }; |
234 | #define to_usb_serial_driver(d) container_of(d, struct usb_serial_driver, driver) | 234 | #define to_usb_serial_driver(d) container_of(d, struct usb_serial_driver, driver) |
235 | 235 | ||
@@ -262,8 +262,8 @@ extern int usb_serial_generic_write (struct usb_serial_port *port, const unsigne | |||
262 | extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp); | 262 | extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp); |
263 | extern int usb_serial_generic_write_room (struct usb_serial_port *port); | 263 | extern int usb_serial_generic_write_room (struct usb_serial_port *port); |
264 | extern int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port); | 264 | extern int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port); |
265 | extern void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *regs); | 265 | extern void usb_serial_generic_read_bulk_callback (struct urb *urb); |
266 | extern void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *regs); | 266 | extern void usb_serial_generic_write_bulk_callback (struct urb *urb); |
267 | extern void usb_serial_generic_shutdown (struct usb_serial *serial); | 267 | extern void usb_serial_generic_shutdown (struct usb_serial *serial); |
268 | extern int usb_serial_generic_register (int debug); | 268 | extern int usb_serial_generic_register (int debug); |
269 | extern void usb_serial_generic_deregister (void); | 269 | extern void usb_serial_generic_deregister (void); |
diff --git a/include/linux/utsname.h b/include/linux/utsname.h index 02e4b6972064..a4555fe3754c 100644 --- a/include/linux/utsname.h +++ b/include/linux/utsname.h | |||
@@ -1,11 +1,6 @@ | |||
1 | #ifndef _LINUX_UTSNAME_H | 1 | #ifndef _LINUX_UTSNAME_H |
2 | #define _LINUX_UTSNAME_H | 2 | #define _LINUX_UTSNAME_H |
3 | 3 | ||
4 | #include <linux/sched.h> | ||
5 | #include <linux/kref.h> | ||
6 | #include <linux/nsproxy.h> | ||
7 | #include <asm/atomic.h> | ||
8 | |||
9 | #define __OLD_UTS_LEN 8 | 4 | #define __OLD_UTS_LEN 8 |
10 | 5 | ||
11 | struct oldold_utsname { | 6 | struct oldold_utsname { |
@@ -35,6 +30,13 @@ struct new_utsname { | |||
35 | char domainname[65]; | 30 | char domainname[65]; |
36 | }; | 31 | }; |
37 | 32 | ||
33 | #ifdef __KERNEL__ | ||
34 | |||
35 | #include <linux/sched.h> | ||
36 | #include <linux/kref.h> | ||
37 | #include <linux/nsproxy.h> | ||
38 | #include <asm/atomic.h> | ||
39 | |||
38 | struct uts_namespace { | 40 | struct uts_namespace { |
39 | struct kref kref; | 41 | struct kref kref; |
40 | struct new_utsname name; | 42 | struct new_utsname name; |
@@ -86,4 +88,7 @@ static inline struct new_utsname *init_utsname(void) | |||
86 | } | 88 | } |
87 | 89 | ||
88 | extern struct rw_semaphore uts_sem; | 90 | extern struct rw_semaphore uts_sem; |
89 | #endif | 91 | |
92 | #endif /* __KERNEL__ */ | ||
93 | |||
94 | #endif /* _LINUX_UTSNAME_H */ | ||
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index c5fdf6259548..df5c4654360d 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -243,7 +243,7 @@ struct v4l2_pix_format | |||
243 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y','U','1','2') /* 12 YUV 4:2:0 */ | 243 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y','U','1','2') /* 12 YUV 4:2:0 */ |
244 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y','Y','U','V') /* 16 YUV 4:2:2 */ | 244 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y','Y','U','V') /* 16 YUV 4:2:2 */ |
245 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') /* 8 8-bit color */ | 245 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') /* 8 8-bit color */ |
246 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H','M','1','2') /* 8 YUV 4:1:1 16x16 macroblocks */ | 246 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H','M','1','2') /* 8 YUV 4:2:0 16x16 macroblocks */ |
247 | 247 | ||
248 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ | 248 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ |
249 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ | 249 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ |
diff --git a/include/linux/wavefront.h b/include/linux/wavefront.h deleted file mode 100644 index 51ab3c933acd..000000000000 --- a/include/linux/wavefront.h +++ /dev/null | |||
@@ -1,675 +0,0 @@ | |||
1 | #ifndef __wavefront_h__ | ||
2 | #define __wavefront_h__ | ||
3 | |||
4 | /* WaveFront header file. | ||
5 | * | ||
6 | * Copyright (C) by Paul Barton-Davis 1998 | ||
7 | * | ||
8 | * This program is distributed under the GNU GENERAL PUBLIC LICENSE (GPL) | ||
9 | * Version 2 (June 1991). See the "COPYING" file distributed with this software | ||
10 | * for more info. | ||
11 | */ | ||
12 | |||
13 | #if (!defined(__GNUC__) && !defined(__GNUG__)) | ||
14 | |||
15 | You will not be able to compile this file correctly without gcc, because | ||
16 | it is necessary to pack the "wavefront_alias" structure to a size | ||
17 | of 22 bytes, corresponding to 16-bit alignment (as would have been | ||
18 | the case on the original platform, MS-DOS). If this is not done, | ||
19 | then WavePatch-format files cannot be read/written correctly. | ||
20 | The method used to do this here ("__attribute__((packed)") is | ||
21 | completely compiler dependent. | ||
22 | |||
23 | All other wavefront_* types end up aligned to 32 bit values and | ||
24 | still have the same (correct) size. | ||
25 | |||
26 | #else | ||
27 | |||
28 | /* However, note that as of G++ 2.7.3.2, g++ was unable to | ||
29 | correctly parse *type* __attribute__ tags. It will do the | ||
30 | right thing if we use the "packed" attribute on each struct | ||
31 | member, which has the same semantics anyway. | ||
32 | */ | ||
33 | |||
34 | #endif /* __GNUC__ */ | ||
35 | |||
36 | /***************************** WARNING ******************************** | ||
37 | PLEASE DO NOT MODIFY THIS FILE IN ANY WAY THAT AFFECTS ITS ABILITY TO | ||
38 | BE USED WITH EITHER C *OR* C++. | ||
39 | **********************************************************************/ | ||
40 | |||
41 | #ifndef NUM_MIDIKEYS | ||
42 | #define NUM_MIDIKEYS 128 | ||
43 | #endif /* NUM_MIDIKEYS */ | ||
44 | |||
45 | #ifndef NUM_MIDICHANNELS | ||
46 | #define NUM_MIDICHANNELS 16 | ||
47 | #endif /* NUM_MIDICHANNELS */ | ||
48 | |||
49 | /* These are very useful/important. the original wavefront interface | ||
50 | was developed on a 16 bit system, where sizeof(int) = 2 | ||
51 | bytes. Defining things like this makes the code much more portable, and | ||
52 | easier to understand without having to toggle back and forth | ||
53 | between a 16-bit view of the world and a 32-bit one. | ||
54 | */ | ||
55 | |||
56 | typedef short INT16; | ||
57 | typedef unsigned short UINT16; | ||
58 | typedef int INT32; | ||
59 | typedef unsigned int UINT32; | ||
60 | typedef char CHAR8; | ||
61 | typedef unsigned char UCHAR8; | ||
62 | |||
63 | /* Pseudo-commands not part of the WaveFront command set. | ||
64 | These are used for various driver controls and direct | ||
65 | hardware control. | ||
66 | */ | ||
67 | |||
68 | #define WFC_DEBUG_DRIVER 0 | ||
69 | #define WFC_FX_IOCTL 1 | ||
70 | #define WFC_PATCH_STATUS 2 | ||
71 | #define WFC_PROGRAM_STATUS 3 | ||
72 | #define WFC_SAMPLE_STATUS 4 | ||
73 | #define WFC_DISABLE_INTERRUPTS 5 | ||
74 | #define WFC_ENABLE_INTERRUPTS 6 | ||
75 | #define WFC_INTERRUPT_STATUS 7 | ||
76 | #define WFC_ROMSAMPLES_RDONLY 8 | ||
77 | #define WFC_IDENTIFY_SLOT_TYPE 9 | ||
78 | |||
79 | /* Wavefront synth commands | ||
80 | */ | ||
81 | |||
82 | #define WFC_DOWNLOAD_SAMPLE 0x80 | ||
83 | #define WFC_DOWNLOAD_BLOCK 0x81 | ||
84 | #define WFC_DOWNLOAD_MULTISAMPLE 0x82 | ||
85 | #define WFC_DOWNLOAD_SAMPLE_ALIAS 0x83 | ||
86 | #define WFC_DELETE_SAMPLE 0x84 | ||
87 | #define WFC_REPORT_FREE_MEMORY 0x85 | ||
88 | #define WFC_DOWNLOAD_PATCH 0x86 | ||
89 | #define WFC_DOWNLOAD_PROGRAM 0x87 | ||
90 | #define WFC_SET_SYNTHVOL 0x89 | ||
91 | #define WFC_SET_NVOICES 0x8B | ||
92 | #define WFC_DOWNLOAD_DRUM 0x90 | ||
93 | #define WFC_GET_SYNTHVOL 0x92 | ||
94 | #define WFC_GET_NVOICES 0x94 | ||
95 | #define WFC_DISABLE_CHANNEL 0x9A | ||
96 | #define WFC_ENABLE_CHANNEL 0x9B | ||
97 | #define WFC_MISYNTH_OFF 0x9D | ||
98 | #define WFC_MISYNTH_ON 0x9E | ||
99 | #define WFC_FIRMWARE_VERSION 0x9F | ||
100 | #define WFC_GET_NSAMPLES 0xA0 | ||
101 | #define WFC_DISABLE_DRUM_PROGRAM 0xA2 | ||
102 | #define WFC_UPLOAD_PATCH 0xA3 | ||
103 | #define WFC_UPLOAD_PROGRAM 0xA4 | ||
104 | #define WFC_SET_TUNING 0xA6 | ||
105 | #define WFC_GET_TUNING 0xA7 | ||
106 | #define WFC_VMIDI_ON 0xA8 | ||
107 | #define WFC_VMIDI_OFF 0xA9 | ||
108 | #define WFC_MIDI_STATUS 0xAA | ||
109 | #define WFC_GET_CHANNEL_STATUS 0xAB | ||
110 | #define WFC_DOWNLOAD_SAMPLE_HEADER 0xAC | ||
111 | #define WFC_UPLOAD_SAMPLE_HEADER 0xAD | ||
112 | #define WFC_UPLOAD_MULTISAMPLE 0xAE | ||
113 | #define WFC_UPLOAD_SAMPLE_ALIAS 0xAF | ||
114 | #define WFC_IDENTIFY_SAMPLE_TYPE 0xB0 | ||
115 | #define WFC_DOWNLOAD_EDRUM_PROGRAM 0xB1 | ||
116 | #define WFC_UPLOAD_EDRUM_PROGRAM 0xB2 | ||
117 | #define WFC_SET_EDRUM_CHANNEL 0xB3 | ||
118 | #define WFC_INSTOUT_LEVELS 0xB4 | ||
119 | #define WFC_PEAKOUT_LEVELS 0xB5 | ||
120 | #define WFC_REPORT_CHANNEL_PROGRAMS 0xB6 | ||
121 | #define WFC_HARDWARE_VERSION 0xCF | ||
122 | #define WFC_UPLOAD_SAMPLE_PARAMS 0xD7 | ||
123 | #define WFC_DOWNLOAD_OS 0xF1 | ||
124 | #define WFC_NOOP 0xFF | ||
125 | |||
126 | #define WF_MAX_SAMPLE 512 | ||
127 | #define WF_MAX_PATCH 256 | ||
128 | #define WF_MAX_PROGRAM 128 | ||
129 | |||
130 | #define WF_SECTION_MAX 44 /* longest OS section length */ | ||
131 | |||
132 | /* # of bytes we send to the board when sending it various kinds of | ||
133 | substantive data, such as samples, patches and programs. | ||
134 | */ | ||
135 | |||
136 | #define WF_PROGRAM_BYTES 32 | ||
137 | #define WF_PATCH_BYTES 132 | ||
138 | #define WF_SAMPLE_BYTES 27 | ||
139 | #define WF_SAMPLE_HDR_BYTES 25 | ||
140 | #define WF_ALIAS_BYTES 25 | ||
141 | #define WF_DRUM_BYTES 9 | ||
142 | #define WF_MSAMPLE_BYTES 259 /* (MIDI_KEYS * 2) + 3 */ | ||
143 | |||
144 | #define WF_ACK 0x80 | ||
145 | #define WF_DMA_ACK 0x81 | ||
146 | |||
147 | /* OR-values for MIDI status bits */ | ||
148 | |||
149 | #define WF_MIDI_VIRTUAL_ENABLED 0x1 | ||
150 | #define WF_MIDI_VIRTUAL_IS_EXTERNAL 0x2 | ||
151 | #define WF_MIDI_IN_TO_SYNTH_DISABLED 0x4 | ||
152 | |||
153 | /* slot indexes for struct address_info: makes code a little more mnemonic */ | ||
154 | |||
155 | #define WF_SYNTH_SLOT 0 | ||
156 | #define WF_INTERNAL_MIDI_SLOT 1 | ||
157 | #define WF_EXTERNAL_MIDI_SLOT 2 | ||
158 | |||
159 | /* Magic MIDI bytes used to switch I/O streams on the ICS2115 MPU401 | ||
160 | emulation. Note these NEVER show up in output from the device and | ||
161 | should NEVER be used in input unless Virtual MIDI mode has been | ||
162 | disabled. If they do show up as input, the results are unpredictable. | ||
163 | */ | ||
164 | |||
165 | #define WF_EXTERNAL_SWITCH 0xFD | ||
166 | #define WF_INTERNAL_SWITCH 0xF9 | ||
167 | |||
168 | /* Debugging flags */ | ||
169 | |||
170 | #define WF_DEBUG_CMD 0x1 | ||
171 | #define WF_DEBUG_DATA 0x2 | ||
172 | #define WF_DEBUG_LOAD_PATCH 0x4 | ||
173 | #define WF_DEBUG_IO 0x8 | ||
174 | |||
175 | /* WavePatch file format stuff */ | ||
176 | |||
177 | #define WF_WAVEPATCH_VERSION 120; /* Current version number (1.2) */ | ||
178 | #define WF_MAX_COMMENT 64 /* Comment length */ | ||
179 | #define WF_NUM_LAYERS 4 | ||
180 | #define WF_NAME_LENGTH 32 | ||
181 | #define WF_SOURCE_LENGTH 260 | ||
182 | |||
183 | #define BankFileID "Bank" | ||
184 | #define DrumkitFileID "DrumKit" | ||
185 | #define ProgramFileID "Program" | ||
186 | |||
187 | struct wf_envelope | ||
188 | { | ||
189 | UCHAR8 attack_time:7; | ||
190 | UCHAR8 Unused1:1; | ||
191 | |||
192 | UCHAR8 decay1_time:7; | ||
193 | UCHAR8 Unused2:1; | ||
194 | |||
195 | UCHAR8 decay2_time:7; | ||
196 | UCHAR8 Unused3:1; | ||
197 | |||
198 | UCHAR8 sustain_time:7; | ||
199 | UCHAR8 Unused4:1; | ||
200 | |||
201 | UCHAR8 release_time:7; | ||
202 | UCHAR8 Unused5:1; | ||
203 | |||
204 | UCHAR8 release2_time:7; | ||
205 | UCHAR8 Unused6:1; | ||
206 | |||
207 | CHAR8 attack_level; | ||
208 | CHAR8 decay1_level; | ||
209 | CHAR8 decay2_level; | ||
210 | CHAR8 sustain_level; | ||
211 | CHAR8 release_level; | ||
212 | |||
213 | UCHAR8 attack_velocity:7; | ||
214 | UCHAR8 Unused7:1; | ||
215 | |||
216 | UCHAR8 volume_velocity:7; | ||
217 | UCHAR8 Unused8:1; | ||
218 | |||
219 | UCHAR8 keyboard_scaling:7; | ||
220 | UCHAR8 Unused9:1; | ||
221 | }; | ||
222 | typedef struct wf_envelope wavefront_envelope; | ||
223 | |||
224 | struct wf_lfo | ||
225 | { | ||
226 | UCHAR8 sample_number; | ||
227 | |||
228 | UCHAR8 frequency:7; | ||
229 | UCHAR8 Unused1:1; | ||
230 | |||
231 | UCHAR8 am_src:4; | ||
232 | UCHAR8 fm_src:4; | ||
233 | |||
234 | CHAR8 fm_amount; | ||
235 | CHAR8 am_amount; | ||
236 | CHAR8 start_level; | ||
237 | CHAR8 end_level; | ||
238 | |||
239 | UCHAR8 ramp_delay:7; | ||
240 | UCHAR8 wave_restart:1; /* for LFO2 only */ | ||
241 | |||
242 | UCHAR8 ramp_time:7; | ||
243 | UCHAR8 Unused2:1; | ||
244 | }; | ||
245 | typedef struct wf_lfo wavefront_lfo; | ||
246 | |||
247 | struct wf_patch | ||
248 | { | ||
249 | INT16 frequency_bias; /* ** THIS IS IN MOTOROLA FORMAT!! ** */ | ||
250 | |||
251 | UCHAR8 amplitude_bias:7; | ||
252 | UCHAR8 Unused1:1; | ||
253 | |||
254 | UCHAR8 portamento:7; | ||
255 | UCHAR8 Unused2:1; | ||
256 | |||
257 | UCHAR8 sample_number; | ||
258 | |||
259 | UCHAR8 pitch_bend:4; | ||
260 | UCHAR8 sample_msb:1; | ||
261 | UCHAR8 Unused3:3; | ||
262 | |||
263 | UCHAR8 mono:1; | ||
264 | UCHAR8 retrigger:1; | ||
265 | UCHAR8 nohold:1; | ||
266 | UCHAR8 restart:1; | ||
267 | UCHAR8 filterconfig:2; /* SDK says "not used" */ | ||
268 | UCHAR8 reuse:1; | ||
269 | UCHAR8 reset_lfo:1; | ||
270 | |||
271 | UCHAR8 fm_src2:4; | ||
272 | UCHAR8 fm_src1:4; | ||
273 | |||
274 | CHAR8 fm_amount1; | ||
275 | CHAR8 fm_amount2; | ||
276 | |||
277 | UCHAR8 am_src:4; | ||
278 | UCHAR8 Unused4:4; | ||
279 | |||
280 | CHAR8 am_amount; | ||
281 | |||
282 | UCHAR8 fc1_mode:4; | ||
283 | UCHAR8 fc2_mode:4; | ||
284 | |||
285 | CHAR8 fc1_mod_amount; | ||
286 | CHAR8 fc1_keyboard_scaling; | ||
287 | CHAR8 fc1_bias; | ||
288 | CHAR8 fc2_mod_amount; | ||
289 | CHAR8 fc2_keyboard_scaling; | ||
290 | CHAR8 fc2_bias; | ||
291 | |||
292 | UCHAR8 randomizer:7; | ||
293 | UCHAR8 Unused5:1; | ||
294 | |||
295 | struct wf_envelope envelope1; | ||
296 | struct wf_envelope envelope2; | ||
297 | struct wf_lfo lfo1; | ||
298 | struct wf_lfo lfo2; | ||
299 | }; | ||
300 | typedef struct wf_patch wavefront_patch; | ||
301 | |||
302 | struct wf_layer | ||
303 | { | ||
304 | UCHAR8 patch_number; | ||
305 | |||
306 | UCHAR8 mix_level:7; | ||
307 | UCHAR8 mute:1; | ||
308 | |||
309 | UCHAR8 split_point:7; | ||
310 | UCHAR8 play_below:1; | ||
311 | |||
312 | UCHAR8 pan_mod_src:2; | ||
313 | UCHAR8 pan_or_mod:1; | ||
314 | UCHAR8 pan:4; | ||
315 | UCHAR8 split_type:1; | ||
316 | }; | ||
317 | typedef struct wf_layer wavefront_layer; | ||
318 | |||
319 | struct wf_program | ||
320 | { | ||
321 | struct wf_layer layer[WF_NUM_LAYERS]; | ||
322 | }; | ||
323 | typedef struct wf_program wavefront_program; | ||
324 | |||
325 | struct wf_sample_offset | ||
326 | { | ||
327 | INT32 Fraction:4; | ||
328 | INT32 Integer:20; | ||
329 | INT32 Unused:8; | ||
330 | }; | ||
331 | typedef struct wf_sample_offset wavefront_sample_offset; | ||
332 | |||
333 | /* Sample slot types */ | ||
334 | |||
335 | #define WF_ST_SAMPLE 0 | ||
336 | #define WF_ST_MULTISAMPLE 1 | ||
337 | #define WF_ST_ALIAS 2 | ||
338 | #define WF_ST_EMPTY 3 | ||
339 | |||
340 | /* pseudo's */ | ||
341 | |||
342 | #define WF_ST_DRUM 4 | ||
343 | #define WF_ST_PROGRAM 5 | ||
344 | #define WF_ST_PATCH 6 | ||
345 | #define WF_ST_SAMPLEHDR 7 | ||
346 | |||
347 | #define WF_ST_MASK 0xf | ||
348 | |||
349 | /* Flags for slot status. These occupy the upper bits of the same byte | ||
350 | as a sample type. | ||
351 | */ | ||
352 | |||
353 | #define WF_SLOT_USED 0x80 /* XXX don't rely on this being accurate */ | ||
354 | #define WF_SLOT_FILLED 0x40 | ||
355 | #define WF_SLOT_ROM 0x20 | ||
356 | |||
357 | #define WF_SLOT_MASK 0xf0 | ||
358 | |||
359 | /* channel constants */ | ||
360 | |||
361 | #define WF_CH_MONO 0 | ||
362 | #define WF_CH_LEFT 1 | ||
363 | #define WF_CH_RIGHT 2 | ||
364 | |||
365 | /* Sample formats */ | ||
366 | |||
367 | #define LINEAR_16BIT 0 | ||
368 | #define WHITE_NOISE 1 | ||
369 | #define LINEAR_8BIT 2 | ||
370 | #define MULAW_8BIT 3 | ||
371 | |||
372 | #define WF_SAMPLE_IS_8BIT(smpl) ((smpl)->SampleResolution&2) | ||
373 | |||
374 | |||
375 | /* | ||
376 | |||
377 | Because most/all of the sample data we pass in via pointers has | ||
378 | never been copied (just mmap-ed into user space straight from the | ||
379 | disk), it would be nice to allow handling of multi-channel sample | ||
380 | data without forcing user-level extraction of the relevant bytes. | ||
381 | |||
382 | So, we need a way of specifying which channel to use (the WaveFront | ||
383 | only handles mono samples in a given slot), and the only way to do | ||
384 | this without using some struct other than wavefront_sample as the | ||
385 | interface is the awful hack of using the unused bits in a | ||
386 | wavefront_sample: | ||
387 | |||
388 | Val Meaning | ||
389 | --- ------- | ||
390 | 0 no channel selection (use channel 1, sample is MONO) | ||
391 | 1 use first channel, and skip one | ||
392 | 2 use second channel, and skip one | ||
393 | 3 use third channel, and skip two | ||
394 | 4 use fourth channel, skip three | ||
395 | 5 use fifth channel, skip four | ||
396 | 6 use six channel, skip five | ||
397 | |||
398 | |||
399 | This can handle up to 4 channels, and anyone downloading >4 channels | ||
400 | of sample data just to select one of them needs to find some tools | ||
401 | like sox ... | ||
402 | |||
403 | NOTE: values 0, 1 and 2 correspond to WF_CH_* above. This is | ||
404 | important. | ||
405 | |||
406 | */ | ||
407 | |||
408 | #define WF_SET_CHANNEL(samp,chn) \ | ||
409 | (samp)->Unused1 = chn & 0x1; \ | ||
410 | (samp)->Unused2 = chn & 0x2; \ | ||
411 | (samp)->Unused3 = chn & 0x4 | ||
412 | |||
413 | #define WF_GET_CHANNEL(samp) \ | ||
414 | (((samp)->Unused3 << 2)|((samp)->Unused2<<1)|(samp)->Unused1) | ||
415 | |||
416 | typedef struct wf_sample { | ||
417 | struct wf_sample_offset sampleStartOffset; | ||
418 | struct wf_sample_offset loopStartOffset; | ||
419 | struct wf_sample_offset loopEndOffset; | ||
420 | struct wf_sample_offset sampleEndOffset; | ||
421 | INT16 FrequencyBias; | ||
422 | UCHAR8 SampleResolution:2; /* sample_format */ | ||
423 | UCHAR8 Unused1:1; | ||
424 | UCHAR8 Loop:1; | ||
425 | UCHAR8 Bidirectional:1; | ||
426 | UCHAR8 Unused2:1; | ||
427 | UCHAR8 Reverse:1; | ||
428 | UCHAR8 Unused3:1; | ||
429 | } wavefront_sample; | ||
430 | |||
431 | typedef struct wf_multisample { | ||
432 | INT16 NumberOfSamples; /* log2 of the number of samples */ | ||
433 | INT16 SampleNumber[NUM_MIDIKEYS]; | ||
434 | } wavefront_multisample; | ||
435 | |||
436 | typedef struct wf_alias { | ||
437 | INT16 OriginalSample; | ||
438 | |||
439 | struct wf_sample_offset sampleStartOffset; | ||
440 | struct wf_sample_offset loopStartOffset; | ||
441 | struct wf_sample_offset sampleEndOffset; | ||
442 | struct wf_sample_offset loopEndOffset; | ||
443 | |||
444 | INT16 FrequencyBias; | ||
445 | |||
446 | UCHAR8 SampleResolution:2; | ||
447 | UCHAR8 Unused1:1; | ||
448 | UCHAR8 Loop:1; | ||
449 | UCHAR8 Bidirectional:1; | ||
450 | UCHAR8 Unused2:1; | ||
451 | UCHAR8 Reverse:1; | ||
452 | UCHAR8 Unused3:1; | ||
453 | |||
454 | /* This structure is meant to be padded only to 16 bits on their | ||
455 | original. Of course, whoever wrote their documentation didn't | ||
456 | realize that sizeof(struct) can be >= | ||
457 | sum(sizeof(struct-fields)) and so thought that giving a C level | ||
458 | description of the structs used in WavePatch files was | ||
459 | sufficient. I suppose it was, as long as you remember the | ||
460 | standard 16->32 bit issues. | ||
461 | */ | ||
462 | |||
463 | UCHAR8 sixteen_bit_padding; | ||
464 | } __attribute__((packed)) wavefront_alias; | ||
465 | |||
466 | typedef struct wf_drum { | ||
467 | UCHAR8 PatchNumber; | ||
468 | UCHAR8 MixLevel:7; | ||
469 | UCHAR8 Unmute:1; | ||
470 | UCHAR8 Group:4; | ||
471 | UCHAR8 Unused1:4; | ||
472 | UCHAR8 PanModSource:2; | ||
473 | UCHAR8 PanModulated:1; | ||
474 | UCHAR8 PanAmount:4; | ||
475 | UCHAR8 Unused2:1; | ||
476 | } wavefront_drum; | ||
477 | |||
478 | typedef struct wf_drumkit { | ||
479 | struct wf_drum drum[NUM_MIDIKEYS]; | ||
480 | } wavefront_drumkit; | ||
481 | |||
482 | typedef struct wf_channel_programs { | ||
483 | UCHAR8 Program[NUM_MIDICHANNELS]; | ||
484 | } wavefront_channel_programs; | ||
485 | |||
486 | /* How to get MIDI channel status from the data returned by | ||
487 | a WFC_GET_CHANNEL_STATUS command (a struct wf_channel_programs) | ||
488 | */ | ||
489 | |||
490 | #define WF_CHANNEL_STATUS(ch,wcp) (wcp)[(ch/7)] & (1<<((ch)%7)) | ||
491 | |||
492 | typedef union wf_any { | ||
493 | wavefront_sample s; | ||
494 | wavefront_multisample ms; | ||
495 | wavefront_alias a; | ||
496 | wavefront_program pr; | ||
497 | wavefront_patch p; | ||
498 | wavefront_drum d; | ||
499 | } wavefront_any; | ||
500 | |||
501 | /* Hannu Solvainen hoped that his "patch_info" struct in soundcard.h | ||
502 | might work for other wave-table based patch loading situations. | ||
503 | Alas, his fears were correct. The WaveFront doesn't even come with | ||
504 | just "patches", but several different kind of structures that | ||
505 | control the sound generation process. | ||
506 | */ | ||
507 | |||
508 | typedef struct wf_patch_info { | ||
509 | |||
510 | /* the first two fields are used by the OSS "patch loading" interface | ||
511 | only, and are unused by the current user-level library. | ||
512 | */ | ||
513 | |||
514 | INT16 key; /* Use WAVEFRONT_PATCH here */ | ||
515 | UINT16 devno; /* fill in when sending */ | ||
516 | UCHAR8 subkey; /* WF_ST_{SAMPLE,ALIAS,etc.} */ | ||
517 | |||
518 | #define WAVEFRONT_FIND_FREE_SAMPLE_SLOT 999 | ||
519 | |||
520 | UINT16 number; /* patch/sample/prog number */ | ||
521 | |||
522 | UINT32 size; /* size of any data included in | ||
523 | one of the fields in `hdrptr', or | ||
524 | as `dataptr'. | ||
525 | |||
526 | NOTE: for actual samples, this is | ||
527 | the size of the *SELECTED CHANNEL* | ||
528 | even if more data is actually available. | ||
529 | |||
530 | So, a stereo sample (2 channels) of | ||
531 | 6000 bytes total has `size' = 3000. | ||
532 | |||
533 | See the macros and comments for | ||
534 | WF_{GET,SET}_CHANNEL above. | ||
535 | |||
536 | */ | ||
537 | wavefront_any __user *hdrptr; /* user-space ptr to hdr bytes */ | ||
538 | UINT16 __user *dataptr; /* actual sample data */ | ||
539 | |||
540 | wavefront_any hdr; /* kernel-space copy of hdr bytes */ | ||
541 | } wavefront_patch_info; | ||
542 | |||
543 | /* The maximum number of bytes we will ever move to or from user space | ||
544 | in response to a WFC_* command. This obviously doesn't cover | ||
545 | actual sample data. | ||
546 | */ | ||
547 | |||
548 | #define WF_MAX_READ sizeof(wavefront_multisample) | ||
549 | #define WF_MAX_WRITE sizeof(wavefront_multisample) | ||
550 | |||
551 | /* | ||
552 | This allows us to execute any WF command except the download/upload | ||
553 | ones, which are handled differently due to copyin/copyout issues as | ||
554 | well as data-nybbling to/from the card. | ||
555 | */ | ||
556 | |||
557 | typedef struct wavefront_control { | ||
558 | int cmd; /* WFC_* */ | ||
559 | char status; /* return status to user-space */ | ||
560 | unsigned char rbuf[WF_MAX_READ]; /* bytes read from card */ | ||
561 | unsigned char wbuf[WF_MAX_WRITE]; /* bytes written to card */ | ||
562 | } wavefront_control; | ||
563 | |||
564 | #define WFCTL_WFCMD 0x1 | ||
565 | #define WFCTL_LOAD_SPP 0x2 | ||
566 | |||
567 | /* Modulator table */ | ||
568 | |||
569 | #define WF_MOD_LFO1 0 | ||
570 | #define WF_MOD_LFO2 1 | ||
571 | #define WF_MOD_ENV1 2 | ||
572 | #define WF_MOD_ENV2 3 | ||
573 | #define WF_MOD_KEYBOARD 4 | ||
574 | #define WF_MOD_LOGKEY 5 | ||
575 | #define WF_MOD_VELOCITY 6 | ||
576 | #define WF_MOD_LOGVEL 7 | ||
577 | #define WF_MOD_RANDOM 8 | ||
578 | #define WF_MOD_PRESSURE 9 | ||
579 | #define WF_MOD_MOD_WHEEL 10 | ||
580 | #define WF_MOD_1 WF_MOD_MOD_WHEEL | ||
581 | #define WF_MOD_BREATH 11 | ||
582 | #define WF_MOD_2 WF_MOD_BREATH | ||
583 | #define WF_MOD_FOOT 12 | ||
584 | #define WF_MOD_4 WF_MOD_FOOT | ||
585 | #define WF_MOD_VOLUME 13 | ||
586 | #define WF_MOD_7 WF_MOD_VOLUME | ||
587 | #define WF_MOD_PAN 14 | ||
588 | #define WF_MOD_10 WF_MOD_PAN | ||
589 | #define WF_MOD_EXPR 15 | ||
590 | #define WF_MOD_11 WF_MOD_EXPR | ||
591 | |||
592 | /* FX-related material */ | ||
593 | |||
594 | typedef struct wf_fx_info { | ||
595 | int request; /* see list below */ | ||
596 | int data[4]; /* we don't need much */ | ||
597 | } wavefront_fx_info; | ||
598 | |||
599 | /* support for each of these will be forthcoming once I or someone | ||
600 | else has figured out which of the addresses on page 6 and page 7 of | ||
601 | the YSS225 control each parameter. Incidentally, these come from | ||
602 | the Windows driver interface, but again, Turtle Beach didn't | ||
603 | document the API to use them. | ||
604 | */ | ||
605 | |||
606 | #define WFFX_SETOUTGAIN 0 | ||
607 | #define WFFX_SETSTEREOOUTGAIN 1 | ||
608 | #define WFFX_SETREVERBIN1GAIN 2 | ||
609 | #define WFFX_SETREVERBIN2GAIN 3 | ||
610 | #define WFFX_SETREVERBIN3GAIN 4 | ||
611 | #define WFFX_SETCHORUSINPORT 5 | ||
612 | #define WFFX_SETREVERBIN1PORT 6 | ||
613 | #define WFFX_SETREVERBIN2PORT 7 | ||
614 | #define WFFX_SETREVERBIN3PORT 8 | ||
615 | #define WFFX_SETEFFECTPORT 9 | ||
616 | #define WFFX_SETAUXPORT 10 | ||
617 | #define WFFX_SETREVERBTYPE 11 | ||
618 | #define WFFX_SETREVERBDELAY 12 | ||
619 | #define WFFX_SETCHORUSLFO 13 | ||
620 | #define WFFX_SETCHORUSPMD 14 | ||
621 | #define WFFX_SETCHORUSAMD 15 | ||
622 | #define WFFX_SETEFFECT 16 | ||
623 | #define WFFX_SETBASEALL 17 | ||
624 | #define WFFX_SETREVERBALL 18 | ||
625 | #define WFFX_SETCHORUSALL 20 | ||
626 | #define WFFX_SETREVERBDEF 22 | ||
627 | #define WFFX_SETCHORUSDEF 23 | ||
628 | #define WFFX_DELAYSETINGAIN 24 | ||
629 | #define WFFX_DELAYSETFBGAIN 25 | ||
630 | #define WFFX_DELAYSETFBLPF 26 | ||
631 | #define WFFX_DELAYSETGAIN 27 | ||
632 | #define WFFX_DELAYSETTIME 28 | ||
633 | #define WFFX_DELAYSETFBTIME 29 | ||
634 | #define WFFX_DELAYSETALL 30 | ||
635 | #define WFFX_DELAYSETDEF 32 | ||
636 | #define WFFX_SDELAYSETINGAIN 33 | ||
637 | #define WFFX_SDELAYSETFBGAIN 34 | ||
638 | #define WFFX_SDELAYSETFBLPF 35 | ||
639 | #define WFFX_SDELAYSETGAIN 36 | ||
640 | #define WFFX_SDELAYSETTIME 37 | ||
641 | #define WFFX_SDELAYSETFBTIME 38 | ||
642 | #define WFFX_SDELAYSETALL 39 | ||
643 | #define WFFX_SDELAYSETDEF 41 | ||
644 | #define WFFX_DEQSETINGAIN 42 | ||
645 | #define WFFX_DEQSETFILTER 43 | ||
646 | #define WFFX_DEQSETALL 44 | ||
647 | #define WFFX_DEQSETDEF 46 | ||
648 | #define WFFX_MUTE 47 | ||
649 | #define WFFX_FLANGESETBALANCE 48 | ||
650 | #define WFFX_FLANGESETDELAY 49 | ||
651 | #define WFFX_FLANGESETDWFFX_TH 50 | ||
652 | #define WFFX_FLANGESETFBGAIN 51 | ||
653 | #define WFFX_FLANGESETINGAIN 52 | ||
654 | #define WFFX_FLANGESETLFO 53 | ||
655 | #define WFFX_FLANGESETALL 54 | ||
656 | #define WFFX_FLANGESETDEF 56 | ||
657 | #define WFFX_PITCHSETSHIFT 57 | ||
658 | #define WFFX_PITCHSETBALANCE 58 | ||
659 | #define WFFX_PITCHSETALL 59 | ||
660 | #define WFFX_PITCHSETDEF 61 | ||
661 | #define WFFX_SRSSETINGAIN 62 | ||
662 | #define WFFX_SRSSETSPACE 63 | ||
663 | #define WFFX_SRSSETCENTER 64 | ||
664 | #define WFFX_SRSSETGAIN 65 | ||
665 | #define WFFX_SRSSETMODE 66 | ||
666 | #define WFFX_SRSSETDEF 68 | ||
667 | |||
668 | /* Allow direct user-space control over FX memory/coefficient data. | ||
669 | In theory this could be used to download the FX microprogram, | ||
670 | but it would be a little slower, and involve some weird code. | ||
671 | */ | ||
672 | |||
673 | #define WFFX_MEMSET 69 | ||
674 | |||
675 | #endif /* __wavefront_h__ */ | ||
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index a341c8032866..fc35e6bdfb93 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -85,7 +85,6 @@ int wakeup_pdflush(long nr_pages); | |||
85 | void laptop_io_completion(void); | 85 | void laptop_io_completion(void); |
86 | void laptop_sync_completion(void); | 86 | void laptop_sync_completion(void); |
87 | void throttle_vm_writeout(void); | 87 | void throttle_vm_writeout(void); |
88 | void writeback_congestion_end(void); | ||
89 | 88 | ||
90 | /* These are exported to sysctl. */ | 89 | /* These are exported to sysctl. */ |
91 | extern int dirty_background_ratio; | 90 | extern int dirty_background_ratio; |
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index cda8a96e2fa0..0e7f1e20ea45 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
@@ -41,6 +41,7 @@ struct xattr_handler { | |||
41 | }; | 41 | }; |
42 | 42 | ||
43 | ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t); | 43 | ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t); |
44 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | ||
44 | int vfs_setxattr(struct dentry *, char *, void *, size_t, int); | 45 | int vfs_setxattr(struct dentry *, char *, void *, size_t, int); |
45 | int vfs_removexattr(struct dentry *, char *); | 46 | int vfs_removexattr(struct dentry *, char *); |
46 | 47 | ||
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index 430afd058269..8ae7f744917b 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
@@ -129,7 +129,8 @@ enum | |||
129 | #define XFRM_MODE_TUNNEL 1 | 129 | #define XFRM_MODE_TUNNEL 1 |
130 | #define XFRM_MODE_ROUTEOPTIMIZATION 2 | 130 | #define XFRM_MODE_ROUTEOPTIMIZATION 2 |
131 | #define XFRM_MODE_IN_TRIGGER 3 | 131 | #define XFRM_MODE_IN_TRIGGER 3 |
132 | #define XFRM_MODE_MAX 4 | 132 | #define XFRM_MODE_BEET 4 |
133 | #define XFRM_MODE_MAX 5 | ||
133 | 134 | ||
134 | /* Netlink configuration messages. */ | 135 | /* Netlink configuration messages. */ |
135 | enum { | 136 | enum { |