Whamcloud - gitweb
b=21433 trace the processing for "no quota" flag on client-side
authorFan Yong <Yong.Fan@Sun.COM>
Tue, 2 Feb 2010 10:54:58 +0000 (18:54 +0800)
committerRobert Read <rread@sun.com>
Wed, 3 Feb 2010 19:54:38 +0000 (11:54 -0800)
Trace the processing for "no quota" flag on client-side.

i=robert
i=landen

lustre/osc/osc_request.c
lustre/quota/quota_interface.c

index 94998c0..68452b0 100644 (file)
@@ -1477,24 +1477,31 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc)
         __u32 client_cksum = 0;
         ENTRY;
 
         __u32 client_cksum = 0;
         ENTRY;
 
-        if (rc < 0 && rc != -EDQUOT)
+        if (rc < 0 && rc != -EDQUOT) {
+                DEBUG_REQ(D_INFO, req, "Failed request with rc = %d\n", rc);
                 RETURN(rc);
                 RETURN(rc);
+        }
 
         LASSERTF(req->rq_repmsg != NULL, "rc = %d\n", rc);
         body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY);
         if (body == NULL) {
 
         LASSERTF(req->rq_repmsg != NULL, "rc = %d\n", rc);
         body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY);
         if (body == NULL) {
-                CDEBUG(D_INFO, "Can't unpack body\n");
+                DEBUG_REQ(D_INFO, req, "Can't unpack body\n");
                 RETURN(-EPROTO);
         }
 
                 RETURN(-EPROTO);
         }
 
+#ifdef HAVE_QUOTA_SUPPORT
         /* set/clear over quota flag for a uid/gid */
         if (lustre_msg_get_opc(req->rq_reqmsg) == OST_WRITE &&
             body->oa.o_valid & (OBD_MD_FLUSRQUOTA | OBD_MD_FLGRPQUOTA)) {
                 unsigned int qid[MAXQUOTAS] = { body->oa.o_uid, body->oa.o_gid };
 
         /* set/clear over quota flag for a uid/gid */
         if (lustre_msg_get_opc(req->rq_reqmsg) == OST_WRITE &&
             body->oa.o_valid & (OBD_MD_FLUSRQUOTA | OBD_MD_FLGRPQUOTA)) {
                 unsigned int qid[MAXQUOTAS] = { body->oa.o_uid, body->oa.o_gid };
 
+                CDEBUG(D_QUOTA, "setdq for [%u %u] with valid %llx, flags %x\n",
+                       body->oa.o_uid, body->oa.o_gid, body->oa.o_valid,
+                       body->oa.o_flags);
                 lquota_setdq(quota_interface, cli, qid, body->oa.o_valid,
                              body->oa.o_flags);
         }
                 lquota_setdq(quota_interface, cli, qid, body->oa.o_valid,
                              body->oa.o_flags);
         }
+#endif
 
         if (rc < 0)
                 RETURN(rc);
 
         if (rc < 0)
                 RETURN(rc);
index 168f6df..b29ab8e 100644 (file)
@@ -839,7 +839,7 @@ int osc_quota_setdq(struct client_obd *cli, const unsigned int qid[],
 
 
         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 
 
         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
-                struct osc_quota_info *oqi, *old;
+                struct osc_quota_info *oqi = NULL, *old;
 
                 if (!(valid & ((cnt == USRQUOTA) ?
                     OBD_MD_FLUSRQUOTA : OBD_MD_FLGRPQUOTA)))
 
                 if (!(valid & ((cnt == USRQUOTA) ?
                     OBD_MD_FLUSRQUOTA : OBD_MD_FLGRPQUOTA)))
@@ -849,12 +849,16 @@ int osc_quota_setdq(struct client_obd *cli, const unsigned int qid[],
                 noquota = (cnt == USRQUOTA) ?
                     (flags & OBD_FL_NO_USRQUOTA) : (flags & OBD_FL_NO_GRPQUOTA);
 
                 noquota = (cnt == USRQUOTA) ?
                     (flags & OBD_FL_NO_USRQUOTA) : (flags & OBD_FL_NO_GRPQUOTA);
 
-                oqi = alloc_qinfo(cli, id, cnt);
-                if (!oqi) {
-                        rc = -ENOMEM;
-                        CDEBUG(D_QUOTA, "setdq for %s %d failed, (rc = %d)\n",
-                               cnt == USRQUOTA ? "user" : "group", id, rc);
-                        break;
+                if (noquota) {
+                        oqi = alloc_qinfo(cli, id, cnt);
+                        if (!oqi) {
+                                rc = -ENOMEM;
+                                CDEBUG(D_QUOTA, "setdq for %s %d failed, "
+                                       "(rc = %d)\n",
+                                       cnt == USRQUOTA ? "user" : "group",
+                                       id, rc);
+                                break;
+                        }
                 }
 
                 cfs_spin_lock(&qinfo_list_lock);
                 }
 
                 cfs_spin_lock(&qinfo_list_lock);
@@ -865,17 +869,19 @@ int osc_quota_setdq(struct client_obd *cli, const unsigned int qid[],
                         insert_qinfo_hash(oqi);
                 cfs_spin_unlock(&qinfo_list_lock);
 
                         insert_qinfo_hash(oqi);
                 cfs_spin_unlock(&qinfo_list_lock);
 
-                if (old || !noquota)
-                        free_qinfo(oqi);
-                if (old && !noquota)
-                        free_qinfo(old);
-
                 if (old && !noquota)
                         CDEBUG(D_QUOTA, "setdq to remove for %s %d\n",
                                cnt == USRQUOTA ? "user" : "group", id);
                 else if (!old && noquota)
                         CDEBUG(D_QUOTA, "setdq to insert for %s %d\n",
                                cnt == USRQUOTA ? "user" : "group", id);
                 if (old && !noquota)
                         CDEBUG(D_QUOTA, "setdq to remove for %s %d\n",
                                cnt == USRQUOTA ? "user" : "group", id);
                 else if (!old && noquota)
                         CDEBUG(D_QUOTA, "setdq to insert for %s %d\n",
                                cnt == USRQUOTA ? "user" : "group", id);
+
+                if (old) {
+                        if (noquota)
+                                free_qinfo(oqi);
+                        else
+                                free_qinfo(old);
+                }
         }
 
         RETURN(rc);
         }
 
         RETURN(rc);