aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2012-07-30libceph: avoid dropping con mutex before faultSage Weil1-3/+1
The ceph_fault() function takes the con mutex, so we should avoid dropping it before calling it. This fixes a potential race with another thread calling ceph_con_close(), or _open(), or similar (we don't reverify con->state after retaking the lock). Add annotation so that lockdep realizes we will drop the mutex before returning. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: verify state after retaking con lock after dispatchSage Weil1-1/+2
We drop the con mutex when delivering a message. When we retake the lock, we need to verify we are still in the OPEN state before preparing to read the next tag, or else we risk stepping on a connection that has been closed. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: revoke mon_client messages on session restartSage Weil1-0/+4
Revoke all mon_client messages when we shut down the old connection. This is mostly moot since we are re-using the same ceph_connection, but it is cleaner. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: fix handling of immediate socket connect failureSage Weil1-7/+19
If the connect() call immediately fails such that sock == NULL, we still need con_close_socket() to reset our socket state to CLOSED. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30ceph: update MAINTAINERS fileSage Weil1-5/+8
* shiny new inktank.com email addresses * add include/linux/crush directory (previous oversight) Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: be less chatty about stray repliesSage Weil1-2/+2
There are many (normal) conditions that can lead to us getting unexpected replies, include cluster topology changes, osd failures, and timeouts. There's no need to spam the console about it. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: clear all flags on con_closeSage Weil1-0/+2
Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: clean up con flagsSage Weil2-36/+36
Rename flags with CON_FLAG prefix, move the definitions into the c file, and (better) document their meaning. Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: replace connection state bits with statesSage Weil2-74/+68
Use a simple set of 6 enumerated values for the socket states (CON_STATE_*) and use those instead of the state bits. All of the con->state checks are now under the protection of the con mutex, so this is safe. It also simplifies many of the state checks because we can check for anything other than the expected state instead of various bits for races we can think of. This appears to hold up well to stress testing both with and without socket failure injection on the server side. Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: drop unnecessary CLOSED check in socket state change callbackSage Weil1-3/+0
If we are CLOSED, the socket is closed and we won't get these. Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: close socket directly from ceph_con_close()Sage Weil1-7/+1
It is simpler to do this immediately, since we already hold the con mutex. It also avoids the need to deal with a not-quite-CLOSED socket in con_work. Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: drop gratuitous socket close calls in con_workSage Weil1-4/+4
If the state is CLOSED or OPENING, we shouldn't have a socket. Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: move ceph_con_send() closed check under the con mutexSage Weil1-9/+7
Take the con mutex before checking whether the connection is closed to avoid racing with someone else closing it. Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: move msgr clear_standby under con mutex protectionSage Weil1-3/+4
Avoid dropping and retaking con->mutex in the ceph_con_send() case by leaving locking up to the caller. Signed-off-by: Sage Weil <[email protected]>
2012-07-30libceph: fix fault locking; close socket on lossy faultSage Weil1-7/+7
If we fault on a lossy connection, we should still close the socket immediately, and do so under the con mutex. We should also take the con mutex before printing out the state bits in the debug output. Signed-off-by: Sage Weil <[email protected]>
2012-07-30rbd: drop "object_name" from rbd_req_sync_unwatch()Alex Elder1-4/+5
rbd_req_sync_unwatch() only ever uses rbd_dev->header_name as the value of its "object_name" parameter, and that value is available within the function already. So get rid of the parameter. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: drop "object_name" from rbd_req_sync_notify_ack()Alex Elder1-4/+3
rbd_req_sync_notify_ack() only ever uses rbd_dev->header_name as the value of its "object_name" parameter, and that value is available within the function already. So get rid of the parameter. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: drop "object_name" from rbd_req_sync_notify()Alex Elder1-4/+4
rbd_req_sync_notify() only ever uses rbd_dev->header_name as the value of its "object_name" parameter, and that value is available within the function already. So get rid of the parameter. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: drop "object_name" from rbd_req_sync_watch()Alex Elder1-7/+5
rbd_req_sync_watch() is only called in one place, and in that place it passes rbd_dev->header_name as the value of the "object_name" parameter. This value is available within the function already. Having the extra parameter leaves the impression the object name could take on different values, but it does not. So get rid of the parameter. We can always add it back again if we find we want to watch some other object in the future. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: drop rbd_dev parameter in snap functionsAlex Elder1-12/+7
Both rbd_register_snap_dev() and __rbd_remove_snap_dev() have rbd_dev parameters that are unused. Remove them. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: drop rbd_header_from_disk() gfp_flags parameterAlex Elder1-7/+6
The function rbd_header_from_disk() is only called in one spot, and it passes GFP_KERNEL as its value for the gfp_flags parameter. Just drop that parameter and substitute GFP_KERNEL everywhere within that function it had been used. (If we find we need the parameter again in the future it's easy enough to add back again.) Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: snapc is unused in rbd_req_sync_read()Alex Elder1-2/+1
The "snapc" parameter to in rbd_req_sync_read() is not used, so get rid of it. Reported-by: Josh Durgin <[email protected]> Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: rename rbd_device->idAlex Elder1-8/+8
The "id" field of an rbd device structure represents the unique client-local device id mapped to the underlying rbd image. Each rbd image will have another id--the image id--and each snapshot has its own id as well. The simple name "id" no longer conveys the information one might like to have. Rename the device "id" field in struct rbd_dev to be "dev_id" to make it a little more obvious what we're dealing with without having to think more about context. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: encapsulate header validity testAlex Elder1-1/+7
If an rbd image header is read and it doesn't begin with the expected magic information, a warning is displayed. This is a fairly simple test, but it could be extended at some point. Fix the comparison so it actually looks at the "text" field rather than the front of the structure. In any case, encapsulate the validity test in its own function. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30ceph: define snap counts as u32 everywhereAlex Elder3-11/+13
There are two structures in which a count of snapshots are maintained: struct ceph_snap_context { ... u32 num_snaps; ... } and struct ceph_snap_realm { ... u32 num_prior_parent_snaps; /* had prior to parent_since */ ... u32 num_snaps; ... } These fields never take on negative values (e.g., to hold special meaning), and so are really inherently unsigned. Furthermore they take their value from over-the-wire or on-disk formatted 32-bit values. So change their definition to have type u32, and change some spots elsewhere in the code to account for this change. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: clean up a few dout() callsAlex Elder1-19/+22
There was a dout() call in rbd_do_request() that was reporting the reporting the offset as the length and vice versa. While fixing that I did a quick scan of other dout() calls and fixed a couple of other minor things. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: simplify __rbd_remove_all_snaps()Alex Elder1-3/+2
This just replaces a while loop with list_for_each_entry_safe() in __rbd_remove_all_snaps(). Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: drop extra header_rwsem initAlex Elder1-2/+0
In commit c666601a there was inadvertently added an extra initialization of rbd_dev->header_rwsem. This gets rid of the duplicate. Reported-by: Guangliang Zhao <[email protected]> Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: kill rbd_image_header->snap_seqAlex Elder1-2/+0
The snap_seq field in an rbd_image_header structure held the value from the rbd image header when it was last refreshed. We now maintain this value in the snapc->seq field. So get rid of the other one. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: set snapc->seq only when refreshing headerAlex Elder1-8/+2
In rbd_header_add_snap() there is code to set snapc->seq to the just-added snapshot id. This is the only remnant left of the use of that field for recording which snapshot an rbd_dev was associated with. That functionality is no longer supported, so get rid of that final bit of code. Doing so means we never actually set snapc->seq any more. On the server, the snapshot context's sequence value represents the highest snapshot id ever issued for a particular rbd image. So we'll make it have that meaning here as well. To do so, set this value whenever the rbd header is (re-)read. That way it will always be consistent with the rest of the snapshot context we maintain. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: preserve snapc->seq in rbd_header_set_snap()Alex Elder1-11/+7
In rbd_header_set_snap(), there is logic to make the snap context's seq field get set to a particular snapshot id, or 0 if there is no snapshot for the rbd image. This seems to be an artifact of how the current snapshot id for an rbd_dev was recorded before the rbd_dev->snap_id field began to be used for that purpose. There's no need to update the value of snapc->seq here any more, so stop doing it. Tidy up a few local variables in that function while we're at it. Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: don't use snapc->seq that wayAlex Elder1-14/+0
In what appears to be an artifact of a different way of encoding whether an rbd image maps a snapshot, __rbd_refresh_header() has code that arranges to update the seq value in an rbd image's snapshot context to point to the first entry in its snapshot array if that's where it was pointing initially. We now use rbd_dev->snap_id to record the snapshot id--using the special value CEPH_NOSNAP to indicate the rbd_dev is not mapping a snapshot at all. There is therefore no need to check for this case, nor to update the seq value, in __rbd_refresh_header(). Just preserve the seq value that rbd_read_header() provides (which, at the moment, is nothing). Signed-off-by: Alex Elder <[email protected]> Reviewed-by: Josh Durgin <[email protected]>
2012-07-30rbd: send header version when notifyingJosh Durgin1-2/+5
Previously the original header version was sent. Now, we update it when the header changes. Signed-off-by: Josh Durgin <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30rbd: use reference counting for the snap contextJosh Durgin1-18/+18
This prevents a race between requests with a given snap context and header updates that free it. The osd client was already expecting the snap context to be reference counted, since it get()s it in ceph_osdc_build_request and put()s it when the request completes. Also remove the second down_read()/up_read() on header_rwsem in rbd_do_request, which wasn't actually preventing this race or protecting any other data. Signed-off-by: Josh Durgin <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30rbd: set image size when header is updatedJosh Durgin1-0/+1
The image may have been resized. Signed-off-by: Josh Durgin <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30rbd: expose the correct size of the device in sysfsJosh Durgin1-3/+8
If an image was mapped to a snapshot, the size of the head version would be shown. Protect capacity with header_rwsem, since it may change. Signed-off-by: Josh Durgin <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30rbd: only reset capacity when pointing to headJosh Durgin1-1/+6
Snapshots cannot be resized, and the new capacity of head should not be reflected by the snapshot. Signed-off-by: Josh Durgin <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30rbd: return errors for mapped but deleted snapshotJosh Durgin1-2/+30
When a snapshot is deleted, the OSD will return ENOENT when reading from it. This is normally interpreted as a hole by rbd, which will return zeroes. To minimize the time in which this can happen, stop requests early when we are notified that our snapshot no longer exists. [[email protected]: updated __rbd_init_snaps_header() logic] Signed-off-by: Josh Durgin <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: trivial fix for the incorrect debug outputJiaju Zhang1-1/+1
This is a trivial fix for the debug output, as it is inconsistent with the function name so may confuse people when debugging. [[email protected]: switched to use __func__] Signed-off-by: Jiaju Zhang <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30ceph: fix potential double freeAlan Cox1-0/+1
We re-run the loop but we don't re-set the attrs pointer back to NULL. Signed-off-by: Alan Cox <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: reset connection retry on successfully negotiationSage Weil1-0/+2
We exponentially back off when we encounter connection errors. If several errors accumulate, we will eventually wait ages before even trying to reconnect. Fix this by resetting the backoff counter after a successful negotiation/ connection with the remote node. Fixes ceph issue #2802. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30libceph: protect ceph_con_open() with mutexSage Weil1-0/+2
Take the con mutex while we are initiating a ceph open. This is necessary because the may have previously been in use and then closed, which could result in a racing workqueue running con_work(). Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]> Reviewed-by: Alex Elder <[email protected]>
2012-07-30ceph: close old con before reopening on mds reconnectSage Weil1-0/+1
When we detect a mds session reset, close the old ceph_connection before reopening it. This ensures we clean up the old socket properly and keep the ceph_connection state correct. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]>
2012-07-30libceph: (re)initialize bio_iter on start of message receiveSage Weil1-5/+6
Previously, we were opportunistically initializing the bio_iter if it appeared to be uninitialized in the middle of the read path. The problem is that a sequence like: - start reading message - initialize bio_iter - read half a message - messenger fault, reconnect - restart reading message - ** bio_iter now non-NULL, not reinitialized ** - read past end of bio, crash Instead, initialize the bio_iter unconditionally when we allocate/claim the message for read. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]>
2012-07-30libceph: resubmit linger ops when pg mapping changesSage Weil1-5/+21
The linger op registration (i.e., watch) modifies the object state. As such, the OSD will reply with success if it has already applied without doing the associated side-effects (setting up the watch session state). If we lose the ACK and resubmit, we will see success but the watch will not be correctly registered and we won't get notifies. To fix this, always resubmit the linger op with a new tid. We accomplish this by re-registering as a linger (i.e., 'registered') if we are not yet registered. Then the second loop will treat this just like a normal case of re-registering. This mirrors a similar fix on the userland ceph.git, commit 5dd68b95, and ceph bug #2796. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]>
2012-07-30libceph: fix mutex coverage for ceph_con_closeSage Weil1-1/+7
Hold the mutex while twiddling all of the state bits to avoid possible races. While we're here, make not of why we cannot close the socket directly. Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]>
2012-07-30libceph: report socket read/write error messageSage Weil1-2/+6
We need to set error_msg to something useful before calling ceph_fault(); do so here for try_{read,write}(). This is more informative than libceph: osd0 192.168.106.220:6801 (null) Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]>
2012-07-30libceph: support crush tunablesSage Weil4-7/+58
The server side recently added support for tuning some magic crush variables. Decode these variables if they are present, or use the default values if they are not present. Corresponds to ceph.git commit 89af369c25f274fe62ef730e5e8aad0c54f1e5a5. Signed-off-by: caleb miles <[email protected]> Reviewed-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]> Reviewed-by: Yehuda Sadeh <[email protected]>
2012-07-30[media] via-camera: pass correct format settings to sensorDaniel Drake1-1/+1
The code attempts to maintain a "user format" and a "sensor format", but in this case it looks like a typo is passing the user format down to the sensor. This was preventing display of video at anything other than 640x480. Signed-off-by: Daniel Drake <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2012-07-30[media] rtl2832.c: minor cleanupHans-Frieder Vogt1-1/+1
The current formulation of the bw_params loop uses the counter j as an index for the first dimension of the bw_params array which is later incremented by the variable i. It is evaluated correctly only, because j is initialized to 0 at the beginning of the loop. I think that explicitly using the index 0 better reflects the intent of the expression. Signed-off-by: Hans-Frieder Vogt <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>