diff options
author | Sunil Mushran <Sunil.Mushran@oracle.com> | 2007-06-18 20:00:24 -0400 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2007-07-10 20:19:54 -0400 |
commit | baf4661a8225d3a39622b795a8db0e6aa845c1ec (patch) | |
tree | bb61d2dbd08d6fa427f89325177f83f4ceb996a5 /fs/ocfs2/slot_map.c | |
parent | 5fb0f7f010ba07e373c30c3e99b0efd868c6c977 (diff) |
ocfs2: Add "preferred slot" mount option
ocfs2 will attempt to assign the node the slot# provided in the mount
option. Failure to assign the preferred slot is not an error. This small
feature can be useful for automated testing.
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/slot_map.c')
-rw-r--r-- | fs/ocfs2/slot_map.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/ocfs2/slot_map.c b/fs/ocfs2/slot_map.c index d8b79067dc14..af4882b62cfa 100644 --- a/fs/ocfs2/slot_map.c +++ b/fs/ocfs2/slot_map.c | |||
@@ -121,17 +121,25 @@ static s16 __ocfs2_node_num_to_slot(struct ocfs2_slot_info *si, | |||
121 | return ret; | 121 | return ret; |
122 | } | 122 | } |
123 | 123 | ||
124 | static s16 __ocfs2_find_empty_slot(struct ocfs2_slot_info *si) | 124 | static s16 __ocfs2_find_empty_slot(struct ocfs2_slot_info *si, s16 preferred) |
125 | { | 125 | { |
126 | int i; | 126 | int i; |
127 | s16 ret = OCFS2_INVALID_SLOT; | 127 | s16 ret = OCFS2_INVALID_SLOT; |
128 | 128 | ||
129 | if (preferred >= 0 && preferred < si->si_num_slots) { | ||
130 | if (OCFS2_INVALID_SLOT == si->si_global_node_nums[preferred]) { | ||
131 | ret = preferred; | ||
132 | goto out; | ||
133 | } | ||
134 | } | ||
135 | |||
129 | for(i = 0; i < si->si_num_slots; i++) { | 136 | for(i = 0; i < si->si_num_slots; i++) { |
130 | if (OCFS2_INVALID_SLOT == si->si_global_node_nums[i]) { | 137 | if (OCFS2_INVALID_SLOT == si->si_global_node_nums[i]) { |
131 | ret = (s16) i; | 138 | ret = (s16) i; |
132 | break; | 139 | break; |
133 | } | 140 | } |
134 | } | 141 | } |
142 | out: | ||
135 | return ret; | 143 | return ret; |
136 | } | 144 | } |
137 | 145 | ||
@@ -248,7 +256,7 @@ int ocfs2_find_slot(struct ocfs2_super *osb) | |||
248 | if (slot == OCFS2_INVALID_SLOT) { | 256 | if (slot == OCFS2_INVALID_SLOT) { |
249 | /* if no slot yet, then just take 1st available | 257 | /* if no slot yet, then just take 1st available |
250 | * one. */ | 258 | * one. */ |
251 | slot = __ocfs2_find_empty_slot(si); | 259 | slot = __ocfs2_find_empty_slot(si, osb->preferred_slot); |
252 | if (slot == OCFS2_INVALID_SLOT) { | 260 | if (slot == OCFS2_INVALID_SLOT) { |
253 | spin_unlock(&si->si_lock); | 261 | spin_unlock(&si->si_lock); |
254 | mlog(ML_ERROR, "no free slots available!\n"); | 262 | mlog(ML_ERROR, "no free slots available!\n"); |