aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/dir.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2006-02-13 11:21:47 -0500
committerSteven Whitehouse <swhiteho@redhat.com>2006-02-13 11:21:47 -0500
commitfc69d0d336214219abb521d8ff060f786d7f369e (patch)
treedfb6401d82a72592d9c5d55320740b71c50cd5e0 /fs/gfs2/dir.c
parent7359a19cc758946aba0e45233b8641256b194884 (diff)
[GFS2] Change ondisk format (hopefully for the last time)
There were one or two fields in structures which didn't get changed last time back to their gfs1 sizes and alignments. One or two constants have also changed back to their original values which were missed the first time. Its possible that indirect pointer blocks might need to change. If they don't we'll have to rewrite them all on upgrade due to a change in the amount of padding that they use. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/dir.c')
-rw-r--r--fs/gfs2/dir.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
index c77e18048d98..c32f7b3de662 100644
--- a/fs/gfs2/dir.c
+++ b/fs/gfs2/dir.c
@@ -397,11 +397,11 @@ static int dirent_next(struct gfs2_inode *dip, struct buffer_head *bh,
397{ 397{
398 struct gfs2_dirent *tmp, *cur; 398 struct gfs2_dirent *tmp, *cur;
399 char *bh_end; 399 char *bh_end;
400 uint32_t cur_rec_len; 400 uint16_t cur_rec_len;
401 401
402 cur = *dent; 402 cur = *dent;
403 bh_end = bh->b_data + bh->b_size; 403 bh_end = bh->b_data + bh->b_size;
404 cur_rec_len = be32_to_cpu(cur->de_rec_len); 404 cur_rec_len = be16_to_cpu(cur->de_rec_len);
405 405
406 if ((char *)cur + cur_rec_len >= bh_end) { 406 if ((char *)cur + cur_rec_len >= bh_end) {
407 if ((char *)cur + cur_rec_len > bh_end) { 407 if ((char *)cur + cur_rec_len > bh_end) {
@@ -413,7 +413,7 @@ static int dirent_next(struct gfs2_inode *dip, struct buffer_head *bh,
413 413
414 tmp = (struct gfs2_dirent *)((char *)cur + cur_rec_len); 414 tmp = (struct gfs2_dirent *)((char *)cur + cur_rec_len);
415 415
416 if ((char *)tmp + be32_to_cpu(tmp->de_rec_len) > bh_end) { 416 if ((char *)tmp + be16_to_cpu(tmp->de_rec_len) > bh_end) {
417 gfs2_consist_inode(dip); 417 gfs2_consist_inode(dip);
418 return -EIO; 418 return -EIO;
419 } 419 }
@@ -440,7 +440,7 @@ static int dirent_next(struct gfs2_inode *dip, struct buffer_head *bh,
440static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh, 440static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh,
441 struct gfs2_dirent *prev, struct gfs2_dirent *cur) 441 struct gfs2_dirent *prev, struct gfs2_dirent *cur)
442{ 442{
443 uint32_t cur_rec_len, prev_rec_len; 443 uint16_t cur_rec_len, prev_rec_len;
444 444
445 if (!cur->de_inum.no_addr) { 445 if (!cur->de_inum.no_addr) {
446 gfs2_consist_inode(dip); 446 gfs2_consist_inode(dip);
@@ -460,8 +460,8 @@ static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh,
460 460
461 /* Combine this dentry with the previous one. */ 461 /* Combine this dentry with the previous one. */
462 462
463 prev_rec_len = be32_to_cpu(prev->de_rec_len); 463 prev_rec_len = be16_to_cpu(prev->de_rec_len);
464 cur_rec_len = be32_to_cpu(cur->de_rec_len); 464 cur_rec_len = be16_to_cpu(cur->de_rec_len);
465 465
466 if ((char *)prev + prev_rec_len != (char *)cur) 466 if ((char *)prev + prev_rec_len != (char *)cur)
467 gfs2_consist_inode(dip); 467 gfs2_consist_inode(dip);
@@ -469,7 +469,7 @@ static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh,
469 gfs2_consist_inode(dip); 469 gfs2_consist_inode(dip);
470 470
471 prev_rec_len += cur_rec_len; 471 prev_rec_len += cur_rec_len;
472 prev->de_rec_len = cpu_to_be32(prev_rec_len); 472 prev->de_rec_len = cpu_to_be16(prev_rec_len);
473} 473}
474 474
475/** 475/**
@@ -513,7 +513,7 @@ int gfs2_dirent_alloc(struct gfs2_inode *dip, struct buffer_head *bh,
513 gfs2_trans_add_bh(dip->i_gl, bh, 1); 513 gfs2_trans_add_bh(dip->i_gl, bh, 1);
514 514
515 dent->de_rec_len = bh->b_size - offset; 515 dent->de_rec_len = bh->b_size - offset;
516 dent->de_rec_len = cpu_to_be32(dent->de_rec_len); 516 dent->de_rec_len = cpu_to_be16(dent->de_rec_len);
517 dent->de_name_len = name_len; 517 dent->de_name_len = name_len;
518 518
519 *dent_out = dent; 519 *dent_out = dent;
@@ -521,9 +521,10 @@ int gfs2_dirent_alloc(struct gfs2_inode *dip, struct buffer_head *bh,
521 } 521 }
522 522
523 do { 523 do {
524 uint32_t cur_rec_len, cur_name_len; 524 uint16_t cur_rec_len;
525 uint32_t cur_name_len;
525 526
526 cur_rec_len = be32_to_cpu(dent->de_rec_len); 527 cur_rec_len = be16_to_cpu(dent->de_rec_len);
527 cur_name_len = dent->de_name_len; 528 cur_name_len = dent->de_name_len;
528 529
529 if ((!dent->de_inum.no_addr && cur_rec_len >= rec_len) || 530 if ((!dent->de_inum.no_addr && cur_rec_len >= rec_len) ||
@@ -536,11 +537,11 @@ int gfs2_dirent_alloc(struct gfs2_inode *dip, struct buffer_head *bh,
536 memset(new, 0, sizeof(struct gfs2_dirent)); 537 memset(new, 0, sizeof(struct gfs2_dirent));
537 538
538 new->de_rec_len = cur_rec_len - GFS2_DIRENT_SIZE(cur_name_len); 539 new->de_rec_len = cur_rec_len - GFS2_DIRENT_SIZE(cur_name_len);
539 new->de_rec_len = cpu_to_be32(new->de_rec_len); 540 new->de_rec_len = cpu_to_be16(new->de_rec_len);
540 new->de_name_len = name_len; 541 new->de_name_len = name_len;
541 542
542 dent->de_rec_len = cur_rec_len - be32_to_cpu(new->de_rec_len); 543 dent->de_rec_len = cur_rec_len - be16_to_cpu(new->de_rec_len);
543 dent->de_rec_len = cpu_to_be32(dent->de_rec_len); 544 dent->de_rec_len = cpu_to_be16(dent->de_rec_len);
544 545
545 *dent_out = new; 546 *dent_out = new;
546 return 0; 547 return 0;
@@ -589,9 +590,10 @@ static int dirent_fits(struct gfs2_inode *dip, struct buffer_head *bh,
589 return 1; 590 return 1;
590 591
591 do { 592 do {
592 uint32_t cur_rec_len, cur_name_len; 593 uint16_t cur_rec_len;
594 uint32_t cur_name_len;
593 595
594 cur_rec_len = be32_to_cpu(dent->de_rec_len); 596 cur_rec_len = be16_to_cpu(dent->de_rec_len);
595 cur_name_len = dent->de_name_len; 597 cur_name_len = dent->de_name_len;
596 598
597 if ((!dent->de_inum.no_addr && cur_rec_len >= rec_len) || 599 if ((!dent->de_inum.no_addr && cur_rec_len >= rec_len) ||
@@ -832,10 +834,10 @@ static int dir_make_exhash(struct gfs2_inode *dip)
832 /* Adjust the last dirent's record length 834 /* Adjust the last dirent's record length
833 (Remember that dent still points to the last entry.) */ 835 (Remember that dent still points to the last entry.) */
834 836
835 dent->de_rec_len = be32_to_cpu(dent->de_rec_len) + 837 dent->de_rec_len = be16_to_cpu(dent->de_rec_len) +
836 sizeof(struct gfs2_dinode) - 838 sizeof(struct gfs2_dinode) -
837 sizeof(struct gfs2_leaf); 839 sizeof(struct gfs2_leaf);
838 dent->de_rec_len = cpu_to_be32(dent->de_rec_len); 840 dent->de_rec_len = cpu_to_be16(dent->de_rec_len);
839 841
840 brelse(bh); 842 brelse(bh);
841 843