libceph, rbd, ceph: "blacklist" -> "blocklist"
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
2e16929660
commit
0b98acd618
|
@ -163,14 +163,14 @@ Mount Options
|
||||||
to the default VFS implementation if this option is used.
|
to the default VFS implementation if this option is used.
|
||||||
|
|
||||||
recover_session=<no|clean>
|
recover_session=<no|clean>
|
||||||
Set auto reconnect mode in the case where the client is blacklisted. The
|
Set auto reconnect mode in the case where the client is blocklisted. The
|
||||||
available modes are "no" and "clean". The default is "no".
|
available modes are "no" and "clean". The default is "no".
|
||||||
|
|
||||||
* no: never attempt to reconnect when client detects that it has been
|
* no: never attempt to reconnect when client detects that it has been
|
||||||
blacklisted. Operations will generally fail after being blacklisted.
|
blocklisted. Operations will generally fail after being blocklisted.
|
||||||
|
|
||||||
* clean: client reconnects to the ceph cluster automatically when it
|
* clean: client reconnects to the ceph cluster automatically when it
|
||||||
detects that it has been blacklisted. During reconnect, client drops
|
detects that it has been blocklisted. During reconnect, client drops
|
||||||
dirty data/metadata, invalidates page caches and writable file handles.
|
dirty data/metadata, invalidates page caches and writable file handles.
|
||||||
After reconnect, file locks become stale because the MDS loses track
|
After reconnect, file locks become stale because the MDS loses track
|
||||||
of them. If an inode contains any stale file locks, read/write on the
|
of them. If an inode contains any stale file locks, read/write on the
|
||||||
|
|
|
@ -4010,10 +4010,10 @@ static int rbd_try_lock(struct rbd_device *rbd_dev)
|
||||||
rbd_warn(rbd_dev, "breaking header lock owned by %s%llu",
|
rbd_warn(rbd_dev, "breaking header lock owned by %s%llu",
|
||||||
ENTITY_NAME(lockers[0].id.name));
|
ENTITY_NAME(lockers[0].id.name));
|
||||||
|
|
||||||
ret = ceph_monc_blacklist_add(&client->monc,
|
ret = ceph_monc_blocklist_add(&client->monc,
|
||||||
&lockers[0].info.addr);
|
&lockers[0].info.addr);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
rbd_warn(rbd_dev, "blacklist of %s%llu failed: %d",
|
rbd_warn(rbd_dev, "blocklist of %s%llu failed: %d",
|
||||||
ENTITY_NAME(lockers[0].id.name), ret);
|
ENTITY_NAME(lockers[0].id.name), ret);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -4077,7 +4077,7 @@ static int rbd_try_acquire_lock(struct rbd_device *rbd_dev)
|
||||||
ret = rbd_try_lock(rbd_dev);
|
ret = rbd_try_lock(rbd_dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
rbd_warn(rbd_dev, "failed to lock header: %d", ret);
|
rbd_warn(rbd_dev, "failed to lock header: %d", ret);
|
||||||
if (ret == -EBLACKLISTED)
|
if (ret == -EBLOCKLISTED)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
ret = 1; /* request lock anyway */
|
ret = 1; /* request lock anyway */
|
||||||
|
@ -4613,7 +4613,7 @@ static void rbd_reregister_watch(struct work_struct *work)
|
||||||
ret = __rbd_register_watch(rbd_dev);
|
ret = __rbd_register_watch(rbd_dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
rbd_warn(rbd_dev, "failed to reregister watch: %d", ret);
|
rbd_warn(rbd_dev, "failed to reregister watch: %d", ret);
|
||||||
if (ret != -EBLACKLISTED && ret != -ENOENT) {
|
if (ret != -EBLOCKLISTED && ret != -ENOENT) {
|
||||||
queue_delayed_work(rbd_dev->task_wq,
|
queue_delayed_work(rbd_dev->task_wq,
|
||||||
&rbd_dev->watch_dwork,
|
&rbd_dev->watch_dwork,
|
||||||
RBD_RETRY_DELAY);
|
RBD_RETRY_DELAY);
|
||||||
|
|
|
@ -271,8 +271,8 @@ static int ceph_do_readpage(struct file *filp, struct page *page)
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
SetPageError(page);
|
SetPageError(page);
|
||||||
ceph_fscache_readpage_cancel(inode, page);
|
ceph_fscache_readpage_cancel(inode, page);
|
||||||
if (err == -EBLACKLISTED)
|
if (err == -EBLOCKLISTED)
|
||||||
fsc->blacklisted = true;
|
fsc->blocklisted = true;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (err < PAGE_SIZE)
|
if (err < PAGE_SIZE)
|
||||||
|
@ -312,8 +312,8 @@ static void finish_read(struct ceph_osd_request *req)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dout("finish_read %p req %p rc %d bytes %d\n", inode, req, rc, bytes);
|
dout("finish_read %p req %p rc %d bytes %d\n", inode, req, rc, bytes);
|
||||||
if (rc == -EBLACKLISTED)
|
if (rc == -EBLOCKLISTED)
|
||||||
ceph_inode_to_client(inode)->blacklisted = true;
|
ceph_inode_to_client(inode)->blocklisted = true;
|
||||||
|
|
||||||
/* unlock all pages, zeroing any data we didn't read */
|
/* unlock all pages, zeroing any data we didn't read */
|
||||||
osd_data = osd_req_op_extent_osd_data(req, 0);
|
osd_data = osd_req_op_extent_osd_data(req, 0);
|
||||||
|
@ -737,8 +737,8 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
|
||||||
end_page_writeback(page);
|
end_page_writeback(page);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
if (err == -EBLACKLISTED)
|
if (err == -EBLOCKLISTED)
|
||||||
fsc->blacklisted = true;
|
fsc->blocklisted = true;
|
||||||
dout("writepage setting page/mapping error %d %p\n",
|
dout("writepage setting page/mapping error %d %p\n",
|
||||||
err, page);
|
err, page);
|
||||||
mapping_set_error(&inode->i_data, err);
|
mapping_set_error(&inode->i_data, err);
|
||||||
|
@ -801,8 +801,8 @@ static void writepages_finish(struct ceph_osd_request *req)
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
mapping_set_error(mapping, rc);
|
mapping_set_error(mapping, rc);
|
||||||
ceph_set_error_write(ci);
|
ceph_set_error_write(ci);
|
||||||
if (rc == -EBLACKLISTED)
|
if (rc == -EBLOCKLISTED)
|
||||||
fsc->blacklisted = true;
|
fsc->blocklisted = true;
|
||||||
} else {
|
} else {
|
||||||
ceph_clear_error_write(ci);
|
ceph_clear_error_write(ci);
|
||||||
}
|
}
|
||||||
|
@ -2038,16 +2038,16 @@ static int __ceph_pool_perm_get(struct ceph_inode_info *ci,
|
||||||
if (err >= 0 || err == -ENOENT)
|
if (err >= 0 || err == -ENOENT)
|
||||||
have |= POOL_READ;
|
have |= POOL_READ;
|
||||||
else if (err != -EPERM) {
|
else if (err != -EPERM) {
|
||||||
if (err == -EBLACKLISTED)
|
if (err == -EBLOCKLISTED)
|
||||||
fsc->blacklisted = true;
|
fsc->blocklisted = true;
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err2 == 0 || err2 == -EEXIST)
|
if (err2 == 0 || err2 == -EEXIST)
|
||||||
have |= POOL_WRITE;
|
have |= POOL_WRITE;
|
||||||
else if (err2 != -EPERM) {
|
else if (err2 != -EPERM) {
|
||||||
if (err2 == -EBLACKLISTED)
|
if (err2 == -EBLOCKLISTED)
|
||||||
fsc->blacklisted = true;
|
fsc->blocklisted = true;
|
||||||
err = err2;
|
err = err2;
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
|
@ -933,8 +933,8 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *to,
|
||||||
ceph_release_page_vector(pages, num_pages);
|
ceph_release_page_vector(pages, num_pages);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (ret == -EBLACKLISTED)
|
if (ret == -EBLOCKLISTED)
|
||||||
fsc->blacklisted = true;
|
fsc->blocklisted = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3303,7 +3303,7 @@ bad:
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __decode_session_metadata(void **p, void *end,
|
static int __decode_session_metadata(void **p, void *end,
|
||||||
bool *blacklisted)
|
bool *blocklisted)
|
||||||
{
|
{
|
||||||
/* map<string,string> */
|
/* map<string,string> */
|
||||||
u32 n;
|
u32 n;
|
||||||
|
@ -3318,7 +3318,7 @@ static int __decode_session_metadata(void **p, void *end,
|
||||||
ceph_decode_32_safe(p, end, len, bad);
|
ceph_decode_32_safe(p, end, len, bad);
|
||||||
ceph_decode_need(p, end, len, bad);
|
ceph_decode_need(p, end, len, bad);
|
||||||
if (err_str && strnstr(*p, "blacklisted", len))
|
if (err_str && strnstr(*p, "blacklisted", len))
|
||||||
*blacklisted = true;
|
*blocklisted = true;
|
||||||
*p += len;
|
*p += len;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3341,7 +3341,7 @@ static void handle_session(struct ceph_mds_session *session,
|
||||||
u32 op;
|
u32 op;
|
||||||
u64 seq, features = 0;
|
u64 seq, features = 0;
|
||||||
int wake = 0;
|
int wake = 0;
|
||||||
bool blacklisted = false;
|
bool blocklisted = false;
|
||||||
|
|
||||||
/* decode */
|
/* decode */
|
||||||
ceph_decode_need(&p, end, sizeof(*h), bad);
|
ceph_decode_need(&p, end, sizeof(*h), bad);
|
||||||
|
@ -3354,7 +3354,7 @@ static void handle_session(struct ceph_mds_session *session,
|
||||||
if (msg_version >= 3) {
|
if (msg_version >= 3) {
|
||||||
u32 len;
|
u32 len;
|
||||||
/* version >= 2, metadata */
|
/* version >= 2, metadata */
|
||||||
if (__decode_session_metadata(&p, end, &blacklisted) < 0)
|
if (__decode_session_metadata(&p, end, &blocklisted) < 0)
|
||||||
goto bad;
|
goto bad;
|
||||||
/* version >= 3, feature bits */
|
/* version >= 3, feature bits */
|
||||||
ceph_decode_32_safe(&p, end, len, bad);
|
ceph_decode_32_safe(&p, end, len, bad);
|
||||||
|
@ -3445,8 +3445,8 @@ static void handle_session(struct ceph_mds_session *session,
|
||||||
session->s_state = CEPH_MDS_SESSION_REJECTED;
|
session->s_state = CEPH_MDS_SESSION_REJECTED;
|
||||||
cleanup_session_requests(mdsc, session);
|
cleanup_session_requests(mdsc, session);
|
||||||
remove_session_caps(session);
|
remove_session_caps(session);
|
||||||
if (blacklisted)
|
if (blocklisted)
|
||||||
mdsc->fsc->blacklisted = true;
|
mdsc->fsc->blocklisted = true;
|
||||||
wake = 2; /* for good measure */
|
wake = 2; /* for good measure */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -4367,14 +4367,14 @@ static void maybe_recover_session(struct ceph_mds_client *mdsc)
|
||||||
if (READ_ONCE(fsc->mount_state) != CEPH_MOUNT_MOUNTED)
|
if (READ_ONCE(fsc->mount_state) != CEPH_MOUNT_MOUNTED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!READ_ONCE(fsc->blacklisted))
|
if (!READ_ONCE(fsc->blocklisted))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (fsc->last_auto_reconnect &&
|
if (fsc->last_auto_reconnect &&
|
||||||
time_before(jiffies, fsc->last_auto_reconnect + HZ * 60 * 30))
|
time_before(jiffies, fsc->last_auto_reconnect + HZ * 60 * 30))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pr_info("auto reconnect after blacklisted\n");
|
pr_info("auto reconnect after blocklisted\n");
|
||||||
fsc->last_auto_reconnect = jiffies;
|
fsc->last_auto_reconnect = jiffies;
|
||||||
ceph_force_reconnect(fsc->sb);
|
ceph_force_reconnect(fsc->sb);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1241,13 +1241,13 @@ int ceph_force_reconnect(struct super_block *sb)
|
||||||
* see remove_session_caps_cb() */
|
* see remove_session_caps_cb() */
|
||||||
flush_workqueue(fsc->inode_wq);
|
flush_workqueue(fsc->inode_wq);
|
||||||
|
|
||||||
/* In case that we were blacklisted. This also reset
|
/* In case that we were blocklisted. This also reset
|
||||||
* all mon/osd connections */
|
* all mon/osd connections */
|
||||||
ceph_reset_client_addr(fsc->client);
|
ceph_reset_client_addr(fsc->client);
|
||||||
|
|
||||||
ceph_osdc_clear_abort_err(&fsc->client->osdc);
|
ceph_osdc_clear_abort_err(&fsc->client->osdc);
|
||||||
|
|
||||||
fsc->blacklisted = false;
|
fsc->blocklisted = false;
|
||||||
fsc->mount_state = CEPH_MOUNT_MOUNTED;
|
fsc->mount_state = CEPH_MOUNT_MOUNTED;
|
||||||
|
|
||||||
if (sb->s_root) {
|
if (sb->s_root) {
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#define CEPH_BLOCK_SHIFT 22 /* 4 MB */
|
#define CEPH_BLOCK_SHIFT 22 /* 4 MB */
|
||||||
#define CEPH_BLOCK (1 << CEPH_BLOCK_SHIFT)
|
#define CEPH_BLOCK (1 << CEPH_BLOCK_SHIFT)
|
||||||
|
|
||||||
#define CEPH_MOUNT_OPT_CLEANRECOVER (1<<1) /* auto reonnect (clean mode) after blacklisted */
|
#define CEPH_MOUNT_OPT_CLEANRECOVER (1<<1) /* auto reonnect (clean mode) after blocklisted */
|
||||||
#define CEPH_MOUNT_OPT_DIRSTAT (1<<4) /* `cat dirname` for stats */
|
#define CEPH_MOUNT_OPT_DIRSTAT (1<<4) /* `cat dirname` for stats */
|
||||||
#define CEPH_MOUNT_OPT_RBYTES (1<<5) /* dir st_bytes = rbytes */
|
#define CEPH_MOUNT_OPT_RBYTES (1<<5) /* dir st_bytes = rbytes */
|
||||||
#define CEPH_MOUNT_OPT_NOASYNCREADDIR (1<<7) /* no dcache readdir */
|
#define CEPH_MOUNT_OPT_NOASYNCREADDIR (1<<7) /* no dcache readdir */
|
||||||
|
@ -109,7 +109,7 @@ struct ceph_fs_client {
|
||||||
unsigned long mount_state;
|
unsigned long mount_state;
|
||||||
|
|
||||||
unsigned long last_auto_reconnect;
|
unsigned long last_auto_reconnect;
|
||||||
bool blacklisted;
|
bool blocklisted;
|
||||||
|
|
||||||
bool have_copy_from2;
|
bool have_copy_from2;
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,7 @@ int ceph_monc_get_version(struct ceph_mon_client *monc, const char *what,
|
||||||
int ceph_monc_get_version_async(struct ceph_mon_client *monc, const char *what,
|
int ceph_monc_get_version_async(struct ceph_mon_client *monc, const char *what,
|
||||||
ceph_monc_callback_t cb, u64 private_data);
|
ceph_monc_callback_t cb, u64 private_data);
|
||||||
|
|
||||||
int ceph_monc_blacklist_add(struct ceph_mon_client *monc,
|
int ceph_monc_blocklist_add(struct ceph_mon_client *monc,
|
||||||
struct ceph_entity_addr *client_addr);
|
struct ceph_entity_addr *client_addr);
|
||||||
|
|
||||||
extern int ceph_monc_open_session(struct ceph_mon_client *monc);
|
extern int ceph_monc_open_session(struct ceph_mon_client *monc);
|
||||||
|
|
|
@ -424,7 +424,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define EOLDSNAPC ERESTART /* ORDERSNAP flag set; writer has old snapc*/
|
#define EOLDSNAPC ERESTART /* ORDERSNAP flag set; writer has old snapc*/
|
||||||
#define EBLACKLISTED ESHUTDOWN /* blacklisted */
|
#define EBLOCKLISTED ESHUTDOWN /* blocklisted */
|
||||||
|
|
||||||
/* xattr comparison */
|
/* xattr comparison */
|
||||||
enum {
|
enum {
|
||||||
|
|
|
@ -896,7 +896,7 @@ bad:
|
||||||
ceph_msg_dump(msg);
|
ceph_msg_dump(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ceph_monc_blacklist_add(struct ceph_mon_client *monc,
|
int ceph_monc_blocklist_add(struct ceph_mon_client *monc,
|
||||||
struct ceph_entity_addr *client_addr)
|
struct ceph_entity_addr *client_addr)
|
||||||
{
|
{
|
||||||
struct ceph_mon_generic_request *req;
|
struct ceph_mon_generic_request *req;
|
||||||
|
@ -936,9 +936,9 @@ int ceph_monc_blacklist_add(struct ceph_mon_client *monc,
|
||||||
ret = wait_generic_request(req);
|
ret = wait_generic_request(req);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
/*
|
/*
|
||||||
* Make sure we have the osdmap that includes the blacklist
|
* Make sure we have the osdmap that includes the blocklist
|
||||||
* entry. This is needed to ensure that the OSDs pick up the
|
* entry. This is needed to ensure that the OSDs pick up the
|
||||||
* new blacklist before processing any future requests from
|
* new blocklist before processing any future requests from
|
||||||
* this client.
|
* this client.
|
||||||
*/
|
*/
|
||||||
ret = ceph_wait_for_latest_osdmap(monc->client, 0);
|
ret = ceph_wait_for_latest_osdmap(monc->client, 0);
|
||||||
|
@ -947,7 +947,7 @@ out:
|
||||||
put_generic_request(req);
|
put_generic_request(req);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ceph_monc_blacklist_add);
|
EXPORT_SYMBOL(ceph_monc_blocklist_add);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Resend pending generic requests.
|
* Resend pending generic requests.
|
||||||
|
|
Loading…
Reference in New Issue