diff options
author | Steve French <sfrench@us.ibm.com> | 2006-02-18 10:07:18 -0500 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2006-02-18 10:07:18 -0500 |
commit | e601ef22bc5ec9332c8d785533895ee81c834b8a (patch) | |
tree | 4685a666fe2a553dccdfe7b4b3f88816d075b29e /fs | |
parent | 27754b34600770beb38e3ae12cb3f345f02e3797 (diff) | |
parent | bd71c2b17468a2531fb4c81ec1d73520845e97e1 (diff) |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/compat.c | 6 | ||||
-rw-r--r-- | fs/ext2/xattr.c | 6 | ||||
-rw-r--r-- | fs/fuse/dev.c | 6 | ||||
-rw-r--r-- | fs/fuse/file.c | 11 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmcommon.h | 4 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmconvert.c | 12 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmlock.c | 25 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmmaster.c | 7 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmrecovery.c | 42 | ||||
-rw-r--r-- | fs/ocfs2/journal.c | 7 | ||||
-rw-r--r-- | fs/ocfs2/journal.h | 2 | ||||
-rw-r--r-- | fs/select.c | 6 |
12 files changed, 112 insertions, 22 deletions
diff --git a/fs/compat.c b/fs/compat.c index a2ba78bdf7f7..5333c7d7427f 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -1757,7 +1757,7 @@ asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp, | |||
1757 | goto sticky; | 1757 | goto sticky; |
1758 | rtv.tv_usec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)); | 1758 | rtv.tv_usec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)); |
1759 | rtv.tv_sec = timeout; | 1759 | rtv.tv_sec = timeout; |
1760 | if (compat_timeval_compare(&rtv, &tv) < 0) | 1760 | if (compat_timeval_compare(&rtv, &tv) >= 0) |
1761 | rtv = tv; | 1761 | rtv = tv; |
1762 | if (copy_to_user(tvp, &rtv, sizeof(rtv))) { | 1762 | if (copy_to_user(tvp, &rtv, sizeof(rtv))) { |
1763 | sticky: | 1763 | sticky: |
@@ -1834,7 +1834,7 @@ asmlinkage long compat_sys_pselect7(int n, compat_ulong_t __user *inp, | |||
1834 | rts.tv_sec++; | 1834 | rts.tv_sec++; |
1835 | rts.tv_nsec -= NSEC_PER_SEC; | 1835 | rts.tv_nsec -= NSEC_PER_SEC; |
1836 | } | 1836 | } |
1837 | if (compat_timespec_compare(&rts, &ts) < 0) | 1837 | if (compat_timespec_compare(&rts, &ts) >= 0) |
1838 | rts = ts; | 1838 | rts = ts; |
1839 | copy_to_user(tsp, &rts, sizeof(rts)); | 1839 | copy_to_user(tsp, &rts, sizeof(rts)); |
1840 | } | 1840 | } |
@@ -1934,7 +1934,7 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, | |||
1934 | rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) * | 1934 | rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) * |
1935 | 1000; | 1935 | 1000; |
1936 | rts.tv_sec = timeout; | 1936 | rts.tv_sec = timeout; |
1937 | if (compat_timespec_compare(&rts, &ts) < 0) | 1937 | if (compat_timespec_compare(&rts, &ts) >= 0) |
1938 | rts = ts; | 1938 | rts = ts; |
1939 | if (copy_to_user(tsp, &rts, sizeof(rts))) { | 1939 | if (copy_to_user(tsp, &rts, sizeof(rts))) { |
1940 | sticky: | 1940 | sticky: |
diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c index a2ca3107d475..86ae8e93adb9 100644 --- a/fs/ext2/xattr.c +++ b/fs/ext2/xattr.c | |||
@@ -792,18 +792,20 @@ ext2_xattr_delete_inode(struct inode *inode) | |||
792 | ext2_free_blocks(inode, EXT2_I(inode)->i_file_acl, 1); | 792 | ext2_free_blocks(inode, EXT2_I(inode)->i_file_acl, 1); |
793 | get_bh(bh); | 793 | get_bh(bh); |
794 | bforget(bh); | 794 | bforget(bh); |
795 | unlock_buffer(bh); | ||
795 | } else { | 796 | } else { |
796 | HDR(bh)->h_refcount = cpu_to_le32( | 797 | HDR(bh)->h_refcount = cpu_to_le32( |
797 | le32_to_cpu(HDR(bh)->h_refcount) - 1); | 798 | le32_to_cpu(HDR(bh)->h_refcount) - 1); |
798 | if (ce) | 799 | if (ce) |
799 | mb_cache_entry_release(ce); | 800 | mb_cache_entry_release(ce); |
801 | ea_bdebug(bh, "refcount now=%d", | ||
802 | le32_to_cpu(HDR(bh)->h_refcount)); | ||
803 | unlock_buffer(bh); | ||
800 | mark_buffer_dirty(bh); | 804 | mark_buffer_dirty(bh); |
801 | if (IS_SYNC(inode)) | 805 | if (IS_SYNC(inode)) |
802 | sync_dirty_buffer(bh); | 806 | sync_dirty_buffer(bh); |
803 | DQUOT_FREE_BLOCK(inode, 1); | 807 | DQUOT_FREE_BLOCK(inode, 1); |
804 | } | 808 | } |
805 | ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1); | ||
806 | unlock_buffer(bh); | ||
807 | EXT2_I(inode)->i_file_acl = 0; | 809 | EXT2_I(inode)->i_file_acl = 0; |
808 | 810 | ||
809 | cleanup: | 811 | cleanup: |
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index f556a0d5c0d3..0c9a2ee54c91 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c | |||
@@ -66,6 +66,12 @@ static void restore_sigs(sigset_t *oldset) | |||
66 | sigprocmask(SIG_SETMASK, oldset, NULL); | 66 | sigprocmask(SIG_SETMASK, oldset, NULL); |
67 | } | 67 | } |
68 | 68 | ||
69 | /* | ||
70 | * Reset request, so that it can be reused | ||
71 | * | ||
72 | * The caller must be _very_ careful to make sure, that it is holding | ||
73 | * the only reference to req | ||
74 | */ | ||
69 | void fuse_reset_request(struct fuse_req *req) | 75 | void fuse_reset_request(struct fuse_req *req) |
70 | { | 76 | { |
71 | int preallocated = req->preallocated; | 77 | int preallocated = req->preallocated; |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 296351615b00..6f05379b0a0d 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -116,9 +116,14 @@ int fuse_open_common(struct inode *inode, struct file *file, int isdir) | |||
116 | /* Special case for failed iget in CREATE */ | 116 | /* Special case for failed iget in CREATE */ |
117 | static void fuse_release_end(struct fuse_conn *fc, struct fuse_req *req) | 117 | static void fuse_release_end(struct fuse_conn *fc, struct fuse_req *req) |
118 | { | 118 | { |
119 | u64 nodeid = req->in.h.nodeid; | 119 | /* If called from end_io_requests(), req has more than one |
120 | fuse_reset_request(req); | 120 | reference and fuse_reset_request() cannot work */ |
121 | fuse_send_forget(fc, req, nodeid, 1); | 121 | if (fc->connected) { |
122 | u64 nodeid = req->in.h.nodeid; | ||
123 | fuse_reset_request(req); | ||
124 | fuse_send_forget(fc, req, nodeid, 1); | ||
125 | } else | ||
126 | fuse_put_request(fc, req); | ||
122 | } | 127 | } |
123 | 128 | ||
124 | void fuse_send_release(struct fuse_conn *fc, struct fuse_file *ff, | 129 | void fuse_send_release(struct fuse_conn *fc, struct fuse_file *ff, |
diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h index 42eb53b5293b..23ceaa7127b4 100644 --- a/fs/ocfs2/dlm/dlmcommon.h +++ b/fs/ocfs2/dlm/dlmcommon.h | |||
@@ -208,6 +208,9 @@ static inline void __dlm_set_joining_node(struct dlm_ctxt *dlm, | |||
208 | #define DLM_LOCK_RES_IN_PROGRESS 0x00000010 | 208 | #define DLM_LOCK_RES_IN_PROGRESS 0x00000010 |
209 | #define DLM_LOCK_RES_MIGRATING 0x00000020 | 209 | #define DLM_LOCK_RES_MIGRATING 0x00000020 |
210 | 210 | ||
211 | /* max milliseconds to wait to sync up a network failure with a node death */ | ||
212 | #define DLM_NODE_DEATH_WAIT_MAX (5 * 1000) | ||
213 | |||
211 | #define DLM_PURGE_INTERVAL_MS (8 * 1000) | 214 | #define DLM_PURGE_INTERVAL_MS (8 * 1000) |
212 | 215 | ||
213 | struct dlm_lock_resource | 216 | struct dlm_lock_resource |
@@ -658,6 +661,7 @@ int dlm_launch_recovery_thread(struct dlm_ctxt *dlm); | |||
658 | void dlm_complete_recovery_thread(struct dlm_ctxt *dlm); | 661 | void dlm_complete_recovery_thread(struct dlm_ctxt *dlm); |
659 | void dlm_wait_for_recovery(struct dlm_ctxt *dlm); | 662 | void dlm_wait_for_recovery(struct dlm_ctxt *dlm); |
660 | int dlm_is_node_dead(struct dlm_ctxt *dlm, u8 node); | 663 | int dlm_is_node_dead(struct dlm_ctxt *dlm, u8 node); |
664 | int dlm_wait_for_node_death(struct dlm_ctxt *dlm, u8 node, int timeout); | ||
661 | 665 | ||
662 | void dlm_put(struct dlm_ctxt *dlm); | 666 | void dlm_put(struct dlm_ctxt *dlm); |
663 | struct dlm_ctxt *dlm_grab(struct dlm_ctxt *dlm); | 667 | struct dlm_ctxt *dlm_grab(struct dlm_ctxt *dlm); |
diff --git a/fs/ocfs2/dlm/dlmconvert.c b/fs/ocfs2/dlm/dlmconvert.c index 6001b22a997d..f66e2d818ccd 100644 --- a/fs/ocfs2/dlm/dlmconvert.c +++ b/fs/ocfs2/dlm/dlmconvert.c | |||
@@ -392,6 +392,11 @@ static enum dlm_status dlm_send_remote_convert_request(struct dlm_ctxt *dlm, | |||
392 | } else { | 392 | } else { |
393 | mlog_errno(tmpret); | 393 | mlog_errno(tmpret); |
394 | if (dlm_is_host_down(tmpret)) { | 394 | if (dlm_is_host_down(tmpret)) { |
395 | /* instead of logging the same network error over | ||
396 | * and over, sleep here and wait for the heartbeat | ||
397 | * to notice the node is dead. times out after 5s. */ | ||
398 | dlm_wait_for_node_death(dlm, res->owner, | ||
399 | DLM_NODE_DEATH_WAIT_MAX); | ||
395 | ret = DLM_RECOVERING; | 400 | ret = DLM_RECOVERING; |
396 | mlog(0, "node %u died so returning DLM_RECOVERING " | 401 | mlog(0, "node %u died so returning DLM_RECOVERING " |
397 | "from convert message!\n", res->owner); | 402 | "from convert message!\n", res->owner); |
@@ -421,7 +426,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data) | |||
421 | struct dlm_lockstatus *lksb; | 426 | struct dlm_lockstatus *lksb; |
422 | enum dlm_status status = DLM_NORMAL; | 427 | enum dlm_status status = DLM_NORMAL; |
423 | u32 flags; | 428 | u32 flags; |
424 | int call_ast = 0, kick_thread = 0; | 429 | int call_ast = 0, kick_thread = 0, ast_reserved = 0; |
425 | 430 | ||
426 | if (!dlm_grab(dlm)) { | 431 | if (!dlm_grab(dlm)) { |
427 | dlm_error(DLM_REJECTED); | 432 | dlm_error(DLM_REJECTED); |
@@ -490,6 +495,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data) | |||
490 | status = __dlm_lockres_state_to_status(res); | 495 | status = __dlm_lockres_state_to_status(res); |
491 | if (status == DLM_NORMAL) { | 496 | if (status == DLM_NORMAL) { |
492 | __dlm_lockres_reserve_ast(res); | 497 | __dlm_lockres_reserve_ast(res); |
498 | ast_reserved = 1; | ||
493 | res->state |= DLM_LOCK_RES_IN_PROGRESS; | 499 | res->state |= DLM_LOCK_RES_IN_PROGRESS; |
494 | status = __dlmconvert_master(dlm, res, lock, flags, | 500 | status = __dlmconvert_master(dlm, res, lock, flags, |
495 | cnv->requested_type, | 501 | cnv->requested_type, |
@@ -512,10 +518,10 @@ leave: | |||
512 | else | 518 | else |
513 | dlm_lock_put(lock); | 519 | dlm_lock_put(lock); |
514 | 520 | ||
515 | /* either queue the ast or release it */ | 521 | /* either queue the ast or release it, if reserved */ |
516 | if (call_ast) | 522 | if (call_ast) |
517 | dlm_queue_ast(dlm, lock); | 523 | dlm_queue_ast(dlm, lock); |
518 | else | 524 | else if (ast_reserved) |
519 | dlm_lockres_release_ast(dlm, res); | 525 | dlm_lockres_release_ast(dlm, res); |
520 | 526 | ||
521 | if (kick_thread) | 527 | if (kick_thread) |
diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c index d1a0038557a3..671d4ff222cc 100644 --- a/fs/ocfs2/dlm/dlmlock.c +++ b/fs/ocfs2/dlm/dlmlock.c | |||
@@ -220,6 +220,17 @@ static enum dlm_status dlmlock_remote(struct dlm_ctxt *dlm, | |||
220 | dlm_error(status); | 220 | dlm_error(status); |
221 | dlm_revert_pending_lock(res, lock); | 221 | dlm_revert_pending_lock(res, lock); |
222 | dlm_lock_put(lock); | 222 | dlm_lock_put(lock); |
223 | } else if (dlm_is_recovery_lock(res->lockname.name, | ||
224 | res->lockname.len)) { | ||
225 | /* special case for the $RECOVERY lock. | ||
226 | * there will never be an AST delivered to put | ||
227 | * this lock on the proper secondary queue | ||
228 | * (granted), so do it manually. */ | ||
229 | mlog(0, "%s: $RECOVERY lock for this node (%u) is " | ||
230 | "mastered by %u; got lock, manually granting (no ast)\n", | ||
231 | dlm->name, dlm->node_num, res->owner); | ||
232 | list_del_init(&lock->list); | ||
233 | list_add_tail(&lock->list, &res->granted); | ||
223 | } | 234 | } |
224 | spin_unlock(&res->spinlock); | 235 | spin_unlock(&res->spinlock); |
225 | 236 | ||
@@ -646,7 +657,19 @@ retry_lock: | |||
646 | mlog(0, "retrying lock with migration/" | 657 | mlog(0, "retrying lock with migration/" |
647 | "recovery/in progress\n"); | 658 | "recovery/in progress\n"); |
648 | msleep(100); | 659 | msleep(100); |
649 | dlm_wait_for_recovery(dlm); | 660 | /* no waiting for dlm_reco_thread */ |
661 | if (recovery) { | ||
662 | if (status == DLM_RECOVERING) { | ||
663 | mlog(0, "%s: got RECOVERING " | ||
664 | "for $REOCVERY lock, master " | ||
665 | "was %u\n", dlm->name, | ||
666 | res->owner); | ||
667 | dlm_wait_for_node_death(dlm, res->owner, | ||
668 | DLM_NODE_DEATH_WAIT_MAX); | ||
669 | } | ||
670 | } else { | ||
671 | dlm_wait_for_recovery(dlm); | ||
672 | } | ||
650 | goto retry_lock; | 673 | goto retry_lock; |
651 | } | 674 | } |
652 | 675 | ||
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index a3194fe173d9..2e2e95e69499 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c | |||
@@ -2482,7 +2482,9 @@ top: | |||
2482 | atomic_set(&mle->woken, 1); | 2482 | atomic_set(&mle->woken, 1); |
2483 | spin_unlock(&mle->spinlock); | 2483 | spin_unlock(&mle->spinlock); |
2484 | wake_up(&mle->wq); | 2484 | wake_up(&mle->wq); |
2485 | /* final put will take care of list removal */ | 2485 | /* do not need events any longer, so detach |
2486 | * from heartbeat */ | ||
2487 | __dlm_mle_detach_hb_events(dlm, mle); | ||
2486 | __dlm_put_mle(mle); | 2488 | __dlm_put_mle(mle); |
2487 | } | 2489 | } |
2488 | continue; | 2490 | continue; |
@@ -2537,6 +2539,9 @@ top: | |||
2537 | spin_unlock(&res->spinlock); | 2539 | spin_unlock(&res->spinlock); |
2538 | dlm_lockres_put(res); | 2540 | dlm_lockres_put(res); |
2539 | 2541 | ||
2542 | /* about to get rid of mle, detach from heartbeat */ | ||
2543 | __dlm_mle_detach_hb_events(dlm, mle); | ||
2544 | |||
2540 | /* dump the mle */ | 2545 | /* dump the mle */ |
2541 | spin_lock(&dlm->master_lock); | 2546 | spin_lock(&dlm->master_lock); |
2542 | __dlm_put_mle(mle); | 2547 | __dlm_put_mle(mle); |
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index 186e9a76aa58..ed76bda1a534 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c | |||
@@ -278,6 +278,24 @@ int dlm_is_node_dead(struct dlm_ctxt *dlm, u8 node) | |||
278 | return dead; | 278 | return dead; |
279 | } | 279 | } |
280 | 280 | ||
281 | int dlm_wait_for_node_death(struct dlm_ctxt *dlm, u8 node, int timeout) | ||
282 | { | ||
283 | if (timeout) { | ||
284 | mlog(ML_NOTICE, "%s: waiting %dms for notification of " | ||
285 | "death of node %u\n", dlm->name, timeout, node); | ||
286 | wait_event_timeout(dlm->dlm_reco_thread_wq, | ||
287 | dlm_is_node_dead(dlm, node), | ||
288 | msecs_to_jiffies(timeout)); | ||
289 | } else { | ||
290 | mlog(ML_NOTICE, "%s: waiting indefinitely for notification " | ||
291 | "of death of node %u\n", dlm->name, node); | ||
292 | wait_event(dlm->dlm_reco_thread_wq, | ||
293 | dlm_is_node_dead(dlm, node)); | ||
294 | } | ||
295 | /* for now, return 0 */ | ||
296 | return 0; | ||
297 | } | ||
298 | |||
281 | /* callers of the top-level api calls (dlmlock/dlmunlock) should | 299 | /* callers of the top-level api calls (dlmlock/dlmunlock) should |
282 | * block on the dlm->reco.event when recovery is in progress. | 300 | * block on the dlm->reco.event when recovery is in progress. |
283 | * the dlm recovery thread will set this state when it begins | 301 | * the dlm recovery thread will set this state when it begins |
@@ -2032,6 +2050,30 @@ again: | |||
2032 | dlm->reco.new_master); | 2050 | dlm->reco.new_master); |
2033 | status = -EEXIST; | 2051 | status = -EEXIST; |
2034 | } else { | 2052 | } else { |
2053 | status = 0; | ||
2054 | |||
2055 | /* see if recovery was already finished elsewhere */ | ||
2056 | spin_lock(&dlm->spinlock); | ||
2057 | if (dlm->reco.dead_node == O2NM_INVALID_NODE_NUM) { | ||
2058 | status = -EINVAL; | ||
2059 | mlog(0, "%s: got reco EX lock, but " | ||
2060 | "node got recovered already\n", dlm->name); | ||
2061 | if (dlm->reco.new_master != O2NM_INVALID_NODE_NUM) { | ||
2062 | mlog(ML_ERROR, "%s: new master is %u " | ||
2063 | "but no dead node!\n", | ||
2064 | dlm->name, dlm->reco.new_master); | ||
2065 | BUG(); | ||
2066 | } | ||
2067 | } | ||
2068 | spin_unlock(&dlm->spinlock); | ||
2069 | } | ||
2070 | |||
2071 | /* if this node has actually become the recovery master, | ||
2072 | * set the master and send the messages to begin recovery */ | ||
2073 | if (!status) { | ||
2074 | mlog(0, "%s: dead=%u, this=%u, sending " | ||
2075 | "begin_reco now\n", dlm->name, | ||
2076 | dlm->reco.dead_node, dlm->node_num); | ||
2035 | status = dlm_send_begin_reco_message(dlm, | 2077 | status = dlm_send_begin_reco_message(dlm, |
2036 | dlm->reco.dead_node); | 2078 | dlm->reco.dead_node); |
2037 | /* this always succeeds */ | 2079 | /* this always succeeds */ |
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c index fa0bcac5ceae..d329c9df90ae 100644 --- a/fs/ocfs2/journal.c +++ b/fs/ocfs2/journal.c | |||
@@ -1584,10 +1584,9 @@ static int ocfs2_commit_thread(void *arg) | |||
1584 | while (!(kthread_should_stop() && | 1584 | while (!(kthread_should_stop() && |
1585 | atomic_read(&journal->j_num_trans) == 0)) { | 1585 | atomic_read(&journal->j_num_trans) == 0)) { |
1586 | 1586 | ||
1587 | wait_event_interruptible_timeout(osb->checkpoint_event, | 1587 | wait_event_interruptible(osb->checkpoint_event, |
1588 | atomic_read(&journal->j_num_trans) | 1588 | atomic_read(&journal->j_num_trans) |
1589 | || kthread_should_stop(), | 1589 | || kthread_should_stop()); |
1590 | OCFS2_CHECKPOINT_INTERVAL); | ||
1591 | 1590 | ||
1592 | status = ocfs2_commit_cache(osb); | 1591 | status = ocfs2_commit_cache(osb); |
1593 | if (status < 0) | 1592 | if (status < 0) |
diff --git a/fs/ocfs2/journal.h b/fs/ocfs2/journal.h index 7d0a816184fa..2f3a6acdac45 100644 --- a/fs/ocfs2/journal.h +++ b/fs/ocfs2/journal.h | |||
@@ -29,8 +29,6 @@ | |||
29 | #include <linux/fs.h> | 29 | #include <linux/fs.h> |
30 | #include <linux/jbd.h> | 30 | #include <linux/jbd.h> |
31 | 31 | ||
32 | #define OCFS2_CHECKPOINT_INTERVAL (8 * HZ) | ||
33 | |||
34 | enum ocfs2_journal_state { | 32 | enum ocfs2_journal_state { |
35 | OCFS2_JOURNAL_FREE = 0, | 33 | OCFS2_JOURNAL_FREE = 0, |
36 | OCFS2_JOURNAL_LOADED, | 34 | OCFS2_JOURNAL_LOADED, |
diff --git a/fs/select.c b/fs/select.c index 6ce68a9c8976..1815a57d2255 100644 --- a/fs/select.c +++ b/fs/select.c | |||
@@ -404,7 +404,7 @@ asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp, | |||
404 | goto sticky; | 404 | goto sticky; |
405 | rtv.tv_usec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)); | 405 | rtv.tv_usec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)); |
406 | rtv.tv_sec = timeout; | 406 | rtv.tv_sec = timeout; |
407 | if (timeval_compare(&rtv, &tv) < 0) | 407 | if (timeval_compare(&rtv, &tv) >= 0) |
408 | rtv = tv; | 408 | rtv = tv; |
409 | if (copy_to_user(tvp, &rtv, sizeof(rtv))) { | 409 | if (copy_to_user(tvp, &rtv, sizeof(rtv))) { |
410 | sticky: | 410 | sticky: |
@@ -471,7 +471,7 @@ asmlinkage long sys_pselect7(int n, fd_set __user *inp, fd_set __user *outp, | |||
471 | rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) * | 471 | rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) * |
472 | 1000; | 472 | 1000; |
473 | rts.tv_sec = timeout; | 473 | rts.tv_sec = timeout; |
474 | if (timespec_compare(&rts, &ts) < 0) | 474 | if (timespec_compare(&rts, &ts) >= 0) |
475 | rts = ts; | 475 | rts = ts; |
476 | if (copy_to_user(tsp, &rts, sizeof(rts))) { | 476 | if (copy_to_user(tsp, &rts, sizeof(rts))) { |
477 | sticky: | 477 | sticky: |
@@ -775,7 +775,7 @@ asmlinkage long sys_ppoll(struct pollfd __user *ufds, unsigned int nfds, | |||
775 | rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) * | 775 | rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) * |
776 | 1000; | 776 | 1000; |
777 | rts.tv_sec = timeout; | 777 | rts.tv_sec = timeout; |
778 | if (timespec_compare(&rts, &ts) < 0) | 778 | if (timespec_compare(&rts, &ts) >= 0) |
779 | rts = ts; | 779 | rts = ts; |
780 | if (copy_to_user(tsp, &rts, sizeof(rts))) { | 780 | if (copy_to_user(tsp, &rts, sizeof(rts))) { |
781 | sticky: | 781 | sticky: |