| 17719 | } |
| 17720 | |
| 17721 | int Client::ll_delegation(Fh *fh, unsigned cmd, ceph_deleg_cb_t cb, void *priv) |
| 17722 | { |
| 17723 | int ret = -EINVAL; |
| 17724 | |
| 17725 | RWRef_t mref_reader(mount_state, CLIENT_MOUNTING); |
| 17726 | if (!mref_reader.is_state_satisfied()) |
| 17727 | return -ENOTCONN; |
| 17728 | |
| 17729 | std::scoped_lock lock(client_lock); |
| 17730 | |
| 17731 | Inode *inode = fh->inode.get(); |
| 17732 | |
| 17733 | switch(cmd) { |
| 17734 | case CEPH_DELEGATION_NONE: |
| 17735 | inode->unset_deleg(fh); |
| 17736 | ret = 0; |
| 17737 | break; |
| 17738 | default: |
| 17739 | try { |
| 17740 | ret = inode->set_deleg(fh, cmd, cb, priv); |
| 17741 | } catch (std::bad_alloc&) { |
| 17742 | ret = -ENOMEM; |
| 17743 | } |
| 17744 | break; |
| 17745 | } |
| 17746 | return ret; |
| 17747 | } |
| 17748 | |
| 17749 | class C_Client_RequestInterrupt : public Context { |
| 17750 | private: |
no test coverage detected