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: |
