/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2011 Whamcloud, Inc.
+ *
*/
/*
* This file is part of Lustre, http://www.lustre.org/
if (ia_valid & ATTR_SIZE)
attr->ia_valid |= ATTR_SIZE;
- if ((ia_valid & ATTR_SIZE) |
- ((ia_valid | ATTR_ATIME | ATTR_ATIME_SET) &&
- LTIME_S(attr->ia_atime) < LTIME_S(attr->ia_ctime)) ||
- ((ia_valid | ATTR_MTIME | ATTR_MTIME_SET) &&
- LTIME_S(attr->ia_mtime) < LTIME_S(attr->ia_ctime)))
- /* perform truncate and setting mtime/atime to past under PW
- * 0:EOF extent lock (new_size:EOF for truncate) */
+ if (ia_valid & (ATTR_SIZE |
+ ATTR_ATIME | ATTR_ATIME_SET |
+ ATTR_MTIME | ATTR_MTIME_SET))
+ /* on truncate and utimes send attributes to osts, setting
+ * mtime/atime to past will be performed under PW 0:EOF extent
+ * lock (new_size:EOF for truncate)
+ * it may seem excessive to send mtime/atime updates to osts
+ * when not setting times to past, but it is necessary due to
+ * possible time de-synchronization */
rc = cl_setattr_ost(inode, attr, NULL);
EXIT;
out:
struct lustre_md md;
class_uuid_t uuid;
struct config_llog_instance cfg = {0, };
- char ll_instance[sizeof(sbi) * 2 + 1];
struct lustre_profile *lprof;
char *zconf_mgsnid, *zconf_profile;
char *osc = NULL, *mdc = NULL;
int async = 1, err = -EINVAL;
struct obd_connect_data ocd = {0,};
struct md_op_data op_data = {{0}};
+ /* %p for void* in printf needs 16+2 characters: 0xffffffffffffffff */
+ const int instlen = sizeof(cfg.cfg_instance) * 2 + 2;
ENTRY;
/* generate a string unique to this super, let's try
the address of the super itself.*/
- sprintf(ll_instance, "%p", sbi);
+ cfg.cfg_instance = sbi;
/* retrive & parse config log */
- cfg.cfg_instance = ll_instance;
cfg.cfg_uuid = sbi->ll_sb_uuid;
err = liblustre_process_log(&cfg, zconf_mgsnid, zconf_profile, 1);
if (err < 0) {
CERROR("No profile found: %s\n", zconf_profile);
GOTO(out_free, err = -EINVAL);
}
- OBD_ALLOC(osc, strlen(lprof->lp_dt) + strlen(ll_instance) + 2);
- sprintf(osc, "%s-%s", lprof->lp_dt, ll_instance);
+ OBD_ALLOC(osc, strlen(lprof->lp_dt) + instlen + 2);
+ sprintf(osc, "%s-%p", lprof->lp_dt, cfg.cfg_instance);
- OBD_ALLOC(mdc, strlen(lprof->lp_md) + strlen(ll_instance) + 2);
- sprintf(mdc, "%s-%s", lprof->lp_md, ll_instance);
+ OBD_ALLOC(mdc, strlen(lprof->lp_md) + instlen + 2);
+ sprintf(mdc, "%s-%p", lprof->lp_md, cfg.cfg_instance);
if (!osc) {
CERROR("no osc\n");
ptlrpc_req_finished(request);
CDEBUG(D_SUPER, "LibLustre: %s mounted successfully!\n", source);
- liblustre_wait_idle();
-
- return 0;
+ err = 0;
+ goto out_free;
out_inode:
_sysio_i_gone(root);
obd_disconnect(sbi->ll_md_exp);
out_free:
if (osc)
- OBD_FREE(osc, strlen(osc) + 1);
+ OBD_FREE(osc, strlen(lprof->lp_dt) + instlen + 2);
if (mdc)
- OBD_FREE(mdc, strlen(mdc) + 1);
+ OBD_FREE(mdc, strlen(lprof->lp_md) + instlen + 2);
OBD_FREE(sbi, sizeof(*sbi));
liblustre_wait_idle();
return err;