/* make sure it's a valid data pool */
mutex_lock(&mdsc->mutex);
err = -EINVAL; for (i = 0; i < mdsc->mdsmap->m_num_data_pg_pools; i++) if (mdsc->mdsmap->m_data_pg_pools[i] == l->data_pool) {
err = 0; break;
}
mutex_unlock(&mdsc->mutex); if (err) return err;
/* * Set a layout policy on a directory inode. All items in the tree * rooted at this inode will inherit this layout on creation, * (It doesn't apply retroactively ) * unless a subdirectory has its own layout policy.
*/ staticlong ceph_ioctl_set_layout_policy (struct file *file, void __user *arg)
{ struct inode *inode = file_inode(file); struct ceph_mds_request *req; struct ceph_ioctl_layout l; int err; struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
/* copy and validate */ if (copy_from_user(&l, arg, sizeof(l))) return -EFAULT;
err = __validate_layout(mdsc, &l); if (err) return err;
/* encrypted directories can't have striped layout */ if (ci->i_layout.stripe_count > 1) return -EINVAL;
ret = vet_mds_for_fscrypt(file); if (ret) return ret;
/* * Ensure we hold these caps so that we _know_ that the rstats check * in the empty_dir check is reliable.
*/
ret = ceph_get_caps(file, CEPH_CAP_FILE_SHARED, 0, -1, &got); if (ret) return ret;
ret = fscrypt_ioctl_set_policy(file, (constvoid __user *)arg); if (got)
ceph_put_cap_refs(ci, got);
return ret;
}
staticconstchar *ceph_ioctl_cmd_name(constunsignedint cmd)
{ switch (cmd) { case CEPH_IOC_GET_LAYOUT: return"get_layout"; case CEPH_IOC_SET_LAYOUT: return"set_layout"; case CEPH_IOC_SET_LAYOUT_POLICY: return"set_layout_policy"; case CEPH_IOC_GET_DATALOC: return"get_dataloc"; case CEPH_IOC_LAZYIO: return"lazyio"; case CEPH_IOC_SYNCIO: return"syncio"; case FS_IOC_SET_ENCRYPTION_POLICY: return"set_encryption_policy"; case FS_IOC_GET_ENCRYPTION_POLICY: return"get_encryption_policy"; case FS_IOC_GET_ENCRYPTION_POLICY_EX: return"get_encryption_policy_ex"; case FS_IOC_ADD_ENCRYPTION_KEY: return"add_encryption_key"; case FS_IOC_REMOVE_ENCRYPTION_KEY: return"remove_encryption_key"; case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS: return"remove_encryption_key_all_users"; case FS_IOC_GET_ENCRYPTION_KEY_STATUS: return"get_encryption_key_status"; case FS_IOC_GET_ENCRYPTION_NONCE: return"get_encryption_nonce"; default: return"unknown";
}
}
case CEPH_IOC_SET_LAYOUT: return ceph_ioctl_set_layout(file, (void __user *)arg);
case CEPH_IOC_SET_LAYOUT_POLICY: return ceph_ioctl_set_layout_policy(file, (void __user *)arg);
case CEPH_IOC_GET_DATALOC: return ceph_ioctl_get_dataloc(file, (void __user *)arg);
case CEPH_IOC_LAZYIO: return ceph_ioctl_lazyio(file);
case CEPH_IOC_SYNCIO: return ceph_ioctl_syncio(file);
case FS_IOC_SET_ENCRYPTION_POLICY: return ceph_set_encryption_policy(file, arg);
case FS_IOC_GET_ENCRYPTION_POLICY:
ret = vet_mds_for_fscrypt(file); if (ret) return ret; return fscrypt_ioctl_get_policy(file, (void __user *)arg);
case FS_IOC_GET_ENCRYPTION_POLICY_EX:
ret = vet_mds_for_fscrypt(file); if (ret) return ret; return fscrypt_ioctl_get_policy_ex(file, (void __user *)arg);
case FS_IOC_ADD_ENCRYPTION_KEY:
ret = vet_mds_for_fscrypt(file); if (ret) return ret; return fscrypt_ioctl_add_key(file, (void __user *)arg);
case FS_IOC_REMOVE_ENCRYPTION_KEY: return fscrypt_ioctl_remove_key(file, (void __user *)arg);
case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS: return fscrypt_ioctl_remove_key_all_users(file,
(void __user *)arg);
case FS_IOC_GET_ENCRYPTION_KEY_STATUS: return fscrypt_ioctl_get_key_status(file, (void __user *)arg);
case FS_IOC_GET_ENCRYPTION_NONCE:
ret = vet_mds_for_fscrypt(file); if (ret) return ret; return fscrypt_ioctl_get_nonce(file, (void __user *)arg);
}
return -ENOTTY;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.