Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2

* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2:
ocfs2: Fix NULL pointer dereferences in o2net
ocfs2/dlm: dlm_thread should not sleep while holding the dlm_spinlock
ocfs2/dlm: Print message showing the recovery master
ocfs2/dlm: Add missing dlm_lockres_put()s
ocfs2/dlm: Add missing dlm_lockres_put()s in migration path
ocfs2/dlm: Add missing dlm_lock_put()s
ocfs2: Fix an endian bug in online resize.
[PATCH] [OCFS2]: constify function pointer tables
ocfs2: Fix endian bug in o2dlm protocol negotiation.
ocfs2: Use dlm_print_one_lock_resource for lock resource print
[PATCH] fs/ocfs2/dlm/dlmdomain.c: fix printk warning

+151 -69
+4 -5
fs/ocfs2/cluster/tcp.c
··· 451 451 /* delay if we're withing a RECONNECT_DELAY of the 452 452 * last attempt */ 453 453 delay = (nn->nn_last_connect_attempt + 454 - msecs_to_jiffies(o2net_reconnect_delay(sc->sc_node))) 454 + msecs_to_jiffies(o2net_reconnect_delay(NULL))) 455 455 - jiffies; 456 - if (delay > msecs_to_jiffies(o2net_reconnect_delay(sc->sc_node))) 456 + if (delay > msecs_to_jiffies(o2net_reconnect_delay(NULL))) 457 457 delay = 0; 458 458 mlog(ML_CONN, "queueing conn attempt in %lu jiffies\n", delay); 459 459 queue_delayed_work(o2net_wq, &nn->nn_connect_work, delay); ··· 1552 1552 1553 1553 spin_lock(&nn->nn_lock); 1554 1554 if (!nn->nn_sc_valid) { 1555 - struct o2nm_node *node = nn->nn_sc->sc_node; 1556 1555 mlog(ML_ERROR, "no connection established with node %u after " 1557 1556 "%u.%u seconds, giving up and returning errors.\n", 1558 1557 o2net_num_from_nn(nn), 1559 - o2net_idle_timeout(node) / 1000, 1560 - o2net_idle_timeout(node) % 1000); 1558 + o2net_idle_timeout(NULL) / 1000, 1559 + o2net_idle_timeout(NULL) % 1000); 1561 1560 1562 1561 o2net_set_nn_state(nn, NULL, 0, -ENOTCONN); 1563 1562 }
+12 -9
fs/ocfs2/dlm/dlmcommon.h
··· 176 176 { 177 177 struct dlm_lock_resource *lockres; 178 178 u8 real_master; 179 + u8 extra_ref; 179 180 }; 180 181 181 182 struct dlm_assert_master_priv ··· 603 602 JOIN_PROTOCOL_MISMATCH, 604 603 }; 605 604 605 + struct dlm_query_join_packet { 606 + u8 code; /* Response code. dlm_minor and fs_minor 607 + are only valid if this is JOIN_OK */ 608 + u8 dlm_minor; /* The minor version of the protocol the 609 + dlm is speaking. */ 610 + u8 fs_minor; /* The minor version of the protocol the 611 + filesystem is speaking. */ 612 + u8 reserved; 613 + }; 614 + 606 615 union dlm_query_join_response { 607 616 u32 intval; 608 - struct { 609 - u8 code; /* Response code. dlm_minor and fs_minor 610 - are only valid if this is JOIN_OK */ 611 - u8 dlm_minor; /* The minor version of the protocol the 612 - dlm is speaking. */ 613 - u8 fs_minor; /* The minor version of the protocol the 614 - filesystem is speaking. */ 615 - u8 reserved; 616 - } packet; 617 + struct dlm_query_join_packet packet; 617 618 }; 618 619 619 620 struct dlm_lock_request
+1 -1
fs/ocfs2/dlm/dlmconvert.c
··· 487 487 "cookie=%u:%llu\n", 488 488 dlm_get_lock_cookie_node(be64_to_cpu(cnv->cookie)), 489 489 dlm_get_lock_cookie_seq(be64_to_cpu(cnv->cookie))); 490 - __dlm_print_one_lock_resource(res); 490 + dlm_print_one_lock_resource(res); 491 491 goto leave; 492 492 } 493 493
+66 -37
fs/ocfs2/dlm/dlmdomain.c
··· 713 713 return rc; 714 714 } 715 715 716 + /* 717 + * struct dlm_query_join_packet is made up of four one-byte fields. They 718 + * are effectively in big-endian order already. However, little-endian 719 + * machines swap them before putting the packet on the wire (because 720 + * query_join's response is a status, and that status is treated as a u32 721 + * on the wire). Thus, a big-endian and little-endian machines will treat 722 + * this structure differently. 723 + * 724 + * The solution is to have little-endian machines swap the structure when 725 + * converting from the structure to the u32 representation. This will 726 + * result in the structure having the correct format on the wire no matter 727 + * the host endian format. 728 + */ 729 + static void dlm_query_join_packet_to_wire(struct dlm_query_join_packet *packet, 730 + u32 *wire) 731 + { 732 + union dlm_query_join_response response; 733 + 734 + response.packet = *packet; 735 + *wire = cpu_to_be32(response.intval); 736 + } 737 + 738 + static void dlm_query_join_wire_to_packet(u32 wire, 739 + struct dlm_query_join_packet *packet) 740 + { 741 + union dlm_query_join_response response; 742 + 743 + response.intval = cpu_to_be32(wire); 744 + *packet = response.packet; 745 + } 746 + 716 747 static int dlm_query_join_handler(struct o2net_msg *msg, u32 len, void *data, 717 748 void **ret_data) 718 749 { 719 750 struct dlm_query_join_request *query; 720 - union dlm_query_join_response response = { 721 - .packet.code = JOIN_DISALLOW, 751 + struct dlm_query_join_packet packet = { 752 + .code = JOIN_DISALLOW, 722 753 }; 723 754 struct dlm_ctxt *dlm = NULL; 755 + u32 response; 724 756 u8 nodenum; 725 757 726 758 query = (struct dlm_query_join_request *) msg->buf; ··· 769 737 mlog(0, "node %u is not in our live map yet\n", 770 738 query->node_idx); 771 739 772 - response.packet.code = JOIN_DISALLOW; 740 + packet.code = JOIN_DISALLOW; 773 741 goto respond; 774 742 } 775 743 776 - response.packet.code = JOIN_OK_NO_MAP; 744 + packet.code = JOIN_OK_NO_MAP; 777 745 778 746 spin_lock(&dlm_domain_lock); 779 747 dlm = __dlm_lookup_domain_full(query->domain, query->name_len); ··· 792 760 mlog(0, "disallow join as node %u does not " 793 761 "have node %u in its nodemap\n", 794 762 query->node_idx, nodenum); 795 - response.packet.code = JOIN_DISALLOW; 763 + packet.code = JOIN_DISALLOW; 796 764 goto unlock_respond; 797 765 } 798 766 } ··· 812 780 /*If this is a brand new context and we 813 781 * haven't started our join process yet, then 814 782 * the other node won the race. */ 815 - response.packet.code = JOIN_OK_NO_MAP; 783 + packet.code = JOIN_OK_NO_MAP; 816 784 } else if (dlm->joining_node != DLM_LOCK_RES_OWNER_UNKNOWN) { 817 785 /* Disallow parallel joins. */ 818 - response.packet.code = JOIN_DISALLOW; 786 + packet.code = JOIN_DISALLOW; 819 787 } else if (dlm->reco.state & DLM_RECO_STATE_ACTIVE) { 820 788 mlog(0, "node %u trying to join, but recovery " 821 789 "is ongoing.\n", bit); 822 - response.packet.code = JOIN_DISALLOW; 790 + packet.code = JOIN_DISALLOW; 823 791 } else if (test_bit(bit, dlm->recovery_map)) { 824 792 mlog(0, "node %u trying to join, but it " 825 793 "still needs recovery.\n", bit); 826 - response.packet.code = JOIN_DISALLOW; 794 + packet.code = JOIN_DISALLOW; 827 795 } else if (test_bit(bit, dlm->domain_map)) { 828 796 mlog(0, "node %u trying to join, but it " 829 797 "is still in the domain! needs recovery?\n", 830 798 bit); 831 - response.packet.code = JOIN_DISALLOW; 799 + packet.code = JOIN_DISALLOW; 832 800 } else { 833 801 /* Alright we're fully a part of this domain 834 802 * so we keep some state as to who's joining ··· 839 807 if (dlm_query_join_proto_check("DLM", bit, 840 808 &dlm->dlm_locking_proto, 841 809 &query->dlm_proto)) { 842 - response.packet.code = 843 - JOIN_PROTOCOL_MISMATCH; 810 + packet.code = JOIN_PROTOCOL_MISMATCH; 844 811 } else if (dlm_query_join_proto_check("fs", bit, 845 812 &dlm->fs_locking_proto, 846 813 &query->fs_proto)) { 847 - response.packet.code = 848 - JOIN_PROTOCOL_MISMATCH; 814 + packet.code = JOIN_PROTOCOL_MISMATCH; 849 815 } else { 850 - response.packet.dlm_minor = 851 - query->dlm_proto.pv_minor; 852 - response.packet.fs_minor = 853 - query->fs_proto.pv_minor; 854 - response.packet.code = JOIN_OK; 816 + packet.dlm_minor = query->dlm_proto.pv_minor; 817 + packet.fs_minor = query->fs_proto.pv_minor; 818 + packet.code = JOIN_OK; 855 819 __dlm_set_joining_node(dlm, query->node_idx); 856 820 } 857 821 } ··· 858 830 spin_unlock(&dlm_domain_lock); 859 831 860 832 respond: 861 - mlog(0, "We respond with %u\n", response.packet.code); 833 + mlog(0, "We respond with %u\n", packet.code); 862 834 863 - return response.intval; 835 + dlm_query_join_packet_to_wire(&packet, &response); 836 + return response; 864 837 } 865 838 866 839 static int dlm_assert_joined_handler(struct o2net_msg *msg, u32 len, void *data, ··· 966 937 sizeof(unsigned long))) { 967 938 mlog(ML_ERROR, 968 939 "map_size %u != BITS_TO_LONGS(O2NM_MAX_NODES) %u\n", 969 - map_size, BITS_TO_LONGS(O2NM_MAX_NODES)); 940 + map_size, (unsigned)BITS_TO_LONGS(O2NM_MAX_NODES)); 970 941 return -EINVAL; 971 942 } 972 943 ··· 997 968 { 998 969 int status; 999 970 struct dlm_query_join_request join_msg; 1000 - union dlm_query_join_response join_resp; 971 + struct dlm_query_join_packet packet; 972 + u32 join_resp; 1001 973 1002 974 mlog(0, "querying node %d\n", node); 1003 975 ··· 1014 984 1015 985 status = o2net_send_message(DLM_QUERY_JOIN_MSG, DLM_MOD_KEY, &join_msg, 1016 986 sizeof(join_msg), node, 1017 - &join_resp.intval); 987 + &join_resp); 1018 988 if (status < 0 && status != -ENOPROTOOPT) { 1019 989 mlog_errno(status); 1020 990 goto bail; 1021 991 } 992 + dlm_query_join_wire_to_packet(join_resp, &packet); 1022 993 1023 994 /* -ENOPROTOOPT from the net code means the other side isn't 1024 995 listening for our message type -- that's fine, it means ··· 1028 997 if (status == -ENOPROTOOPT) { 1029 998 status = 0; 1030 999 *response = JOIN_OK_NO_MAP; 1031 - } else if (join_resp.packet.code == JOIN_DISALLOW || 1032 - join_resp.packet.code == JOIN_OK_NO_MAP) { 1033 - *response = join_resp.packet.code; 1034 - } else if (join_resp.packet.code == JOIN_PROTOCOL_MISMATCH) { 1000 + } else if (packet.code == JOIN_DISALLOW || 1001 + packet.code == JOIN_OK_NO_MAP) { 1002 + *response = packet.code; 1003 + } else if (packet.code == JOIN_PROTOCOL_MISMATCH) { 1035 1004 mlog(ML_NOTICE, 1036 1005 "This node requested DLM locking protocol %u.%u and " 1037 1006 "filesystem locking protocol %u.%u. At least one of " ··· 1043 1012 dlm->fs_locking_proto.pv_minor, 1044 1013 node); 1045 1014 status = -EPROTO; 1046 - *response = join_resp.packet.code; 1047 - } else if (join_resp.packet.code == JOIN_OK) { 1048 - *response = join_resp.packet.code; 1015 + *response = packet.code; 1016 + } else if (packet.code == JOIN_OK) { 1017 + *response = packet.code; 1049 1018 /* Use the same locking protocol as the remote node */ 1050 - dlm->dlm_locking_proto.pv_minor = 1051 - join_resp.packet.dlm_minor; 1052 - dlm->fs_locking_proto.pv_minor = 1053 - join_resp.packet.fs_minor; 1019 + dlm->dlm_locking_proto.pv_minor = packet.dlm_minor; 1020 + dlm->fs_locking_proto.pv_minor = packet.fs_minor; 1054 1021 mlog(0, 1055 1022 "Node %d responds JOIN_OK with DLM locking protocol " 1056 1023 "%u.%u and fs locking protocol %u.%u\n", ··· 1060 1031 } else { 1061 1032 status = -EINVAL; 1062 1033 mlog(ML_ERROR, "invalid response %d from node %u\n", 1063 - join_resp.packet.code, node); 1034 + packet.code, node); 1064 1035 } 1065 1036 1066 1037 mlog(0, "status %d, node %d response is %d\n", status, node, 1067 - *response); 1038 + *response); 1068 1039 1069 1040 bail: 1070 1041 return status;
+15 -3
fs/ocfs2/dlm/dlmmaster.c
··· 1663 1663 dlm_put_mle(tmpmle); 1664 1664 } 1665 1665 send_response: 1666 - 1666 + /* 1667 + * __dlm_lookup_lockres() grabbed a reference to this lockres. 1668 + * The reference is released by dlm_assert_master_worker() under 1669 + * the call to dlm_dispatch_assert_master(). If 1670 + * dlm_assert_master_worker() isn't called, we drop it here. 1671 + */ 1667 1672 if (dispatch_assert) { 1668 1673 if (response != DLM_MASTER_RESP_YES) 1669 1674 mlog(ML_ERROR, "invalid response %d\n", response); ··· 1683 1678 if (ret < 0) { 1684 1679 mlog(ML_ERROR, "failed to dispatch assert master work\n"); 1685 1680 response = DLM_MASTER_RESP_ERROR; 1681 + dlm_lockres_put(res); 1686 1682 } 1683 + } else { 1684 + if (res) 1685 + dlm_lockres_put(res); 1687 1686 } 1688 1687 1689 1688 dlm_put(dlm); ··· 2357 2348 mlog(ML_ERROR, "%s:%.*s: node %u trying to drop ref " 2358 2349 "but it is already dropped!\n", dlm->name, 2359 2350 res->lockname.len, res->lockname.name, node); 2360 - __dlm_print_one_lock_resource(res); 2351 + dlm_print_one_lock_resource(res); 2361 2352 } 2362 2353 ret = 0; 2363 2354 goto done; ··· 2417 2408 mlog(ML_ERROR, "%s:%.*s: node %u trying to drop ref " 2418 2409 "but it is already dropped!\n", dlm->name, 2419 2410 res->lockname.len, res->lockname.name, node); 2420 - __dlm_print_one_lock_resource(res); 2411 + dlm_print_one_lock_resource(res); 2421 2412 } 2422 2413 2423 2414 dlm_lockres_put(res); ··· 2941 2932 BUG_ON(lock->bast_pending); 2942 2933 dlm_lockres_clear_refmap_bit(lock->ml.node, res); 2943 2934 list_del_init(&lock->list); 2935 + dlm_lock_put(lock); 2936 + /* In a normal unlock, we would have added a 2937 + * DLM_UNLOCK_FREE_LOCK action. Force it. */ 2944 2938 dlm_lock_put(lock); 2945 2939 } 2946 2940 }
+47 -10
fs/ocfs2/dlm/dlmrecovery.c
··· 519 519 return 0; 520 520 521 521 master_here: 522 - mlog(0, "(%d) mastering recovery of %s:%u here(this=%u)!\n", 523 - task_pid_nr(dlm->dlm_reco_thread_task), 524 - dlm->name, dlm->reco.dead_node, dlm->node_num); 522 + mlog(ML_NOTICE, "(%d) Node %u is the Recovery Master for the Dead Node " 523 + "%u for Domain %s\n", task_pid_nr(dlm->dlm_reco_thread_task), 524 + dlm->node_num, dlm->reco.dead_node, dlm->name); 525 525 526 526 status = dlm_remaster_locks(dlm, dlm->reco.dead_node); 527 527 if (status < 0) { ··· 1191 1191 (ml->type == LKM_EXMODE || 1192 1192 memcmp(mres->lvb, lock->lksb->lvb, DLM_LVB_LEN))) { 1193 1193 mlog(ML_ERROR, "mismatched lvbs!\n"); 1194 - __dlm_print_one_lock_resource(lock->lockres); 1194 + dlm_print_one_lock_resource(lock->lockres); 1195 1195 BUG(); 1196 1196 } 1197 1197 memcpy(mres->lvb, lock->lksb->lvb, DLM_LVB_LEN); ··· 1327 1327 (struct dlm_migratable_lockres *)msg->buf; 1328 1328 int ret = 0; 1329 1329 u8 real_master; 1330 + u8 extra_refs = 0; 1330 1331 char *buf = NULL; 1331 1332 struct dlm_work_item *item = NULL; 1332 1333 struct dlm_lock_resource *res = NULL; ··· 1405 1404 __dlm_insert_lockres(dlm, res); 1406 1405 spin_unlock(&dlm->spinlock); 1407 1406 1407 + /* Add an extra ref for this lock-less lockres lest the 1408 + * dlm_thread purges it before we get the chance to add 1409 + * locks to it */ 1410 + dlm_lockres_get(res); 1411 + 1412 + /* There are three refs that need to be put. 1413 + * 1. Taken above. 1414 + * 2. kref_init in dlm_new_lockres()->dlm_init_lockres(). 1415 + * 3. dlm_lookup_lockres() 1416 + * The first one is handled at the end of this function. The 1417 + * other two are handled in the worker thread after locks have 1418 + * been attached. Yes, we don't wait for purge time to match 1419 + * kref_init. The lockres will still have atleast one ref 1420 + * added because it is in the hash __dlm_insert_lockres() */ 1421 + extra_refs++; 1422 + 1408 1423 /* now that the new lockres is inserted, 1409 1424 * make it usable by other processes */ 1410 1425 spin_lock(&res->spinlock); 1411 1426 res->state &= ~DLM_LOCK_RES_IN_PROGRESS; 1412 1427 spin_unlock(&res->spinlock); 1413 1428 wake_up(&res->wq); 1414 - 1415 - /* add an extra ref for just-allocated lockres 1416 - * otherwise the lockres will be purged immediately */ 1417 - dlm_lockres_get(res); 1418 1429 } 1419 1430 1420 1431 /* at this point we have allocated everything we need, ··· 1456 1443 dlm_init_work_item(dlm, item, dlm_mig_lockres_worker, buf); 1457 1444 item->u.ml.lockres = res; /* already have a ref */ 1458 1445 item->u.ml.real_master = real_master; 1446 + item->u.ml.extra_ref = extra_refs; 1459 1447 spin_lock(&dlm->work_lock); 1460 1448 list_add_tail(&item->list, &dlm->work_list); 1461 1449 spin_unlock(&dlm->work_lock); 1462 1450 queue_work(dlm->dlm_worker, &dlm->dispatched_work); 1463 1451 1464 1452 leave: 1453 + /* One extra ref taken needs to be put here */ 1454 + if (extra_refs) 1455 + dlm_lockres_put(res); 1456 + 1465 1457 dlm_put(dlm); 1466 1458 if (ret < 0) { 1467 1459 if (buf) ··· 1482 1464 1483 1465 static void dlm_mig_lockres_worker(struct dlm_work_item *item, void *data) 1484 1466 { 1485 - struct dlm_ctxt *dlm = data; 1467 + struct dlm_ctxt *dlm; 1486 1468 struct dlm_migratable_lockres *mres; 1487 1469 int ret = 0; 1488 1470 struct dlm_lock_resource *res; 1489 1471 u8 real_master; 1472 + u8 extra_ref; 1490 1473 1491 1474 dlm = item->dlm; 1492 1475 mres = (struct dlm_migratable_lockres *)data; 1493 1476 1494 1477 res = item->u.ml.lockres; 1495 1478 real_master = item->u.ml.real_master; 1479 + extra_ref = item->u.ml.extra_ref; 1496 1480 1497 1481 if (real_master == DLM_LOCK_RES_OWNER_UNKNOWN) { 1498 1482 /* this case is super-rare. only occurs if ··· 1537 1517 } 1538 1518 1539 1519 leave: 1520 + /* See comment in dlm_mig_lockres_handler() */ 1521 + if (res) { 1522 + if (extra_ref) 1523 + dlm_lockres_put(res); 1524 + dlm_lockres_put(res); 1525 + } 1540 1526 kfree(data); 1541 1527 mlog_exit(ret); 1542 1528 } ··· 1670 1644 /* retry!? */ 1671 1645 BUG(); 1672 1646 } 1673 - } 1647 + } else /* put.. incase we are not the master */ 1648 + dlm_lockres_put(res); 1674 1649 spin_unlock(&res->spinlock); 1675 1650 } 1676 1651 spin_unlock(&dlm->spinlock); ··· 1948 1921 "Recovering res %s:%.*s, is already on recovery list!\n", 1949 1922 dlm->name, res->lockname.len, res->lockname.name); 1950 1923 list_del_init(&res->recovering); 1924 + dlm_lockres_put(res); 1951 1925 } 1952 1926 /* We need to hold a reference while on the recovery list */ 1953 1927 dlm_lockres_get(res); ··· 2158 2130 assert_spin_locked(&dlm->spinlock); 2159 2131 assert_spin_locked(&res->spinlock); 2160 2132 2133 + /* We do two dlm_lock_put(). One for removing from list and the other is 2134 + * to force the DLM_UNLOCK_FREE_LOCK action so as to free the locks */ 2135 + 2161 2136 /* TODO: check pending_asts, pending_basts here */ 2162 2137 list_for_each_entry_safe(lock, next, &res->granted, list) { 2163 2138 if (lock->ml.node == dead_node) { 2164 2139 list_del_init(&lock->list); 2140 + dlm_lock_put(lock); 2141 + /* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */ 2165 2142 dlm_lock_put(lock); 2166 2143 freed++; 2167 2144 } ··· 2175 2142 if (lock->ml.node == dead_node) { 2176 2143 list_del_init(&lock->list); 2177 2144 dlm_lock_put(lock); 2145 + /* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */ 2146 + dlm_lock_put(lock); 2178 2147 freed++; 2179 2148 } 2180 2149 } 2181 2150 list_for_each_entry_safe(lock, next, &res->blocked, list) { 2182 2151 if (lock->ml.node == dead_node) { 2183 2152 list_del_init(&lock->list); 2153 + dlm_lock_put(lock); 2154 + /* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */ 2184 2155 dlm_lock_put(lock); 2185 2156 freed++; 2186 2157 }
+4 -2
fs/ocfs2/dlm/dlmthread.c
··· 176 176 res->lockname.name, master); 177 177 178 178 if (!master) { 179 + /* drop spinlock... retake below */ 180 + spin_unlock(&dlm->spinlock); 181 + 179 182 spin_lock(&res->spinlock); 180 183 /* This ensures that clear refmap is sent after the set */ 181 184 __dlm_wait_on_lockres_flags(res, DLM_LOCK_RES_SETREF_INPROG); 182 185 spin_unlock(&res->spinlock); 183 - /* drop spinlock to do messaging, retake below */ 184 - spin_unlock(&dlm->spinlock); 186 + 185 187 /* clear our bit from the master's refmap, ignore errors */ 186 188 ret = dlm_drop_lockres_ref(dlm, res); 187 189 if (ret < 0) {
+1 -1
fs/ocfs2/dlmglue.c
··· 2409 2409 return 0; 2410 2410 } 2411 2411 2412 - static struct seq_operations ocfs2_dlm_seq_ops = { 2412 + static const struct seq_operations ocfs2_dlm_seq_ops = { 2413 2413 .start = ocfs2_dlm_seq_start, 2414 2414 .stop = ocfs2_dlm_seq_stop, 2415 2415 .next = ocfs2_dlm_seq_next,
+1 -1
fs/ocfs2/resize.c
··· 597 597 memset(cr, 0, sizeof(struct ocfs2_chain_rec)); 598 598 } 599 599 600 - cr->c_blkno = le64_to_cpu(input->group); 600 + cr->c_blkno = cpu_to_le64(input->group); 601 601 le32_add_cpu(&cr->c_total, input->clusters * cl_bpc); 602 602 le32_add_cpu(&cr->c_free, input->frees * cl_bpc); 603 603