diff options
| author | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 19:11:28 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 19:11:28 -0800 |
| commit | fff10634980710b1edd0c849b8478d3f5ec5ee95 (patch) | |
| tree | 81139d648c53ee0a816e17a60dc5d213decc23e6 /include | |
| parent | 74f5133bc757c27c168be048b66ddfe53160a793 (diff) | |
v2.4.6.7 -> v2.4.6.8
- Chris Mason: reiserfs update
- Paul Mackerras: PPC updates (softirq)
- Kai Germaschewski: ISDN updates
- various: workaround for cpuid inline asm problem with egcs-2.91.66
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-i386/processor.h | 30 | ||||
| -rw-r--r-- | include/asm-ppc/hardirq.h | 3 | ||||
| -rw-r--r-- | include/asm-ppc/immap_8260.h | 7 | ||||
| -rw-r--r-- | include/asm-ppc/softirq.h | 3 | ||||
| -rw-r--r-- | include/linux/fs.h | 11 | ||||
| -rw-r--r-- | include/linux/reiserfs_fs.h | 29 | ||||
| -rw-r--r-- | include/linux/reiserfs_fs_i.h | 20 | ||||
| -rw-r--r-- | include/linux/reiserfs_fs_sb.h | 4 |
8 files changed, 41 insertions, 66 deletions
diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h index 2ce1df92e274..99b6c97c0eb1 100644 --- a/include/asm-i386/processor.h +++ b/include/asm-i386/processor.h @@ -126,7 +126,7 @@ extern inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx) "=b" (*ebx), "=c" (*ecx), "=d" (*edx) - : "a" (op)); + : "0" (op)); } /* @@ -134,38 +134,42 @@ extern inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx) */ extern inline unsigned int cpuid_eax(unsigned int op) { - unsigned int eax, ebx, ecx, edx; + unsigned int eax; __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); + : "=a" (eax) + : "0" (op) + : "bx", "cx", "dx"); return eax; } extern inline unsigned int cpuid_ebx(unsigned int op) { - unsigned int eax, ebx, ecx, edx; + unsigned int eax, ebx; __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); + : "=a" (eax), "=b" (ebx) + : "0" (op) + : "cx", "dx" ); return ebx; } extern inline unsigned int cpuid_ecx(unsigned int op) { - unsigned int eax, ebx, ecx, edx; + unsigned int eax, ecx; __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); + : "=a" (eax), "=c" (ecx) + : "0" (op) + : "bx", "dx" ); return ecx; } extern inline unsigned int cpuid_edx(unsigned int op) { - unsigned int eax, ebx, ecx, edx; + unsigned int eax, edx; __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); + : "=a" (eax), "=d" (edx) + : "0" (op) + : "bx", "cx"); return edx; } diff --git a/include/asm-ppc/hardirq.h b/include/asm-ppc/hardirq.h index 152dc842d2cd..29522d2e0561 100644 --- a/include/asm-ppc/hardirq.h +++ b/include/asm-ppc/hardirq.h @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.hardirq.h 1.10 06/09/01 22:16:38 paulus + * BK Id: SCCS/s.hardirq.h 1.12 07/10/01 11:26:58 trini */ #ifdef __KERNEL__ #ifndef __ASM_HARDIRQ_H @@ -19,6 +19,7 @@ typedef struct { unsigned int __local_irq_count; unsigned int __local_bh_count; unsigned int __syscall_count; + struct task_struct * __ksoftirqd_task; unsigned int __last_jiffy_stamp; } ____cacheline_aligned irq_cpustat_t; diff --git a/include/asm-ppc/immap_8260.h b/include/asm-ppc/immap_8260.h index 4cf4f4a42f97..9f724ac37098 100644 --- a/include/asm-ppc/immap_8260.h +++ b/include/asm-ppc/immap_8260.h @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.immap_8260.h 1.5 05/17/01 18:14:24 cort + * BK Id: SCCS/s.immap_8260.h 1.8 07/18/01 15:46:50 trini */ /* @@ -431,10 +431,7 @@ typedef struct immap { char res11[4096]; } immap_t; -/* The 8260 relies heavily on the IMMR, so we keep it around as a - * kernel global symbol now. Should have done this for the 8xx...... - */ -immap_t *immr; +extern immap_t *immr; #endif /* __IMMAP_82XX__ */ #endif /* __KERNEL__ */ diff --git a/include/asm-ppc/softirq.h b/include/asm-ppc/softirq.h index ed043d48872e..dd652196bdf0 100644 --- a/include/asm-ppc/softirq.h +++ b/include/asm-ppc/softirq.h @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.softirq.h 1.10 06/09/01 22:16:38 paulus + * BK Id: SCCS/s.softirq.h 1.13 07/12/01 20:02:34 paulus */ #ifdef __KERNEL__ #ifndef __ASM_SOFTIRQ_H @@ -25,7 +25,6 @@ do { \ if (!--local_bh_count(smp_processor_id()) \ && softirq_pending(smp_processor_id())) { \ do_softirq(); \ - __sti(); \ } \ } while (0) diff --git a/include/linux/fs.h b/include/linux/fs.h index 6f6ef817b059..76bebdc14974 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1069,6 +1069,17 @@ extern void set_buffer_async_io(struct buffer_head *bh) ; #define BUF_PROTECTED 3 /* Ramdisk persistent storage */ #define NR_LIST 4 +static inline void get_bh(struct buffer_head * bh) +{ + atomic_inc(&(bh)->b_count); +} + +static inline void put_bh(struct buffer_head *bh) +{ + smp_mb__before_atomic_dec(); + atomic_dec(&bh->b_count); +} + /* * This is called by bh->b_end_io() handlers when I/O has completed. */ diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index f46154e9fdac..2bd224e60dd6 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h @@ -65,6 +65,9 @@ /* enable journalling */ #define ENABLE_JOURNAL +#define USE_INODE_GENERATION_COUNTER + + #ifdef __KERNEL__ /* #define REISERFS_CHECK */ @@ -708,6 +711,7 @@ struct stat_data { __u32 sd_blocks; union { __u32 sd_rdev; + __u32 sd_generation; //__u32 sd_first_direct_byte; /* first byte of file which is stored in a direct item: except that if it equals 1 @@ -1102,7 +1106,7 @@ struct path var = {ILLEGAL_PATH_ELEMENT_OFFSET, } #define PATH_H_PATH_OFFSET(p_s_path, n_h) ((p_s_path)->path_length - (n_h)) -#define get_bh(path) PATH_PLAST_BUFFER(path) +#define get_last_bh(path) PATH_PLAST_BUFFER(path) #define get_ih(path) PATH_PITEM_HEAD(path) #define get_item_pos(path) PATH_LAST_POSITION(path) #define get_item(path) ((void *)B_N_PITEM(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION (path))) @@ -1541,29 +1545,6 @@ struct reiserfs_journal_header { __u32 j_mount_id ; } ; -/* these are used to keep flush pages that contain converted direct items. -** if the page is not flushed before the transaction that converted it -** is committed, we risk losing data -** -** note, while a page is in this list, its counter is incremented. -*/ -struct reiserfs_page_list { - struct reiserfs_page_list *next ; - struct reiserfs_page_list *prev ; - struct page *page ; - unsigned long blocknr ; /* block number holding converted data */ - - /* if a transaction writer has the page locked the flush_page_list - ** function doesn't need to (and can't) get the lock while flushing - ** the page. do_not_lock needs to be set by anyone who calls journal_end - ** with a page lock held. They have to look in the inode and see - ** if the inode has the page they have locked in the flush list. - ** - ** this sucks. - */ - int do_not_lock ; -} ; - extern task_queue reiserfs_commit_thread_tq ; extern wait_queue_head_t reiserfs_commit_thread_wait ; diff --git a/include/linux/reiserfs_fs_i.h b/include/linux/reiserfs_fs_i.h index 39c37e2045c6..a43342f84d56 100644 --- a/include/linux/reiserfs_fs_i.h +++ b/include/linux/reiserfs_fs_i.h @@ -3,11 +3,6 @@ #include <linux/list.h> -/* these are used to keep track of the pages that need -** flushing before the current transaction can commit -*/ -struct reiserfs_page_list ; - struct reiserfs_inode_info { __u32 i_key [4];/* key is still 4 32 bit integers */ @@ -22,21 +17,6 @@ struct reiserfs_inode_info { __u32 i_first_direct_byte; // offset of first byte stored in direct item. - /* pointer to the page that must be flushed before - ** the current transaction can commit. - ** - ** this pointer is only used when the tail is converted back into - ** a direct item, or the file is deleted - */ - struct reiserfs_page_list *i_converted_page ; - - /* we save the id of the transaction when we did the direct->indirect - ** conversion. That allows us to flush the buffers to disk - ** without having to update this inode to zero out the converted - ** page variable - */ - int i_conversion_trans_id ; - /* My guess is this contains the first unused block of a sequence of blocks plus the length of the diff --git a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h index 68d2e003b724..6e203657bfc7 100644 --- a/include/linux/reiserfs_fs_sb.h +++ b/include/linux/reiserfs_fs_sb.h @@ -60,7 +60,8 @@ struct reiserfs_super_block don't need to save bytes in the superblock. -Hans */ __u16 s_reserved; - char s_unused[128] ; /* zero filled by mkreiserfs */ + __u32 s_inode_generation; + char s_unused[124] ; /* zero filled by mkreiserfs */ } __attribute__ ((__packed__)); #define SB_SIZE (sizeof(struct reiserfs_super_block)) @@ -249,6 +250,7 @@ struct reiserfs_journal { int j_free_bitmap_nodes ; int j_used_bitmap_nodes ; struct list_head j_bitmap_nodes ; + struct inode j_dummy_inode ; struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS] ; /* array of bitmaps to record the deleted blocks */ struct reiserfs_journal_list j_journal_list[JOURNAL_LIST_COUNT] ; /* array of all the journal lists */ struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE] ; /* hash table for real buffer heads in current trans */ |
