Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / osd / osd_handler.c
index 1844e6c..97452a6 100644 (file)
@@ -85,7 +85,6 @@
 /* llo_* api support */
 #include <md_object.h>
 
-static const char MDT_XATTR_NAME[] = "trusted.lma";
 static const char dot[] = ".";
 static const char dotdot[] = "..";
 static const char remote_obj_dir[] = "REM_OBJ_DIR";
@@ -1263,7 +1262,11 @@ static int osd_inode_setattr(const struct lu_env *env,
                 struct iattr iattr;
                 int rc;
 
-                iattr.ia_valid = bits & (LA_UID | LA_GID);
+                iattr.ia_valid = 0;
+                if (bits & LA_UID)
+                        iattr.ia_valid |= ATTR_UID;
+                if (bits & LA_GID)
+                        iattr.ia_valid |= ATTR_GID;
                 iattr.ia_uid = attr->la_uid;
                 iattr.ia_gid = attr->la_gid;
                 osd_push_ctxt(env, save);
@@ -1718,7 +1721,7 @@ static int osd_ea_fid_set(const struct lu_env *env, struct dt_object *dt,
 
         return __osd_xattr_set(env, dt,
                                osd_buf_get(env, mdt_attrs, sizeof *mdt_attrs),
-                               MDT_XATTR_NAME, LU_XATTR_CREATE);
+                               XATTR_NAME_LMA, LU_XATTR_CREATE);
 
 }
 
@@ -1760,7 +1763,7 @@ static int osd_ea_fid_get(const struct lu_env *env, struct dentry *dentry,
 
         LASSERT(inode->i_op != NULL && inode->i_op->getxattr != NULL);
 
-        rc = inode->i_op->getxattr(dentry, MDT_XATTR_NAME, (void *)mdt_attrs,
+        rc = inode->i_op->getxattr(dentry, XATTR_NAME_LMA, (void *)mdt_attrs,
                                    sizeof *mdt_attrs);
 
         if (rc > 0) {
@@ -2076,6 +2079,16 @@ static int osd_object_sync(const struct lu_env *env, struct dt_object *dt)
         RETURN(rc);
 }
 
+static int osd_data_get(const struct lu_env *env, struct dt_object *dt,
+                        void **data)
+{
+        struct osd_object *obj = osd_dt_obj(dt);
+        ENTRY;
+
+        *data = (void *)obj->oo_inode;
+        RETURN(0);
+}
+
 static const struct dt_object_operations osd_obj_ops = {
         .do_read_lock    = osd_object_read_lock,
         .do_write_lock   = osd_object_write_lock,
@@ -2094,6 +2107,7 @@ static const struct dt_object_operations osd_obj_ops = {
         .do_xattr_list   = osd_xattr_list,
         .do_capa_get     = osd_capa_get,
         .do_object_sync  = osd_object_sync,
+        .do_data_get     = osd_data_get,
 };
 
 /**
@@ -2118,6 +2132,7 @@ static const struct dt_object_operations osd_obj_ea_ops = {
         .do_xattr_list   = osd_xattr_list,
         .do_capa_get     = osd_capa_get,
         .do_object_sync  = osd_object_sync,
+        .do_data_get     = osd_data_get,
 };
 
 /*
@@ -2757,7 +2772,9 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt,
         const struct lu_fid_pack *pack  = (const struct lu_fid_pack *)rec;
         const char               *name  = (const char *)key;
         struct osd_object        *child;
-
+#ifdef HAVE_QUOTA_SUPPORT
+        cfs_cap_t              save = current->cap_effective;
+#endif
         int rc;
 
         ENTRY;
@@ -2774,7 +2791,17 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt,
                 RETURN(rc);
         child = osd_object_find(env, dt, fid);
         if (!IS_ERR(child)) {
+#ifdef HAVE_QUOTA_SUPPORT
+                if (ignore_quota)
+                        current->cap_effective |= CFS_CAP_SYS_RESOURCE_MASK;
+                else
+                        current->cap_effective &= ~CFS_CAP_SYS_RESOURCE_MASK;
+#endif
                 rc = osd_ea_add_rec(env, obj, child, name, th);
+
+#ifdef HAVE_QUOTA_SUPPORT
+                current->cap_effective = save;
+#endif
                 osd_object_put(env, child);
         } else {
                 rc = PTR_ERR(child);
@@ -2976,7 +3003,7 @@ static struct dt_it *osd_it_ea_init(const struct lu_env *env,
         struct osd_thread_info  *info = osd_oti_get(env);
         struct osd_it_ea        *it   = &info->oti_it_ea;
         struct lu_object        *lo   = &dt->do_lu;
-        struct dentry           *obj_dentry = &info->oti_obj_dentry;
+        struct dentry           *obj_dentry = &info->oti_it_dentry;
         ENTRY;
         LASSERT(lu_object_exists(lo));
 
@@ -3597,7 +3624,7 @@ static int osd_fid_lookup(const struct lu_env *env,
          * fids. Unfortunately it is somewhat expensive (does a
          * cache-lookup). Disabling it for production/acceptance-testing.
          */
-        LASSERT(1 || fid_is_local(ldev->ld_site, fid));
+        LASSERT(1 || fid_is_local(env, ldev->ld_site, fid));
 
         ENTRY;
 
@@ -3784,6 +3811,7 @@ static int __init osd_mod_init(void)
 
 static void __exit osd_mod_exit(void)
 {
+        llo_local_obj_unregister(&llod_osd_rem_obj_dir);
         class_unregister_type(LUSTRE_OSD_NAME);
 }