aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* ceph: fix intra strip unit length calculationNoah Watkins2009-10-30
| | | | | | | | | | Commit 645a102581b3639836b17d147c35d574fd6e8267 fixes calculation of object offset for layouts with multiple stripes per object. This updates the calculation of the length written to take into account multiple stripes per object. Signed-off-by: Noah Watkins <noah@noahdesu.com> Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: fix object striping calculation for non-default striping schemesSage Weil2009-10-28
| | | | | | | | | | | We were incorrectly calculationing of object offset. If we have multiple stripe units per object, we need to shift to the start of the current su in addition to the offset within the su. Also rename bno to ono (object number) to avoid some variable naming confusion. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: correct comment to match striping calculationSage Weil2009-10-28
| | | | | | | | The object extent offset is the file offset _modulo_ the stripe unit. The code was correct, the comment was wrong. Reported-by: Noah Watkins <jayhawk@soe.ucsc.edu> Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: remove redundant use of le32_to_cpuNoah Watkins2009-10-28
| | | | | | | | Using stripe unit size calculated and saved on the stack to avoid a redundant call to le32_to_cpu. Signed-off-by: Noah Watkins <noah@noahdesu.com> Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: replace list_entry with container_ofNoah Watkins2009-10-28
| | | | | | | | Usage of non-list.h list_entry function for container_of functionality replaced with direct use of container_of. Signed-off-by: Noah Watkins <noah@noahdesu.com> Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: allocate and parse mount args before client instanceSage Weil2009-10-27
| | | | | | | | This simplifies much of the error handling during mount. It also means that we have the mount args before client creation, and we can initialize based on those options. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: fix, clean up string mount arg parsingSage Weil2009-10-27
| | | | | | | Clearly demark int and string argument options, and do not try to convert string arguments to ints. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: silence uninitialized variable warningSage Weil2009-10-27
| | | | Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: reduce parse_mount_args stack usageSage Weil2009-10-27
| | | | | | | Since we've increased the max mon count, we shouldn't put the addr array on the parse_mount_args stack. Put it on the heap instead. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: remove small mon addr limit; use CEPH_MAX_MON where appropriateSage Weil2009-10-22
| | | | | | | | Get rid of separate max mon limit; use the system limit instead. This allows mounts when there are lots of mon addrs provided by mount.ceph (as with a host with lots of A/AAAA records). Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: move directory size logic to ceph_getattrSage Weil2009-10-21
| | | | | | | | | | We can't fill i_size with rbytes at the fill_file_size stage without adding additional checks for directories. Notably, we want st_blocks to remain 0 on directories so that 'du' still works. Fill in i_blocks, i_size specially in ceph_getattr instead. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: v0.17 of clientSage Weil2009-10-19
| | | | Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: include preferred osd in placement seedSage Weil2009-10-19
| | | | | | | | | | Mix the preferred osd (if any) into the placement seed that is fed into the CRUSH object placement calculation. This prevents all the placement pgs from peering with the same osds. Rev the osd client protocol with this change. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: enable readaheadSage Weil2009-10-16
| | | | | | Initialized bdi->ra_pages to enable readahead. Use 512KB default. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: move dirty caps code aroundSage Weil2009-10-15
| | | | | | Cleanup only. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: warn on allocation from msgpool with larger front_lenSage Weil2009-10-15
| | | | | | | | Pass the front_len we need when pulling a message off a msgpool, and WARN if it is greater than the pool's size. Then try to allocate a new message (to continue without failing). Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: correct subscribe_ack msgpool payload sizeSage Weil2009-10-15
| | | | | | | Defined a struct for the SUBSCRIBE_ACK, and use that to size the msgpool. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: flush dirty caps via the cap_dirty listSage Weil2009-10-15
| | | | | | | | | | | | | | | | | | Previously we were flushing dirty caps by passing an extra flag when traversing the delayed caps list. Besides being a bit ugly, that can also miss caps that are dirty but didn't result in a cap requeue: notably, mark_caps_dirty(). Separate the flushing into a separate helper, and traverse the cap_dirty list. This also brings i_dirty_item in line with i_dirty_caps: we are on the list IFF caps != 0. We carry an inode ref IFF dirty_caps|flushing_caps != 0. Lose the unused return value from __ceph_mark_caps_dirty(). Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: move generic flushing code into helperSage Weil2009-10-14
| | | | | | | Both callers of __mark_caps_flushing() do the same work; move it into the helper. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: initialize sb->s_bdi, bdi_unregister after kill_anon_superSage Weil2009-10-14
| | | | | | | Writeback doesn't work without the bdi set, and writeback on umount doesn't work if we unregister the bdi too early. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: convert encode/decode macros to inlinesSage Weil2009-10-14
| | | | | | | This avoids the fugly pass by reference and makes the code a bit easier to read. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: add version field to message headerSage Weil2009-10-13
| | | | | | | | This makes it easier for individual message types to indicate their particular encoding, and make future changes backward compatible. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: remove unused CEPH_MSG_{OSD,MDS}_GETMAPSage Weil2009-10-12
| | | | Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: ignore trailing data in monampSage Weil2009-10-12
| | | | | | This lets us extend the format more easily. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: add file layout validationSage Weil2009-10-09
| | | | | | This tracks updates to code shared with userspace. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: update to mon client protocol v15Sage Weil2009-10-09
| | | | | | | The mon request headers now include session_mon information that must be properly initialized. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: cancel osd requests before resending themSage Weil2009-10-09
| | | | | | | | This ensures we don't submit the same request twice if we are kicking a specific osd (as with an osd_reset), or when we hit a transient error and resend. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: reset osd session on fault, not peer_resetSage Weil2009-10-09
| | | | | | | The peer_reset just takes longer (until we reconnect and discover the osd dropped the session... which it will). Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: fail gracefully on corrupt osdmap (bad pg_temp mapping)Sage Weil2009-10-09
| | | | | | Return an error and report a corrupt map instead of crying BUG(). Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: revoke osd request message on request completionSage Weil2009-10-09
| | | | | | | | | If an osd has failed or returned and a request has been sent twice, it's possible to get a reply and unregister the request while the request message is queued for delivery. Since the message references the caller's page vector, we need to revoke it before completing. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: fix osd request submission raceSage Weil2009-10-09
| | | | | | | | | | | | The osd request submission path registers the request, drops and retakes the request_mutex, then sends it to the OSD. A racing kick_requests could sent it during that interval, causing the same msg to be sent twice and BUGing in the msgr. Fix by only sending the message if it hasn't been touched by other threads. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: renew mon subscription before it expiresSage Weil2009-10-08
| | | | | | | | Be conservative: renew subscription once half the interval has expired. Do not reuse sub expiration to control hunting. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: fix mdsmap decoding when multiple mds's are presentSage Weil2009-10-07
| | | | | | A misplaced sizeof() around namelen was throwing things off. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: gracefully avoid empty crush bucketsSage Weil2009-10-07
| | | | | | | This avoids a divide by zero when the input and/or map are malformed. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: include preferred_osd in file layout virtual xattrSage Weil2009-10-07
| | | | Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: show meaningful version on module loadSage Weil2009-10-07
| | | | | | | Kill the old git revision; print the ceph version and protocol versions instead. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: document shared files in READMESage Weil2009-10-06
| | | | | | Document files shared between kernel and user code trees. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: Kconfig, MakefileSage Weil2009-10-06
| | | | | | Kconfig options and Makefile. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: debugfsSage Weil2009-10-06
| | | | | | | | Basic state information is available via /sys/kernel/debug/ceph, including instances of the client, fsids, current monitor, mds and osd maps, outstanding server requests, and hooks to adjust debug levels. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: ioctlsSage Weil2009-10-06
| | | | | | | | A few Ceph ioctls for getting and setting file layout (striping) parameters, and learning the identity and network address of the OSD a given region of a file is stored on. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: nfs re-export supportSage Weil2009-10-06
| | | | | | | | Basic NFS re-export support is included. This mostly works. However, Ceph's MDS design precludes the ability to generate a (small) filehandle that will be valid forever, so this is of limited utility. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: message poolsSage Weil2009-10-06
| | | | | | | | | The msgpool is a basic mempool_t-like structure to preallocate messages we expect to receive over the wire. This ensures we have the necessary memory preallocated to process replies to requests, or to process unsolicited messages from various servers. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: messenger librarySage Weil2009-10-06
| | | | | | | | | | | A generic message passing library is used to communicate with all other components in the Ceph file system. The messenger library provides ordered, reliable delivery of messages between two nodes in the system. This implementation is based on TCP. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: snapshot managementSage Weil2009-10-06
| | | | | | | | | | | | | | | Ceph snapshots rely on client cooperation in determining which operations apply to which snapshots, and appropriately flushing snapshotted data and metadata back to the OSD and MDS clusters. Because snapshots apply to subtrees of the file hierarchy and can be created at any time, there is a fair bit of bookkeeping required to make this work. Portions of the hierarchy that belong to the same set of snapshots are described by a single 'snap realm.' A 'snap context' describes the set of snapshots that exist for a given file or directory. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: capability managementSage Weil2009-10-06
| | | | | | | | | | | | | | | | | | | | | | | | | | The Ceph metadata servers control client access to inode metadata and file data by issuing capabilities, granting clients permission to read and/or write both inode field and file data to OSDs (storage nodes). Each capability consists of a set of bits indicating which operations are allowed. If the client holds a *_SHARED cap, the client has a coherent value that can be safely read from the cached inode. In the case of a *_EXCL (exclusive) or FILE_WR capabilities, the client is allowed to change inode attributes (e.g., file size, mtime), note its dirty state in the ceph_cap, and asynchronously flush that metadata change to the MDS. In the event of a conflicting operation (perhaps by another client), the MDS will revoke the conflicting client capabilities. In order for a client to cache an inode, it must hold a capability with at least one MDS server. When inodes are released, release notifications are batched and periodically sent en masse to the MDS cluster to release server state. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: monitor clientSage Weil2009-10-06
| | | | | | | | | The monitor cluster is responsible for managing cluster membership and state. The monitor client handles what minimal interaction the Ceph client has with it: checking for updated versions of the MDS and OSD maps, getting statfs() information, and unmounting. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: CRUSH mapping algorithmSage Weil2009-10-06
| | | | | | | | | | | | | | | | | CRUSH is a pseudorandom data distribution function designed to map inputs onto a dynamic hierarchy of devices, while minimizing the extent to which inputs are remapped when the devices are added or removed. It includes some features that are specifically useful for storage, most notably the ability to map each input onto a set of N devices that are separated across administrator-defined failure domains. CRUSH is used to distribute data across the cluster of Ceph storage nodes. More information about CRUSH can be found in this paper: http://www.ssrc.ucsc.edu/Papers/weil-sc06.pdf Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: OSD clientSage Weil2009-10-06
| | | | | | | | | | | | | | | The OSD client is responsible for reading and writing data from/to the object storage pool. This includes determining where objects are stored in the cluster, and ensuring that requests are retried or redirected in the event of a node failure or data migration. If an OSD does not respond before a timeout expires, keepalive messages are sent across the lossless, ordered communications channel to ensure that any break in the TCP is discovered. If the session does reset, a reconnection is attempted and affected requests are resent (by the message transport layer). Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: MDS clientSage Weil2009-10-06
| | | | | | | | | | | | | | | | | | | | | | | | The MDS (metadata server) client is responsible for submitting requests to the MDS cluster and parsing the response. We decide which MDS to submit each request to based on cached information about the current partition of the directory hierarchy across the cluster. A stateful session is opened with each MDS before we submit requests to it, and a mutex is used to control the ordering of messages within each session. An MDS request may generate two responses. The first indicates the operation was a success and returns any result. A second reply is sent when the operation commits to disk. Note that locking on the MDS ensures that the results of updates are visible only to the updating client before the operation commits. Requests are linked to the containing directory so that an fsync will wait for them to commit. If an MDS fails and/or recovers, we resubmit requests as needed. We also reconnect existing capabilities to a recovering MDS to reestablish that shared session state. Old dentry leases are invalidated. Signed-off-by: Sage Weil <sage@newdream.net>
* ceph: address space operationsSage Weil2009-10-06
| | | | | | | | | | | | | | The ceph address space methods are concerned primarily with managing the dirty page accounting in the inode, which (among other things) must keep track of which snapshot context each page was dirtied in, and ensure that dirty data is written out to the OSDs in snapshort order. A writepage() on a page that is not currently writeable due to snapshot writeback ordering constraints is ignored (it was presumably called from kswapd). Signed-off-by: Sage Weil <sage@newdream.net>