diff options
Diffstat (limited to 'fs/ocfs2')
-rw-r--r-- | fs/ocfs2/acl.c | 14 | ||||
-rw-r--r-- | fs/ocfs2/alloc.c | 18 | ||||
-rw-r--r-- | fs/ocfs2/cluster/tcp.c | 3 | ||||
-rw-r--r-- | fs/ocfs2/cluster/tcp_internal.h | 12 | ||||
-rw-r--r-- | fs/ocfs2/dir.c | 10 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmast.c | 6 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmdebug.c | 4 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmdomain.c | 14 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmdomain.h | 1 | ||||
-rw-r--r-- | fs/ocfs2/dlm/dlmrecovery.c | 7 | ||||
-rw-r--r-- | fs/ocfs2/dlmglue.c | 3 | ||||
-rw-r--r-- | fs/ocfs2/file.c | 2 | ||||
-rw-r--r-- | fs/ocfs2/journal.c | 1 | ||||
-rw-r--r-- | fs/ocfs2/mmap.c | 1 | ||||
-rw-r--r-- | fs/ocfs2/ocfs2.h | 2 | ||||
-rw-r--r-- | fs/ocfs2/quota.h | 1 | ||||
-rw-r--r-- | fs/ocfs2/quota_local.c | 20 | ||||
-rw-r--r-- | fs/ocfs2/refcounttree.c | 2 | ||||
-rw-r--r-- | fs/ocfs2/reservations.c | 2 | ||||
-rw-r--r-- | fs/ocfs2/super.c | 49 | ||||
-rw-r--r-- | fs/ocfs2/xattr.c | 10 |
21 files changed, 73 insertions, 109 deletions
diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c index 7e8282dcea2a..c58a1bcfda0f 100644 --- a/fs/ocfs2/acl.c +++ b/fs/ocfs2/acl.c | |||
@@ -245,16 +245,14 @@ int ocfs2_set_acl(handle_t *handle, | |||
245 | ret = posix_acl_equiv_mode(acl, &mode); | 245 | ret = posix_acl_equiv_mode(acl, &mode); |
246 | if (ret < 0) | 246 | if (ret < 0) |
247 | return ret; | 247 | return ret; |
248 | else { | ||
249 | if (ret == 0) | ||
250 | acl = NULL; | ||
251 | 248 | ||
252 | ret = ocfs2_acl_set_mode(inode, di_bh, | 249 | if (ret == 0) |
253 | handle, mode); | 250 | acl = NULL; |
254 | if (ret) | ||
255 | return ret; | ||
256 | 251 | ||
257 | } | 252 | ret = ocfs2_acl_set_mode(inode, di_bh, |
253 | handle, mode); | ||
254 | if (ret) | ||
255 | return ret; | ||
258 | } | 256 | } |
259 | break; | 257 | break; |
260 | case ACL_TYPE_DEFAULT: | 258 | case ACL_TYPE_DEFAULT: |
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index fcae9ef1a328..044158bd22be 100644 --- a/fs/ocfs2/alloc.c +++ b/fs/ocfs2/alloc.c | |||
@@ -6873,7 +6873,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | |||
6873 | if (IS_ERR(handle)) { | 6873 | if (IS_ERR(handle)) { |
6874 | ret = PTR_ERR(handle); | 6874 | ret = PTR_ERR(handle); |
6875 | mlog_errno(ret); | 6875 | mlog_errno(ret); |
6876 | goto out_unlock; | 6876 | goto out; |
6877 | } | 6877 | } |
6878 | 6878 | ||
6879 | ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, | 6879 | ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, |
@@ -6931,7 +6931,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | |||
6931 | if (ret) { | 6931 | if (ret) { |
6932 | mlog_errno(ret); | 6932 | mlog_errno(ret); |
6933 | need_free = 1; | 6933 | need_free = 1; |
6934 | goto out_commit; | 6934 | goto out_unlock; |
6935 | } | 6935 | } |
6936 | 6936 | ||
6937 | page_end = PAGE_CACHE_SIZE; | 6937 | page_end = PAGE_CACHE_SIZE; |
@@ -6964,12 +6964,16 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode, | |||
6964 | if (ret) { | 6964 | if (ret) { |
6965 | mlog_errno(ret); | 6965 | mlog_errno(ret); |
6966 | need_free = 1; | 6966 | need_free = 1; |
6967 | goto out_commit; | 6967 | goto out_unlock; |
6968 | } | 6968 | } |
6969 | 6969 | ||
6970 | inode->i_blocks = ocfs2_inode_sector_count(inode); | 6970 | inode->i_blocks = ocfs2_inode_sector_count(inode); |
6971 | } | 6971 | } |
6972 | 6972 | ||
6973 | out_unlock: | ||
6974 | if (pages) | ||
6975 | ocfs2_unlock_and_free_pages(pages, num_pages); | ||
6976 | |||
6973 | out_commit: | 6977 | out_commit: |
6974 | if (ret < 0 && did_quota) | 6978 | if (ret < 0 && did_quota) |
6975 | dquot_free_space_nodirty(inode, | 6979 | dquot_free_space_nodirty(inode, |
@@ -6989,15 +6993,11 @@ out_commit: | |||
6989 | 6993 | ||
6990 | ocfs2_commit_trans(osb, handle); | 6994 | ocfs2_commit_trans(osb, handle); |
6991 | 6995 | ||
6992 | out_unlock: | 6996 | out: |
6993 | if (data_ac) | 6997 | if (data_ac) |
6994 | ocfs2_free_alloc_context(data_ac); | 6998 | ocfs2_free_alloc_context(data_ac); |
6995 | 6999 | if (pages) | |
6996 | out: | ||
6997 | if (pages) { | ||
6998 | ocfs2_unlock_and_free_pages(pages, num_pages); | ||
6999 | kfree(pages); | 7000 | kfree(pages); |
7000 | } | ||
7001 | 7001 | ||
7002 | return ret; | 7002 | return ret; |
7003 | } | 7003 | } |
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index 2e355e0f8335..56c403a563bc 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c | |||
@@ -1016,7 +1016,8 @@ void o2net_fill_node_map(unsigned long *map, unsigned bytes) | |||
1016 | 1016 | ||
1017 | memset(map, 0, bytes); | 1017 | memset(map, 0, bytes); |
1018 | for (node = 0; node < O2NM_MAX_NODES; ++node) { | 1018 | for (node = 0; node < O2NM_MAX_NODES; ++node) { |
1019 | o2net_tx_can_proceed(o2net_nn_from_num(node), &sc, &ret); | 1019 | if (!o2net_tx_can_proceed(o2net_nn_from_num(node), &sc, &ret)) |
1020 | continue; | ||
1020 | if (!ret) { | 1021 | if (!ret) { |
1021 | set_bit(node, map); | 1022 | set_bit(node, map); |
1022 | sc_put(sc); | 1023 | sc_put(sc); |
diff --git a/fs/ocfs2/cluster/tcp_internal.h b/fs/ocfs2/cluster/tcp_internal.h index dc024367110a..b95e7df5b76a 100644 --- a/fs/ocfs2/cluster/tcp_internal.h +++ b/fs/ocfs2/cluster/tcp_internal.h | |||
@@ -107,12 +107,12 @@ struct o2net_node { | |||
107 | struct list_head nn_status_list; | 107 | struct list_head nn_status_list; |
108 | 108 | ||
109 | /* connects are attempted from when heartbeat comes up until either hb | 109 | /* connects are attempted from when heartbeat comes up until either hb |
110 | * goes down, the node is unconfigured, no connect attempts succeed | 110 | * goes down, the node is unconfigured, or a connect succeeds. |
111 | * before O2NET_CONN_IDLE_DELAY, or a connect succeeds. connect_work | 111 | * connect_work is queued from set_nn_state both from hb up and from |
112 | * is queued from set_nn_state both from hb up and from itself if a | 112 | * itself if a connect attempt fails and so can be self-arming. |
113 | * connect attempt fails and so can be self-arming. shutdown is | 113 | * shutdown is careful to first mark the nn such that no connects will |
114 | * careful to first mark the nn such that no connects will be attempted | 114 | * be attempted before canceling delayed connect work and flushing the |
115 | * before canceling delayed connect work and flushing the queue. */ | 115 | * queue. */ |
116 | struct delayed_work nn_connect_work; | 116 | struct delayed_work nn_connect_work; |
117 | unsigned long nn_last_connect_attempt; | 117 | unsigned long nn_last_connect_attempt; |
118 | 118 | ||
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c index 319e786175af..b08050bd3f2e 100644 --- a/fs/ocfs2/dir.c +++ b/fs/ocfs2/dir.c | |||
@@ -3456,10 +3456,8 @@ static int ocfs2_find_dir_space_el(struct inode *dir, const char *name, | |||
3456 | int blocksize = dir->i_sb->s_blocksize; | 3456 | int blocksize = dir->i_sb->s_blocksize; |
3457 | 3457 | ||
3458 | status = ocfs2_read_dir_block(dir, 0, &bh, 0); | 3458 | status = ocfs2_read_dir_block(dir, 0, &bh, 0); |
3459 | if (status) { | 3459 | if (status) |
3460 | mlog_errno(status); | ||
3461 | goto bail; | 3460 | goto bail; |
3462 | } | ||
3463 | 3461 | ||
3464 | rec_len = OCFS2_DIR_REC_LEN(namelen); | 3462 | rec_len = OCFS2_DIR_REC_LEN(namelen); |
3465 | offset = 0; | 3463 | offset = 0; |
@@ -3480,10 +3478,9 @@ static int ocfs2_find_dir_space_el(struct inode *dir, const char *name, | |||
3480 | status = ocfs2_read_dir_block(dir, | 3478 | status = ocfs2_read_dir_block(dir, |
3481 | offset >> sb->s_blocksize_bits, | 3479 | offset >> sb->s_blocksize_bits, |
3482 | &bh, 0); | 3480 | &bh, 0); |
3483 | if (status) { | 3481 | if (status) |
3484 | mlog_errno(status); | ||
3485 | goto bail; | 3482 | goto bail; |
3486 | } | 3483 | |
3487 | /* move to next block */ | 3484 | /* move to next block */ |
3488 | de = (struct ocfs2_dir_entry *) bh->b_data; | 3485 | de = (struct ocfs2_dir_entry *) bh->b_data; |
3489 | } | 3486 | } |
@@ -3513,7 +3510,6 @@ next: | |||
3513 | de = (struct ocfs2_dir_entry *)((char *) de + le16_to_cpu(de->rec_len)); | 3510 | de = (struct ocfs2_dir_entry *)((char *) de + le16_to_cpu(de->rec_len)); |
3514 | } | 3511 | } |
3515 | 3512 | ||
3516 | status = 0; | ||
3517 | bail: | 3513 | bail: |
3518 | brelse(bh); | 3514 | brelse(bh); |
3519 | if (status) | 3515 | if (status) |
diff --git a/fs/ocfs2/dlm/dlmast.c b/fs/ocfs2/dlm/dlmast.c index b46278f9ae44..fd6bbbbd7d78 100644 --- a/fs/ocfs2/dlm/dlmast.c +++ b/fs/ocfs2/dlm/dlmast.c | |||
@@ -385,8 +385,12 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
385 | head = &res->granted; | 385 | head = &res->granted; |
386 | 386 | ||
387 | list_for_each_entry(lock, head, list) { | 387 | list_for_each_entry(lock, head, list) { |
388 | if (lock->ml.cookie == cookie) | 388 | /* if lock is found but unlock is pending ignore the bast */ |
389 | if (lock->ml.cookie == cookie) { | ||
390 | if (lock->unlock_pending) | ||
391 | break; | ||
389 | goto do_ast; | 392 | goto do_ast; |
393 | } | ||
390 | } | 394 | } |
391 | 395 | ||
392 | mlog(0, "Got %sast for unknown lock! cookie=%u:%llu, name=%.*s, " | 396 | mlog(0, "Got %sast for unknown lock! cookie=%u:%llu, name=%.*s, " |
diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c index 149eb556b8c6..825136070d2c 100644 --- a/fs/ocfs2/dlm/dlmdebug.c +++ b/fs/ocfs2/dlm/dlmdebug.c | |||
@@ -406,7 +406,7 @@ static int debug_purgelist_print(struct dlm_ctxt *dlm, char *buf, int len) | |||
406 | } | 406 | } |
407 | spin_unlock(&dlm->spinlock); | 407 | spin_unlock(&dlm->spinlock); |
408 | 408 | ||
409 | out += snprintf(buf + out, len - out, "Total on list: %ld\n", total); | 409 | out += snprintf(buf + out, len - out, "Total on list: %lu\n", total); |
410 | 410 | ||
411 | return out; | 411 | return out; |
412 | } | 412 | } |
@@ -464,7 +464,7 @@ static int debug_mle_print(struct dlm_ctxt *dlm, char *buf, int len) | |||
464 | spin_unlock(&dlm->master_lock); | 464 | spin_unlock(&dlm->master_lock); |
465 | 465 | ||
466 | out += snprintf(buf + out, len - out, | 466 | out += snprintf(buf + out, len - out, |
467 | "Total: %ld, Longest: %ld\n", total, longest); | 467 | "Total: %lu, Longest: %lu\n", total, longest); |
468 | return out; | 468 | return out; |
469 | } | 469 | } |
470 | 470 | ||
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c index 50a59d2337b2..7df88a6dd626 100644 --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c | |||
@@ -674,20 +674,6 @@ static void dlm_leave_domain(struct dlm_ctxt *dlm) | |||
674 | spin_unlock(&dlm->spinlock); | 674 | spin_unlock(&dlm->spinlock); |
675 | } | 675 | } |
676 | 676 | ||
677 | int dlm_joined(struct dlm_ctxt *dlm) | ||
678 | { | ||
679 | int ret = 0; | ||
680 | |||
681 | spin_lock(&dlm_domain_lock); | ||
682 | |||
683 | if (dlm->dlm_state == DLM_CTXT_JOINED) | ||
684 | ret = 1; | ||
685 | |||
686 | spin_unlock(&dlm_domain_lock); | ||
687 | |||
688 | return ret; | ||
689 | } | ||
690 | |||
691 | int dlm_shutting_down(struct dlm_ctxt *dlm) | 677 | int dlm_shutting_down(struct dlm_ctxt *dlm) |
692 | { | 678 | { |
693 | int ret = 0; | 679 | int ret = 0; |
diff --git a/fs/ocfs2/dlm/dlmdomain.h b/fs/ocfs2/dlm/dlmdomain.h index 2f7f60bfeb3b..fd6122a38dbd 100644 --- a/fs/ocfs2/dlm/dlmdomain.h +++ b/fs/ocfs2/dlm/dlmdomain.h | |||
@@ -28,7 +28,6 @@ | |||
28 | extern spinlock_t dlm_domain_lock; | 28 | extern spinlock_t dlm_domain_lock; |
29 | extern struct list_head dlm_domains; | 29 | extern struct list_head dlm_domains; |
30 | 30 | ||
31 | int dlm_joined(struct dlm_ctxt *dlm); | ||
32 | int dlm_shutting_down(struct dlm_ctxt *dlm); | 31 | int dlm_shutting_down(struct dlm_ctxt *dlm); |
33 | void dlm_fire_domain_eviction_callbacks(struct dlm_ctxt *dlm, | 32 | void dlm_fire_domain_eviction_callbacks(struct dlm_ctxt *dlm, |
34 | int node_num); | 33 | int node_num); |
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index cecd875653e4..ce12e0b1a31f 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c | |||
@@ -1070,6 +1070,9 @@ static void dlm_move_reco_locks_to_list(struct dlm_ctxt *dlm, | |||
1070 | dead_node, dlm->name); | 1070 | dead_node, dlm->name); |
1071 | list_del_init(&lock->list); | 1071 | list_del_init(&lock->list); |
1072 | dlm_lock_put(lock); | 1072 | dlm_lock_put(lock); |
1073 | /* Can't schedule DLM_UNLOCK_FREE_LOCK | ||
1074 | * - do manually */ | ||
1075 | dlm_lock_put(lock); | ||
1073 | break; | 1076 | break; |
1074 | } | 1077 | } |
1075 | } | 1078 | } |
@@ -2346,6 +2349,10 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node) | |||
2346 | dead_node, dlm->name); | 2349 | dead_node, dlm->name); |
2347 | list_del_init(&lock->list); | 2350 | list_del_init(&lock->list); |
2348 | dlm_lock_put(lock); | 2351 | dlm_lock_put(lock); |
2352 | /* Can't schedule | ||
2353 | * DLM_UNLOCK_FREE_LOCK | ||
2354 | * - do manually */ | ||
2355 | dlm_lock_put(lock); | ||
2349 | break; | 2356 | break; |
2350 | } | 2357 | } |
2351 | } | 2358 | } |
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index 1c423af04c69..11849a44dc5a 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c | |||
@@ -3750,6 +3750,9 @@ static int ocfs2_dentry_convert_worker(struct ocfs2_lock_res *lockres, | |||
3750 | break; | 3750 | break; |
3751 | spin_unlock(&dentry_attach_lock); | 3751 | spin_unlock(&dentry_attach_lock); |
3752 | 3752 | ||
3753 | if (S_ISDIR(dl->dl_inode->i_mode)) | ||
3754 | shrink_dcache_parent(dentry); | ||
3755 | |||
3753 | mlog(0, "d_delete(%pd);\n", dentry); | 3756 | mlog(0, "d_delete(%pd);\n", dentry); |
3754 | 3757 | ||
3755 | /* | 3758 | /* |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index abe7d98d6178..e0f04d55fd05 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -569,7 +569,7 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, | |||
569 | handle_t *handle = NULL; | 569 | handle_t *handle = NULL; |
570 | struct ocfs2_alloc_context *data_ac = NULL; | 570 | struct ocfs2_alloc_context *data_ac = NULL; |
571 | struct ocfs2_alloc_context *meta_ac = NULL; | 571 | struct ocfs2_alloc_context *meta_ac = NULL; |
572 | enum ocfs2_alloc_restarted why; | 572 | enum ocfs2_alloc_restarted why = RESTART_NONE; |
573 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); | 573 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); |
574 | struct ocfs2_extent_tree et; | 574 | struct ocfs2_extent_tree et; |
575 | int did_quota = 0; | 575 | int did_quota = 0; |
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c index 4f502382180f..d10860fde165 100644 --- a/fs/ocfs2/journal.c +++ b/fs/ocfs2/journal.c | |||
@@ -1447,7 +1447,6 @@ bail: | |||
1447 | * requires that we call do_exit(). And it isn't exported, but | 1447 | * requires that we call do_exit(). And it isn't exported, but |
1448 | * complete_and_exit() seems to be a minimal wrapper around it. */ | 1448 | * complete_and_exit() seems to be a minimal wrapper around it. */ |
1449 | complete_and_exit(NULL, status); | 1449 | complete_and_exit(NULL, status); |
1450 | return status; | ||
1451 | } | 1450 | } |
1452 | 1451 | ||
1453 | void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num) | 1452 | void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num) |
diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c index 10d66c75cecb..9581d190f6e1 100644 --- a/fs/ocfs2/mmap.c +++ b/fs/ocfs2/mmap.c | |||
@@ -173,7 +173,6 @@ out: | |||
173 | static const struct vm_operations_struct ocfs2_file_vm_ops = { | 173 | static const struct vm_operations_struct ocfs2_file_vm_ops = { |
174 | .fault = ocfs2_fault, | 174 | .fault = ocfs2_fault, |
175 | .page_mkwrite = ocfs2_page_mkwrite, | 175 | .page_mkwrite = ocfs2_page_mkwrite, |
176 | .remap_pages = generic_file_remap_pages, | ||
177 | }; | 176 | }; |
178 | 177 | ||
179 | int ocfs2_mmap(struct file *file, struct vm_area_struct *vma) | 178 | int ocfs2_mmap(struct file *file, struct vm_area_struct *vma) |
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 7d6b7d090452..fdbcbfed529e 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
@@ -279,6 +279,8 @@ enum ocfs2_mount_options | |||
279 | writes */ | 279 | writes */ |
280 | OCFS2_MOUNT_HB_NONE = 1 << 13, /* No heartbeat */ | 280 | OCFS2_MOUNT_HB_NONE = 1 << 13, /* No heartbeat */ |
281 | OCFS2_MOUNT_HB_GLOBAL = 1 << 14, /* Global heartbeat */ | 281 | OCFS2_MOUNT_HB_GLOBAL = 1 << 14, /* Global heartbeat */ |
282 | |||
283 | OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT = 1 << 15, /* Journal Async Commit */ | ||
282 | }; | 284 | }; |
283 | 285 | ||
284 | #define OCFS2_OSB_SOFT_RO 0x0001 | 286 | #define OCFS2_OSB_SOFT_RO 0x0001 |
diff --git a/fs/ocfs2/quota.h b/fs/ocfs2/quota.h index 1eae330193a6..b6d51333ad02 100644 --- a/fs/ocfs2/quota.h +++ b/fs/ocfs2/quota.h | |||
@@ -48,6 +48,7 @@ struct ocfs2_quota_recovery { | |||
48 | /* In-memory structure with quota header information */ | 48 | /* In-memory structure with quota header information */ |
49 | struct ocfs2_mem_dqinfo { | 49 | struct ocfs2_mem_dqinfo { |
50 | unsigned int dqi_type; /* Quota type this structure describes */ | 50 | unsigned int dqi_type; /* Quota type this structure describes */ |
51 | unsigned int dqi_flags; /* Flags OLQF_* */ | ||
51 | unsigned int dqi_chunks; /* Number of chunks in local quota file */ | 52 | unsigned int dqi_chunks; /* Number of chunks in local quota file */ |
52 | unsigned int dqi_blocks; /* Number of blocks allocated for local quota file */ | 53 | unsigned int dqi_blocks; /* Number of blocks allocated for local quota file */ |
53 | unsigned int dqi_syncms; /* How often should we sync with other nodes */ | 54 | unsigned int dqi_syncms; /* How often should we sync with other nodes */ |
diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c index 10b653930ee2..3d0b63d34225 100644 --- a/fs/ocfs2/quota_local.c +++ b/fs/ocfs2/quota_local.c | |||
@@ -73,12 +73,6 @@ static loff_t ol_dqblk_off(struct super_block *sb, int c, int off) | |||
73 | ol_dqblk_block_off(sb, c, off); | 73 | ol_dqblk_block_off(sb, c, off); |
74 | } | 74 | } |
75 | 75 | ||
76 | /* Compute block number from given offset */ | ||
77 | static inline unsigned int ol_dqblk_file_block(struct super_block *sb, loff_t off) | ||
78 | { | ||
79 | return off >> sb->s_blocksize_bits; | ||
80 | } | ||
81 | |||
82 | static inline unsigned int ol_dqblk_block_offset(struct super_block *sb, loff_t off) | 76 | static inline unsigned int ol_dqblk_block_offset(struct super_block *sb, loff_t off) |
83 | { | 77 | { |
84 | return off & ((1 << sb->s_blocksize_bits) - 1); | 78 | return off & ((1 << sb->s_blocksize_bits) - 1); |
@@ -292,7 +286,7 @@ static void olq_update_info(struct buffer_head *bh, void *private) | |||
292 | ldinfo = (struct ocfs2_local_disk_dqinfo *)(bh->b_data + | 286 | ldinfo = (struct ocfs2_local_disk_dqinfo *)(bh->b_data + |
293 | OCFS2_LOCAL_INFO_OFF); | 287 | OCFS2_LOCAL_INFO_OFF); |
294 | spin_lock(&dq_data_lock); | 288 | spin_lock(&dq_data_lock); |
295 | ldinfo->dqi_flags = cpu_to_le32(info->dqi_flags & DQF_MASK); | 289 | ldinfo->dqi_flags = cpu_to_le32(oinfo->dqi_flags); |
296 | ldinfo->dqi_chunks = cpu_to_le32(oinfo->dqi_chunks); | 290 | ldinfo->dqi_chunks = cpu_to_le32(oinfo->dqi_chunks); |
297 | ldinfo->dqi_blocks = cpu_to_le32(oinfo->dqi_blocks); | 291 | ldinfo->dqi_blocks = cpu_to_le32(oinfo->dqi_blocks); |
298 | spin_unlock(&dq_data_lock); | 292 | spin_unlock(&dq_data_lock); |
@@ -701,8 +695,8 @@ static int ocfs2_local_read_info(struct super_block *sb, int type) | |||
701 | /* We don't need the lock and we have to acquire quota file locks | 695 | /* We don't need the lock and we have to acquire quota file locks |
702 | * which will later depend on this lock */ | 696 | * which will later depend on this lock */ |
703 | mutex_unlock(&sb_dqopt(sb)->dqio_mutex); | 697 | mutex_unlock(&sb_dqopt(sb)->dqio_mutex); |
704 | info->dqi_maxblimit = 0x7fffffffffffffffLL; | 698 | info->dqi_max_spc_limit = 0x7fffffffffffffffLL; |
705 | info->dqi_maxilimit = 0x7fffffffffffffffLL; | 699 | info->dqi_max_ino_limit = 0x7fffffffffffffffLL; |
706 | oinfo = kmalloc(sizeof(struct ocfs2_mem_dqinfo), GFP_NOFS); | 700 | oinfo = kmalloc(sizeof(struct ocfs2_mem_dqinfo), GFP_NOFS); |
707 | if (!oinfo) { | 701 | if (!oinfo) { |
708 | mlog(ML_ERROR, "failed to allocate memory for ocfs2 quota" | 702 | mlog(ML_ERROR, "failed to allocate memory for ocfs2 quota" |
@@ -737,13 +731,13 @@ static int ocfs2_local_read_info(struct super_block *sb, int type) | |||
737 | } | 731 | } |
738 | ldinfo = (struct ocfs2_local_disk_dqinfo *)(bh->b_data + | 732 | ldinfo = (struct ocfs2_local_disk_dqinfo *)(bh->b_data + |
739 | OCFS2_LOCAL_INFO_OFF); | 733 | OCFS2_LOCAL_INFO_OFF); |
740 | info->dqi_flags = le32_to_cpu(ldinfo->dqi_flags); | 734 | oinfo->dqi_flags = le32_to_cpu(ldinfo->dqi_flags); |
741 | oinfo->dqi_chunks = le32_to_cpu(ldinfo->dqi_chunks); | 735 | oinfo->dqi_chunks = le32_to_cpu(ldinfo->dqi_chunks); |
742 | oinfo->dqi_blocks = le32_to_cpu(ldinfo->dqi_blocks); | 736 | oinfo->dqi_blocks = le32_to_cpu(ldinfo->dqi_blocks); |
743 | oinfo->dqi_libh = bh; | 737 | oinfo->dqi_libh = bh; |
744 | 738 | ||
745 | /* We crashed when using local quota file? */ | 739 | /* We crashed when using local quota file? */ |
746 | if (!(info->dqi_flags & OLQF_CLEAN)) { | 740 | if (!(oinfo->dqi_flags & OLQF_CLEAN)) { |
747 | rec = OCFS2_SB(sb)->quota_rec; | 741 | rec = OCFS2_SB(sb)->quota_rec; |
748 | if (!rec) { | 742 | if (!rec) { |
749 | rec = ocfs2_alloc_quota_recovery(); | 743 | rec = ocfs2_alloc_quota_recovery(); |
@@ -772,7 +766,7 @@ static int ocfs2_local_read_info(struct super_block *sb, int type) | |||
772 | } | 766 | } |
773 | 767 | ||
774 | /* Now mark quota file as used */ | 768 | /* Now mark quota file as used */ |
775 | info->dqi_flags &= ~OLQF_CLEAN; | 769 | oinfo->dqi_flags &= ~OLQF_CLEAN; |
776 | status = ocfs2_modify_bh(lqinode, bh, olq_update_info, info); | 770 | status = ocfs2_modify_bh(lqinode, bh, olq_update_info, info); |
777 | if (status < 0) { | 771 | if (status < 0) { |
778 | mlog_errno(status); | 772 | mlog_errno(status); |
@@ -857,7 +851,7 @@ static int ocfs2_local_free_info(struct super_block *sb, int type) | |||
857 | goto out; | 851 | goto out; |
858 | 852 | ||
859 | /* Mark local file as clean */ | 853 | /* Mark local file as clean */ |
860 | info->dqi_flags |= OLQF_CLEAN; | 854 | oinfo->dqi_flags |= OLQF_CLEAN; |
861 | status = ocfs2_modify_bh(sb_dqopt(sb)->files[type], | 855 | status = ocfs2_modify_bh(sb_dqopt(sb)->files[type], |
862 | oinfo->dqi_libh, | 856 | oinfo->dqi_libh, |
863 | olq_update_info, | 857 | olq_update_info, |
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index d81f6e2a97f5..ee541f92dab4 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c | |||
@@ -2428,8 +2428,6 @@ static int ocfs2_calc_refcount_meta_credits(struct super_block *sb, | |||
2428 | get_bh(prev_bh); | 2428 | get_bh(prev_bh); |
2429 | } | 2429 | } |
2430 | 2430 | ||
2431 | rb = (struct ocfs2_refcount_block *)ref_leaf_bh->b_data; | ||
2432 | |||
2433 | trace_ocfs2_calc_refcount_meta_credits_iterate( | 2431 | trace_ocfs2_calc_refcount_meta_credits_iterate( |
2434 | recs_add, (unsigned long long)cpos, clusters, | 2432 | recs_add, (unsigned long long)cpos, clusters, |
2435 | (unsigned long long)le64_to_cpu(rec.r_cpos), | 2433 | (unsigned long long)le64_to_cpu(rec.r_cpos), |
diff --git a/fs/ocfs2/reservations.c b/fs/ocfs2/reservations.c index 41ffd36c689c..6a348b0294ab 100644 --- a/fs/ocfs2/reservations.c +++ b/fs/ocfs2/reservations.c | |||
@@ -39,7 +39,7 @@ | |||
39 | #define OCFS2_CHECK_RESERVATIONS | 39 | #define OCFS2_CHECK_RESERVATIONS |
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | DEFINE_SPINLOCK(resv_lock); | 42 | static DEFINE_SPINLOCK(resv_lock); |
43 | 43 | ||
44 | #define OCFS2_MIN_RESV_WINDOW_BITS 8 | 44 | #define OCFS2_MIN_RESV_WINDOW_BITS 8 |
45 | #define OCFS2_MAX_RESV_WINDOW_BITS 1024 | 45 | #define OCFS2_MAX_RESV_WINDOW_BITS 1024 |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 83723179e1ec..87a1f7679d9b 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
@@ -191,6 +191,7 @@ enum { | |||
191 | Opt_coherency_full, | 191 | Opt_coherency_full, |
192 | Opt_resv_level, | 192 | Opt_resv_level, |
193 | Opt_dir_resv_level, | 193 | Opt_dir_resv_level, |
194 | Opt_journal_async_commit, | ||
194 | Opt_err, | 195 | Opt_err, |
195 | }; | 196 | }; |
196 | 197 | ||
@@ -222,6 +223,7 @@ static const match_table_t tokens = { | |||
222 | {Opt_coherency_full, "coherency=full"}, | 223 | {Opt_coherency_full, "coherency=full"}, |
223 | {Opt_resv_level, "resv_level=%u"}, | 224 | {Opt_resv_level, "resv_level=%u"}, |
224 | {Opt_dir_resv_level, "dir_resv_level=%u"}, | 225 | {Opt_dir_resv_level, "dir_resv_level=%u"}, |
226 | {Opt_journal_async_commit, "journal_async_commit"}, | ||
225 | {Opt_err, NULL} | 227 | {Opt_err, NULL} |
226 | }; | 228 | }; |
227 | 229 | ||
@@ -1000,36 +1002,6 @@ static void ocfs2_disable_quotas(struct ocfs2_super *osb) | |||
1000 | } | 1002 | } |
1001 | } | 1003 | } |
1002 | 1004 | ||
1003 | /* Handle quota on quotactl */ | ||
1004 | static int ocfs2_quota_on(struct super_block *sb, int type, int format_id) | ||
1005 | { | ||
1006 | unsigned int feature[OCFS2_MAXQUOTAS] = { | ||
1007 | OCFS2_FEATURE_RO_COMPAT_USRQUOTA, | ||
1008 | OCFS2_FEATURE_RO_COMPAT_GRPQUOTA}; | ||
1009 | |||
1010 | if (!OCFS2_HAS_RO_COMPAT_FEATURE(sb, feature[type])) | ||
1011 | return -EINVAL; | ||
1012 | |||
1013 | return dquot_enable(sb_dqopt(sb)->files[type], type, | ||
1014 | format_id, DQUOT_LIMITS_ENABLED); | ||
1015 | } | ||
1016 | |||
1017 | /* Handle quota off quotactl */ | ||
1018 | static int ocfs2_quota_off(struct super_block *sb, int type) | ||
1019 | { | ||
1020 | return dquot_disable(sb, type, DQUOT_LIMITS_ENABLED); | ||
1021 | } | ||
1022 | |||
1023 | static const struct quotactl_ops ocfs2_quotactl_ops = { | ||
1024 | .quota_on_meta = ocfs2_quota_on, | ||
1025 | .quota_off = ocfs2_quota_off, | ||
1026 | .quota_sync = dquot_quota_sync, | ||
1027 | .get_info = dquot_get_dqinfo, | ||
1028 | .set_info = dquot_set_dqinfo, | ||
1029 | .get_dqblk = dquot_get_dqblk, | ||
1030 | .set_dqblk = dquot_set_dqblk, | ||
1031 | }; | ||
1032 | |||
1033 | static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) | 1005 | static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) |
1034 | { | 1006 | { |
1035 | struct dentry *root; | 1007 | struct dentry *root; |
@@ -1500,6 +1472,9 @@ static int ocfs2_parse_options(struct super_block *sb, | |||
1500 | option < OCFS2_MAX_RESV_LEVEL) | 1472 | option < OCFS2_MAX_RESV_LEVEL) |
1501 | mopt->dir_resv_level = option; | 1473 | mopt->dir_resv_level = option; |
1502 | break; | 1474 | break; |
1475 | case Opt_journal_async_commit: | ||
1476 | mopt->mount_opt |= OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT; | ||
1477 | break; | ||
1503 | default: | 1478 | default: |
1504 | mlog(ML_ERROR, | 1479 | mlog(ML_ERROR, |
1505 | "Unrecognized mount option \"%s\" " | 1480 | "Unrecognized mount option \"%s\" " |
@@ -1606,6 +1581,9 @@ static int ocfs2_show_options(struct seq_file *s, struct dentry *root) | |||
1606 | if (osb->osb_dir_resv_level != osb->osb_resv_level) | 1581 | if (osb->osb_dir_resv_level != osb->osb_resv_level) |
1607 | seq_printf(s, ",dir_resv_level=%d", osb->osb_resv_level); | 1582 | seq_printf(s, ",dir_resv_level=%d", osb->osb_resv_level); |
1608 | 1583 | ||
1584 | if (opts & OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT) | ||
1585 | seq_printf(s, ",journal_async_commit"); | ||
1586 | |||
1609 | return 0; | 1587 | return 0; |
1610 | } | 1588 | } |
1611 | 1589 | ||
@@ -2079,7 +2057,7 @@ static int ocfs2_initialize_super(struct super_block *sb, | |||
2079 | sb->s_op = &ocfs2_sops; | 2057 | sb->s_op = &ocfs2_sops; |
2080 | sb->s_d_op = &ocfs2_dentry_ops; | 2058 | sb->s_d_op = &ocfs2_dentry_ops; |
2081 | sb->s_export_op = &ocfs2_export_ops; | 2059 | sb->s_export_op = &ocfs2_export_ops; |
2082 | sb->s_qcop = &ocfs2_quotactl_ops; | 2060 | sb->s_qcop = &dquot_quotactl_sysfile_ops; |
2083 | sb->dq_op = &ocfs2_quota_operations; | 2061 | sb->dq_op = &ocfs2_quota_operations; |
2084 | sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP; | 2062 | sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP; |
2085 | sb->s_xattr = ocfs2_xattr_handlers; | 2063 | sb->s_xattr = ocfs2_xattr_handlers; |
@@ -2475,6 +2453,15 @@ static int ocfs2_check_volume(struct ocfs2_super *osb) | |||
2475 | goto finally; | 2453 | goto finally; |
2476 | } | 2454 | } |
2477 | 2455 | ||
2456 | if (osb->s_mount_opt & OCFS2_MOUNT_JOURNAL_ASYNC_COMMIT) | ||
2457 | jbd2_journal_set_features(osb->journal->j_journal, | ||
2458 | JBD2_FEATURE_COMPAT_CHECKSUM, 0, | ||
2459 | JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT); | ||
2460 | else | ||
2461 | jbd2_journal_clear_features(osb->journal->j_journal, | ||
2462 | JBD2_FEATURE_COMPAT_CHECKSUM, 0, | ||
2463 | JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT); | ||
2464 | |||
2478 | if (dirty) { | 2465 | if (dirty) { |
2479 | /* recover my local alloc if we didn't unmount cleanly. */ | 2466 | /* recover my local alloc if we didn't unmount cleanly. */ |
2480 | status = ocfs2_begin_local_alloc_recovery(osb, | 2467 | status = ocfs2_begin_local_alloc_recovery(osb, |
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 662f8dee149f..85b190dc132f 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c | |||
@@ -5334,16 +5334,6 @@ out: | |||
5334 | return ret; | 5334 | return ret; |
5335 | } | 5335 | } |
5336 | 5336 | ||
5337 | static inline char *ocfs2_xattr_bucket_get_val(struct inode *inode, | ||
5338 | struct ocfs2_xattr_bucket *bucket, | ||
5339 | int offs) | ||
5340 | { | ||
5341 | int block_off = offs >> inode->i_sb->s_blocksize_bits; | ||
5342 | |||
5343 | offs = offs % inode->i_sb->s_blocksize; | ||
5344 | return bucket_block(bucket, block_off) + offs; | ||
5345 | } | ||
5346 | |||
5347 | /* | 5337 | /* |
5348 | * Truncate the specified xe_off entry in xattr bucket. | 5338 | * Truncate the specified xe_off entry in xattr bucket. |
5349 | * bucket is indicated by header_bh and len is the new length. | 5339 | * bucket is indicated by header_bh and len is the new length. |