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

Configure Feed

Select the types of activity you want to include in your feed.

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: Pack vote message and response structures
ocfs2: Don't double set write parameters
ocfs2: Fix pos/len passed to ocfs2_write_cluster
ocfs2: Allow smaller allocations during large writes

+57 -30
+19 -14
fs/ocfs2/aops.c
··· 930 930 loff_t user_pos, unsigned user_len) 931 931 { 932 932 int i; 933 - unsigned from, to; 933 + unsigned from = user_pos & (PAGE_CACHE_SIZE - 1), 934 + to = user_pos + user_len; 934 935 struct page *tmppage; 935 936 936 - ocfs2_zero_new_buffers(wc->w_target_page, user_pos, user_len); 937 - 938 - if (wc->w_large_pages) { 939 - from = wc->w_target_from; 940 - to = wc->w_target_to; 941 - } else { 942 - from = 0; 943 - to = PAGE_CACHE_SIZE; 944 - } 937 + ocfs2_zero_new_buffers(wc->w_target_page, from, to); 945 938 946 939 for(i = 0; i < wc->w_num_pages; i++) { 947 940 tmppage = wc->w_pages[i]; ··· 984 991 map_from = cluster_start; 985 992 map_to = cluster_end; 986 993 } 987 - 988 - wc->w_target_from = map_from; 989 - wc->w_target_to = map_to; 990 994 } else { 991 995 /* 992 996 * If we haven't allocated the new page yet, we ··· 1201 1211 loff_t pos, unsigned len) 1202 1212 { 1203 1213 int ret, i; 1214 + loff_t cluster_off; 1215 + unsigned int local_len = len; 1204 1216 struct ocfs2_write_cluster_desc *desc; 1217 + struct ocfs2_super *osb = OCFS2_SB(mapping->host->i_sb); 1205 1218 1206 1219 for (i = 0; i < wc->w_clen; i++) { 1207 1220 desc = &wc->w_desc[i]; 1208 1221 1222 + /* 1223 + * We have to make sure that the total write passed in 1224 + * doesn't extend past a single cluster. 1225 + */ 1226 + local_len = len; 1227 + cluster_off = pos & (osb->s_clustersize - 1); 1228 + if ((cluster_off + local_len) > osb->s_clustersize) 1229 + local_len = osb->s_clustersize - cluster_off; 1230 + 1209 1231 ret = ocfs2_write_cluster(mapping, desc->c_phys, 1210 1232 desc->c_unwritten, data_ac, meta_ac, 1211 - wc, desc->c_cpos, pos, len); 1233 + wc, desc->c_cpos, pos, local_len); 1212 1234 if (ret) { 1213 1235 mlog_errno(ret); 1214 1236 goto out; 1215 1237 } 1238 + 1239 + len -= local_len; 1240 + pos += local_len; 1216 1241 } 1217 1242 1218 1243 ret = 0;
+2 -2
fs/ocfs2/file.c
··· 491 491 goto leave; 492 492 } 493 493 494 - status = ocfs2_claim_clusters(osb, handle, data_ac, 1, 495 - &bit_off, &num_bits); 494 + status = __ocfs2_claim_clusters(osb, handle, data_ac, 1, 495 + clusters_to_add, &bit_off, &num_bits); 496 496 if (status < 0) { 497 497 if (status != -ENOSPC) 498 498 mlog_errno(status);
+1 -3
fs/ocfs2/localalloc.c
··· 524 524 int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb, 525 525 handle_t *handle, 526 526 struct ocfs2_alloc_context *ac, 527 - u32 min_bits, 527 + u32 bits_wanted, 528 528 u32 *bit_off, 529 529 u32 *num_bits) 530 530 { 531 531 int status, start; 532 532 struct inode *local_alloc_inode; 533 - u32 bits_wanted; 534 533 void *bitmap; 535 534 struct ocfs2_dinode *alloc; 536 535 struct ocfs2_local_alloc *la; ··· 537 538 mlog_entry_void(); 538 539 BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL); 539 540 540 - bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given; 541 541 local_alloc_inode = ac->ac_inode; 542 542 alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data; 543 543 la = OCFS2_LOCAL_ALLOC(alloc);
+1 -1
fs/ocfs2/localalloc.h
··· 48 48 int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb, 49 49 handle_t *handle, 50 50 struct ocfs2_alloc_context *ac, 51 - u32 min_bits, 51 + u32 bits_wanted, 52 52 u32 *bit_off, 53 53 u32 *num_bits); 54 54
+21 -8
fs/ocfs2/suballoc.c
··· 1486 1486 * contig. allocation, set to '1' to indicate we can deal with extents 1487 1487 * of any size. 1488 1488 */ 1489 - int ocfs2_claim_clusters(struct ocfs2_super *osb, 1490 - handle_t *handle, 1491 - struct ocfs2_alloc_context *ac, 1492 - u32 min_clusters, 1493 - u32 *cluster_start, 1494 - u32 *num_clusters) 1489 + int __ocfs2_claim_clusters(struct ocfs2_super *osb, 1490 + handle_t *handle, 1491 + struct ocfs2_alloc_context *ac, 1492 + u32 min_clusters, 1493 + u32 max_clusters, 1494 + u32 *cluster_start, 1495 + u32 *num_clusters) 1495 1496 { 1496 1497 int status; 1497 - unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given; 1498 + unsigned int bits_wanted = max_clusters; 1498 1499 u64 bg_blkno = 0; 1499 1500 u16 bg_bit_off; 1500 1501 1501 1502 mlog_entry_void(); 1502 1503 1503 - BUG_ON(!ac); 1504 1504 BUG_ON(ac->ac_bits_given >= ac->ac_bits_wanted); 1505 1505 1506 1506 BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL ··· 1555 1555 bail: 1556 1556 mlog_exit(status); 1557 1557 return status; 1558 + } 1559 + 1560 + int ocfs2_claim_clusters(struct ocfs2_super *osb, 1561 + handle_t *handle, 1562 + struct ocfs2_alloc_context *ac, 1563 + u32 min_clusters, 1564 + u32 *cluster_start, 1565 + u32 *num_clusters) 1566 + { 1567 + unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given; 1568 + 1569 + return __ocfs2_claim_clusters(osb, handle, ac, min_clusters, 1570 + bits_wanted, cluster_start, num_clusters); 1558 1571 } 1559 1572 1560 1573 static inline int ocfs2_block_group_clear_bits(handle_t *handle,
+11
fs/ocfs2/suballoc.h
··· 85 85 u32 min_clusters, 86 86 u32 *cluster_start, 87 87 u32 *num_clusters); 88 + /* 89 + * Use this variant of ocfs2_claim_clusters to specify a maxiumum 90 + * number of clusters smaller than the allocation reserved. 91 + */ 92 + int __ocfs2_claim_clusters(struct ocfs2_super *osb, 93 + handle_t *handle, 94 + struct ocfs2_alloc_context *ac, 95 + u32 min_clusters, 96 + u32 max_clusters, 97 + u32 *cluster_start, 98 + u32 *num_clusters); 88 99 89 100 int ocfs2_free_suballoc_bits(handle_t *handle, 90 101 struct inode *alloc_inode,
+2 -2
fs/ocfs2/vote.c
··· 66 66 { 67 67 struct ocfs2_msg_hdr v_hdr; 68 68 __be32 v_reserved1; 69 - }; 69 + } __attribute__ ((packed)); 70 70 71 71 /* Responses are given these values to maintain backwards 72 72 * compatibility with older ocfs2 versions */ ··· 78 78 { 79 79 struct ocfs2_msg_hdr r_hdr; 80 80 __be32 r_response; 81 - }; 81 + } __attribute__ ((packed)); 82 82 83 83 struct ocfs2_vote_work { 84 84 struct list_head w_list;