diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2008-11-26 07:49:26 -0500 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2009-01-05 02:39:11 -0500 |
commit | b52896813c2f16bcc5c5b67bb3c3f75bc084439b (patch) | |
tree | 2da41c8c4e5ef5ab74e8d1e5bc65183e5b9d4a14 /fs/gfs2/super.c | |
parent | fdd1062ebaa422c5684f97fa91da06f91167d76b (diff) |
GFS2: Fix bug in gfs2_lock_fs_check_clean()
gfs2_lock_fs_check_clean() should not be calling gfs2_jindex_hold()
since it doesn't work like rindex hold, despite the comment. That
allows gfs2_jindex_hold() to be moved into ops_fstype.c where it
can be made static.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/super.c')
-rw-r--r-- | fs/gfs2/super.c | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index b85877062a48..3dd9f5788cb0 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -34,76 +34,6 @@ | |||
34 | #include "util.h" | 34 | #include "util.h" |
35 | 35 | ||
36 | /** | 36 | /** |
37 | * gfs2_jindex_hold - Grab a lock on the jindex | ||
38 | * @sdp: The GFS2 superblock | ||
39 | * @ji_gh: the holder for the jindex glock | ||
40 | * | ||
41 | * This is very similar to the gfs2_rindex_hold() function, except that | ||
42 | * in general we hold the jindex lock for longer periods of time and | ||
43 | * we grab it far less frequently (in general) then the rgrp lock. | ||
44 | * | ||
45 | * Returns: errno | ||
46 | */ | ||
47 | |||
48 | int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh) | ||
49 | { | ||
50 | struct gfs2_inode *dip = GFS2_I(sdp->sd_jindex); | ||
51 | struct qstr name; | ||
52 | char buf[20]; | ||
53 | struct gfs2_jdesc *jd; | ||
54 | int error; | ||
55 | |||
56 | name.name = buf; | ||
57 | |||
58 | mutex_lock(&sdp->sd_jindex_mutex); | ||
59 | |||
60 | for (;;) { | ||
61 | error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, ji_gh); | ||
62 | if (error) | ||
63 | break; | ||
64 | |||
65 | name.len = sprintf(buf, "journal%u", sdp->sd_journals); | ||
66 | name.hash = gfs2_disk_hash(name.name, name.len); | ||
67 | |||
68 | error = gfs2_dir_check(sdp->sd_jindex, &name, NULL); | ||
69 | if (error == -ENOENT) { | ||
70 | error = 0; | ||
71 | break; | ||
72 | } | ||
73 | |||
74 | gfs2_glock_dq_uninit(ji_gh); | ||
75 | |||
76 | if (error) | ||
77 | break; | ||
78 | |||
79 | error = -ENOMEM; | ||
80 | jd = kzalloc(sizeof(struct gfs2_jdesc), GFP_KERNEL); | ||
81 | if (!jd) | ||
82 | break; | ||
83 | |||
84 | INIT_LIST_HEAD(&jd->extent_list); | ||
85 | jd->jd_inode = gfs2_lookupi(sdp->sd_jindex, &name, 1); | ||
86 | if (!jd->jd_inode || IS_ERR(jd->jd_inode)) { | ||
87 | if (!jd->jd_inode) | ||
88 | error = -ENOENT; | ||
89 | else | ||
90 | error = PTR_ERR(jd->jd_inode); | ||
91 | kfree(jd); | ||
92 | break; | ||
93 | } | ||
94 | |||
95 | spin_lock(&sdp->sd_jindex_spin); | ||
96 | jd->jd_jid = sdp->sd_journals++; | ||
97 | list_add_tail(&jd->jd_list, &sdp->sd_jindex_list); | ||
98 | spin_unlock(&sdp->sd_jindex_spin); | ||
99 | } | ||
100 | |||
101 | mutex_unlock(&sdp->sd_jindex_mutex); | ||
102 | |||
103 | return error; | ||
104 | } | ||
105 | |||
106 | /** | ||
107 | * gfs2_jindex_free - Clear all the journal index information | 37 | * gfs2_jindex_free - Clear all the journal index information |
108 | * @sdp: The GFS2 superblock | 38 | * @sdp: The GFS2 superblock |
109 | * | 39 | * |
@@ -580,10 +510,6 @@ static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp, | |||
580 | struct gfs2_log_header_host lh; | 510 | struct gfs2_log_header_host lh; |
581 | int error; | 511 | int error; |
582 | 512 | ||
583 | error = gfs2_jindex_hold(sdp, &ji_gh); | ||
584 | if (error) | ||
585 | return error; | ||
586 | |||
587 | list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { | 513 | list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { |
588 | lfcc = kmalloc(sizeof(struct lfcc), GFP_KERNEL); | 514 | lfcc = kmalloc(sizeof(struct lfcc), GFP_KERNEL); |
589 | if (!lfcc) { | 515 | if (!lfcc) { |