summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 17:50:35 -0800
committerLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 17:50:35 -0800
commit950a2b0b551d258daad060b9566910ca351d176a (patch)
tree79988dcb4676d8dc54952ba2f29196322278f81c /include
parent6aea16664696367eaab3ec2c00922c942a601073 (diff)
v2.4.0.4 -> v2.4.0.5
- ppp UP deadlock attack fix
Diffstat (limited to 'include')
-rw-r--r--include/linux/blk.h4
-rw-r--r--include/linux/blkdev.h16
-rw-r--r--include/linux/elevator.h78
-rw-r--r--include/linux/reiserfs_fs.h6
-rw-r--r--include/linux/sched.h20
5 files changed, 56 insertions, 68 deletions
diff --git a/include/linux/blk.h b/include/linux/blk.h
index 11db342a3c68..c5fba4f8d84a 100644
--- a/include/linux/blk.h
+++ b/include/linux/blk.h
@@ -87,10 +87,6 @@ void initrd_init(void);
static inline void blkdev_dequeue_request(struct request * req)
{
- if (req->e) {
- req->e->dequeue_fn(req);
- req->e = NULL;
- }
list_del(&req->queue);
}
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 851bf3c534fe..0ea8f7064ba7 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -23,8 +23,6 @@ struct request {
int elevator_sequence;
struct list_head table;
- struct list_head *free_list;
-
volatile int rq_status; /* should split this into a few status bits */
#define RQ_INACTIVE (-1)
#define RQ_ACTIVE 1
@@ -47,7 +45,6 @@ struct request {
struct buffer_head * bh;
struct buffer_head * bhtail;
request_queue_t *q;
- elevator_t *e;
};
#include <linux/elevator.h>
@@ -69,7 +66,7 @@ typedef void (unplug_device_fn) (void *q);
/*
* Default nr free requests per queue
*/
-#define QUEUE_NR_REQUESTS 256
+#define QUEUE_NR_REQUESTS 512
struct request_queue
{
@@ -77,6 +74,8 @@ struct request_queue
* the queue request freelist, one for reads and one for writes
*/
struct list_head request_freelist[2];
+ struct list_head pending_freelist[2];
+ int pending_free[2];
/*
* Together with queue_head for cacheline sharing
@@ -116,7 +115,7 @@ struct request_queue
* Is meant to protect the queue in the future instead of
* io_request_lock
*/
- spinlock_t request_lock;
+ spinlock_t queue_lock;
/*
* Tasks wait here for free request
@@ -152,6 +151,7 @@ extern void grok_partitions(struct gendisk *dev, int drive, unsigned minors, lon
extern void register_disk(struct gendisk *dev, kdev_t first, unsigned minors, struct block_device_operations *ops, long size);
extern void generic_make_request(int rw, struct buffer_head * bh);
extern request_queue_t *blk_get_queue(kdev_t dev);
+extern inline request_queue_t *__blk_get_queue(kdev_t dev);
extern void blkdev_release_request(struct request *);
/*
@@ -162,6 +162,7 @@ extern void blk_cleanup_queue(request_queue_t *);
extern void blk_queue_headactive(request_queue_t *, int);
extern void blk_queue_pluggable(request_queue_t *, plug_device_fn *);
extern void blk_queue_make_request(request_queue_t *, make_request_fn *);
+extern void generic_unplug_device(void *);
extern int * blk_size[MAX_BLKDEV];
@@ -175,9 +176,8 @@ extern int * max_sectors[MAX_BLKDEV];
extern int * max_segments[MAX_BLKDEV];
-#define MAX_SECTORS 254
-
-#define MAX_SEGMENTS MAX_SECTORS
+#define MAX_SEGMENTS 128
+#define MAX_SECTORS (MAX_SEGMENTS*8)
#define PageAlignSize(size) (((size) + PAGE_SIZE -1) & PAGE_MASK)
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
index 16fa9cae68f3..9e9b27dfa07e 100644
--- a/include/linux/elevator.h
+++ b/include/linux/elevator.h
@@ -7,34 +7,32 @@ typedef void (elevator_fn) (struct request *, elevator_t *,
struct list_head *,
struct list_head *, int);
-typedef int (elevator_merge_fn) (request_queue_t *, struct request **,
- struct buffer_head *, int, int *, int *);
+typedef int (elevator_merge_fn) (request_queue_t *, struct request **, struct list_head *,
+ struct buffer_head *, int, int, int);
-typedef void (elevator_dequeue_fn) (struct request *);
+typedef void (elevator_merge_cleanup_fn) (request_queue_t *, struct request *, int);
+
+typedef void (elevator_merge_req_fn) (struct request *, struct request *);
struct elevator_s
{
- int sequence;
-
int read_latency;
int write_latency;
- int max_bomb_segments;
- unsigned int nr_segments;
- int read_pendings;
-
- elevator_fn * elevator_fn;
elevator_merge_fn *elevator_merge_fn;
- elevator_dequeue_fn *dequeue_fn;
+ elevator_merge_cleanup_fn *elevator_merge_cleanup_fn;
+ elevator_merge_req_fn *elevator_merge_req_fn;
unsigned int queue_ID;
};
-void elevator_noop(struct request *, elevator_t *, struct list_head *, struct list_head *, int);
-int elevator_noop_merge(request_queue_t *, struct request **, struct buffer_head *, int, int *, int *);
-void elevator_noop_dequeue(struct request *);
-void elevator_linus(struct request *, elevator_t *, struct list_head *, struct list_head *, int);
-int elevator_linus_merge(request_queue_t *, struct request **, struct buffer_head *, int, int *, int *);
+int elevator_noop_merge(request_queue_t *, struct request **, struct list_head *, struct buffer_head *, int, int, int);
+void elevator_noop_merge_cleanup(request_queue_t *, struct request *, int);
+void elevator_noop_merge_req(struct request *, struct request *);
+
+int elevator_linus_merge(request_queue_t *, struct request **, struct list_head *, struct buffer_head *, int, int, int);
+void elevator_linus_merge_cleanup(request_queue_t *, struct request *, int);
+void elevator_linus_merge_req(struct request *, struct request *);
typedef struct blkelv_ioctl_arg_s {
int queue_ID;
@@ -69,6 +67,10 @@ extern void elevator_init(elevator_t *, elevator_t);
(s1)->sector < (s2)->sector)) || \
(s1)->rq_dev < (s2)->rq_dev)
+#define BHRQ_IN_ORDER(bh, rq) \
+ (((bh)->b_rdev == (rq)->rq_dev && \
+ (bh)->b_rsector < (rq)->sector))
+
static inline int elevator_request_latency(elevator_t * elevator, int rw)
{
int latency;
@@ -80,36 +82,24 @@ static inline int elevator_request_latency(elevator_t * elevator, int rw)
return latency;
}
-#define ELEVATOR_NOOP \
-((elevator_t) { \
- 0, /* sequence */ \
- \
- 0, /* read_latency */ \
- 0, /* write_latency */ \
- 0, /* max_bomb_segments */ \
- \
- 0, /* nr_segments */ \
- 0, /* read_pendings */ \
- \
- elevator_noop, /* elevator_fn */ \
- elevator_noop_merge, /* elevator_merge_fn */ \
- elevator_noop_dequeue, /* dequeue_fn */ \
+#define ELEVATOR_NOOP \
+((elevator_t) { \
+ 0, /* read_latency */ \
+ 0, /* write_latency */ \
+ \
+ elevator_noop_merge, /* elevator_merge_fn */ \
+ elevator_noop_merge_cleanup, /* elevator_merge_cleanup_fn */ \
+ elevator_noop_merge_req, /* elevator_merge_req_fn */ \
})
-#define ELEVATOR_LINUS \
-((elevator_t) { \
- 0, /* not used */ \
- \
- 1000000, /* read passovers */ \
- 2000000, /* write passovers */ \
- 0, /* max_bomb_segments */ \
- \
- 0, /* not used */ \
- 0, /* not used */ \
- \
- elevator_linus, /* elevator_fn */ \
- elevator_linus_merge, /* elevator_merge_fn */ \
- elevator_noop_dequeue, /* dequeue_fn */ \
+#define ELEVATOR_LINUS \
+((elevator_t) { \
+ 8192, /* read passovers */ \
+ 16384, /* write passovers */ \
+ \
+ elevator_linus_merge, /* elevator_merge_fn */ \
+ elevator_linus_merge_cleanup, /* elevator_merge_cleanup_fn */ \
+ elevator_linus_merge_req, /* elevator_merge_req_fn */ \
})
#endif
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
index 8b2d0ceafa99..277281d6d7b4 100644
--- a/include/linux/reiserfs_fs.h
+++ b/include/linux/reiserfs_fs.h
@@ -926,8 +926,7 @@ extern inline int entry_length (struct buffer_head * bh, struct item_head * ih,
//((block_size - BLKH_SIZE - IH_SIZE - DEH_SIZE * 2) / 2)
// two entries per block (at least)
-#define REISERFS_MAX_NAME_LEN(block_size) \
-((block_size - BLKH_SIZE - IH_SIZE - DEH_SIZE))
+#define REISERFS_MAX_NAME_LEN(block_size) 255
@@ -1753,7 +1752,6 @@ void reiserfs_do_truncate (struct reiserfs_transaction_handle *th,
struct inode * p_s_inode, struct page *,
int update_timestamps);
//
-void reiserfs_vfs_truncate_file (struct inode * p_s_inode);
//void lock_inode_to_convert (struct inode * p_s_inode);
//void unlock_inode_after_convert (struct inode * p_s_inode);
//void increment_i_read_sync_counter (struct inode * p_s_inode);
@@ -1792,7 +1790,7 @@ void padd_item (char * item, int total_length, int length);
/* inode.c */
int reiserfs_prepare_write(struct file *, struct page *, unsigned, unsigned) ;
-void reiserfs_truncate_file(struct inode *) ;
+void reiserfs_truncate_file(struct inode *, int update_timestamps) ;
void make_cpu_key (struct cpu_key * cpu_key, const struct inode * inode, loff_t offset,
int type, int key_length);
void make_le_item_head (struct item_head * ih, struct cpu_key * key, int version,
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 4198025856d3..4f6645a3d555 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -543,8 +543,8 @@ extern unsigned long prof_shift;
#define CURRENT_TIME (xtime.tv_sec)
-extern void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, unsigned int wq_mode));
-extern void FASTCALL(__wake_up_sync(wait_queue_head_t *q, unsigned int mode, unsigned int wq_mode));
+extern void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, int nr));
+extern void FASTCALL(__wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr));
extern void FASTCALL(sleep_on(wait_queue_head_t *q));
extern long FASTCALL(sleep_on_timeout(wait_queue_head_t *q,
signed long timeout));
@@ -553,12 +553,16 @@ extern long FASTCALL(interruptible_sleep_on_timeout(wait_queue_head_t *q,
signed long timeout));
extern void FASTCALL(wake_up_process(struct task_struct * tsk));
-#define wake_up(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,WQ_FLAG_EXCLUSIVE)
-#define wake_up_all(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,0)
-#define wake_up_sync(x) __wake_up_sync((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,WQ_FLAG_EXCLUSIVE)
-#define wake_up_interruptible(x) __wake_up((x),TASK_INTERRUPTIBLE,WQ_FLAG_EXCLUSIVE)
-#define wake_up_interruptible_all(x) __wake_up((x),TASK_INTERRUPTIBLE,0)
-#define wake_up_interruptible_sync(x) __wake_up_sync((x),TASK_INTERRUPTIBLE,WQ_FLAG_EXCLUSIVE)
+#define wake_up(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1)
+#define wake_up_nr(x, nr) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr)
+#define wake_up_all(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0)
+#define wake_up_sync(x) __wake_up_sync((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1)
+#define wake_up_sync_nr(x, nr) __wake_up_sync((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr)
+#define wake_up_interruptible(x) __wake_up((x),TASK_INTERRUPTIBLE, 1)
+#define wake_up_interruptible_nr(x, nr) __wake_up((x),TASK_INTERRUPTIBLE, nr)
+#define wake_up_interruptible_all(x) __wake_up((x),TASK_INTERRUPTIBLE, 0)
+#define wake_up_interruptible_sync(x) __wake_up_sync((x),TASK_INTERRUPTIBLE, 1)
+#define wake_up_interruptible_sync_nr(x) __wake_up_sync((x),TASK_INTERRUPTIBLE, nr)
extern int in_group_p(gid_t);
extern int in_egroup_p(gid_t);