mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 03:10:12 +00:00
![Milind Changire](/assets/img/avatar_default.png)
Problem: Some directory vxattrs (e.g. ceph.dir.pin.random) are governed by information that isn't necessarily shared with the client. Add support for the new GETVXATTR operation, which allows the client to query the MDS directly for vxattrs. When the client is queried for a vxattr that doesn't have a special handler, have it issue a GETVXATTR to the MDS directly. Solution: Adds new getvxattr op to fetch ceph.dir.pin*, ceph.dir.layout* and ceph.file.layout* vxattrs. If the entire layout for a dir or a file is being set, then it is expected that the layout be set in standard JSON format. Individual field value retrieval is not wrapped in JSON. The JSON format also applies while setting the vxattr if the entire layout is being set in one go. As a temporary measure, setting a vxattr can also be done in the old format. The old format will be deprecated in the future. URL: https://tracker.ceph.com/issues/51062 Signed-off-by: Milind Changire <mchangir@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
130 lines
4.3 KiB
C
130 lines
4.3 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Ceph fs string constants
|
|
*/
|
|
#include <linux/module.h>
|
|
#include <linux/ceph/types.h>
|
|
|
|
|
|
const char *ceph_mds_state_name(int s)
|
|
{
|
|
switch (s) {
|
|
/* down and out */
|
|
case CEPH_MDS_STATE_DNE: return "down:dne";
|
|
case CEPH_MDS_STATE_STOPPED: return "down:stopped";
|
|
/* up and out */
|
|
case CEPH_MDS_STATE_BOOT: return "up:boot";
|
|
case CEPH_MDS_STATE_STANDBY: return "up:standby";
|
|
case CEPH_MDS_STATE_STANDBY_REPLAY: return "up:standby-replay";
|
|
case CEPH_MDS_STATE_REPLAYONCE: return "up:oneshot-replay";
|
|
case CEPH_MDS_STATE_CREATING: return "up:creating";
|
|
case CEPH_MDS_STATE_STARTING: return "up:starting";
|
|
/* up and in */
|
|
case CEPH_MDS_STATE_REPLAY: return "up:replay";
|
|
case CEPH_MDS_STATE_RESOLVE: return "up:resolve";
|
|
case CEPH_MDS_STATE_RECONNECT: return "up:reconnect";
|
|
case CEPH_MDS_STATE_REJOIN: return "up:rejoin";
|
|
case CEPH_MDS_STATE_CLIENTREPLAY: return "up:clientreplay";
|
|
case CEPH_MDS_STATE_ACTIVE: return "up:active";
|
|
case CEPH_MDS_STATE_STOPPING: return "up:stopping";
|
|
}
|
|
return "???";
|
|
}
|
|
|
|
const char *ceph_session_op_name(int op)
|
|
{
|
|
switch (op) {
|
|
case CEPH_SESSION_REQUEST_OPEN: return "request_open";
|
|
case CEPH_SESSION_OPEN: return "open";
|
|
case CEPH_SESSION_REQUEST_CLOSE: return "request_close";
|
|
case CEPH_SESSION_CLOSE: return "close";
|
|
case CEPH_SESSION_REQUEST_RENEWCAPS: return "request_renewcaps";
|
|
case CEPH_SESSION_RENEWCAPS: return "renewcaps";
|
|
case CEPH_SESSION_STALE: return "stale";
|
|
case CEPH_SESSION_RECALL_STATE: return "recall_state";
|
|
case CEPH_SESSION_FLUSHMSG: return "flushmsg";
|
|
case CEPH_SESSION_FLUSHMSG_ACK: return "flushmsg_ack";
|
|
case CEPH_SESSION_FORCE_RO: return "force_ro";
|
|
case CEPH_SESSION_REJECT: return "reject";
|
|
case CEPH_SESSION_REQUEST_FLUSH_MDLOG: return "flush_mdlog";
|
|
}
|
|
return "???";
|
|
}
|
|
|
|
const char *ceph_mds_op_name(int op)
|
|
{
|
|
switch (op) {
|
|
case CEPH_MDS_OP_LOOKUP: return "lookup";
|
|
case CEPH_MDS_OP_LOOKUPHASH: return "lookuphash";
|
|
case CEPH_MDS_OP_LOOKUPPARENT: return "lookupparent";
|
|
case CEPH_MDS_OP_LOOKUPINO: return "lookupino";
|
|
case CEPH_MDS_OP_LOOKUPNAME: return "lookupname";
|
|
case CEPH_MDS_OP_GETATTR: return "getattr";
|
|
case CEPH_MDS_OP_GETVXATTR: return "getvxattr";
|
|
case CEPH_MDS_OP_SETXATTR: return "setxattr";
|
|
case CEPH_MDS_OP_SETATTR: return "setattr";
|
|
case CEPH_MDS_OP_RMXATTR: return "rmxattr";
|
|
case CEPH_MDS_OP_SETLAYOUT: return "setlayou";
|
|
case CEPH_MDS_OP_SETDIRLAYOUT: return "setdirlayout";
|
|
case CEPH_MDS_OP_READDIR: return "readdir";
|
|
case CEPH_MDS_OP_MKNOD: return "mknod";
|
|
case CEPH_MDS_OP_LINK: return "link";
|
|
case CEPH_MDS_OP_UNLINK: return "unlink";
|
|
case CEPH_MDS_OP_RENAME: return "rename";
|
|
case CEPH_MDS_OP_MKDIR: return "mkdir";
|
|
case CEPH_MDS_OP_RMDIR: return "rmdir";
|
|
case CEPH_MDS_OP_SYMLINK: return "symlink";
|
|
case CEPH_MDS_OP_CREATE: return "create";
|
|
case CEPH_MDS_OP_OPEN: return "open";
|
|
case CEPH_MDS_OP_LOOKUPSNAP: return "lookupsnap";
|
|
case CEPH_MDS_OP_LSSNAP: return "lssnap";
|
|
case CEPH_MDS_OP_MKSNAP: return "mksnap";
|
|
case CEPH_MDS_OP_RMSNAP: return "rmsnap";
|
|
case CEPH_MDS_OP_RENAMESNAP: return "renamesnap";
|
|
case CEPH_MDS_OP_SETFILELOCK: return "setfilelock";
|
|
case CEPH_MDS_OP_GETFILELOCK: return "getfilelock";
|
|
}
|
|
return "???";
|
|
}
|
|
|
|
const char *ceph_cap_op_name(int op)
|
|
{
|
|
switch (op) {
|
|
case CEPH_CAP_OP_GRANT: return "grant";
|
|
case CEPH_CAP_OP_REVOKE: return "revoke";
|
|
case CEPH_CAP_OP_TRUNC: return "trunc";
|
|
case CEPH_CAP_OP_EXPORT: return "export";
|
|
case CEPH_CAP_OP_IMPORT: return "import";
|
|
case CEPH_CAP_OP_UPDATE: return "update";
|
|
case CEPH_CAP_OP_DROP: return "drop";
|
|
case CEPH_CAP_OP_FLUSH: return "flush";
|
|
case CEPH_CAP_OP_FLUSH_ACK: return "flush_ack";
|
|
case CEPH_CAP_OP_FLUSHSNAP: return "flushsnap";
|
|
case CEPH_CAP_OP_FLUSHSNAP_ACK: return "flushsnap_ack";
|
|
case CEPH_CAP_OP_RELEASE: return "release";
|
|
case CEPH_CAP_OP_RENEW: return "renew";
|
|
}
|
|
return "???";
|
|
}
|
|
|
|
const char *ceph_lease_op_name(int o)
|
|
{
|
|
switch (o) {
|
|
case CEPH_MDS_LEASE_REVOKE: return "revoke";
|
|
case CEPH_MDS_LEASE_RELEASE: return "release";
|
|
case CEPH_MDS_LEASE_RENEW: return "renew";
|
|
case CEPH_MDS_LEASE_REVOKE_ACK: return "revoke_ack";
|
|
}
|
|
return "???";
|
|
}
|
|
|
|
const char *ceph_snap_op_name(int o)
|
|
{
|
|
switch (o) {
|
|
case CEPH_SNAP_OP_UPDATE: return "update";
|
|
case CEPH_SNAP_OP_CREATE: return "create";
|
|
case CEPH_SNAP_OP_DESTROY: return "destroy";
|
|
case CEPH_SNAP_OP_SPLIT: return "split";
|
|
}
|
|
return "???";
|
|
}
|