Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / mds / mds_audit.c
index 3c6c0f3..08c54b4 100644 (file)
@@ -67,9 +67,12 @@ int mds_audit(struct ptlrpc_request *req, struct dentry *dentry,
                 .namelen = 0,
         };
         int rc = 0;
-        
         ENTRY;
         
+        /* don't catch request to cross-ref */
+        if (dentry->d_flags & DCACHE_CROSS_REF)
+                RETURN(0);
+        
         info.m.nid = nid;
         info.m.uid = current->uid;
         info.m.gid = current->gid;
@@ -245,21 +248,23 @@ int mds_set_audit(struct obd_device * obd, void * val)
         ENTRY;
         
         //push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-
-        dentry = mds_id2dentry(obd, &msg->id, NULL);
-        if (IS_ERR(dentry)) {
-                CERROR("Cannot get dentry\n");
-                RETURN(PTR_ERR(dentry));
+        if (IS_AUDIT_OP(msg->attr, AUDIT_FS) == 0) {
+                dentry = mds_id2dentry(obd, &msg->id, NULL);
+                if (IS_ERR(dentry)) {
+                        CERROR("Cannot get dentry "DLID4" err=%li\n", OLID4(&msg->id),
+                                PTR_ERR(dentry));
+                        RETURN(PTR_ERR(dentry));
+                }
+                inode = dentry->d_inode;
         }
-            
-        inode = dentry->d_inode;
-        fsfilt_set_info(obd, inode->i_sb, inode,
+        fsfilt_set_info(obd, obd->u.mds.mds_sb, inode,
                         5, "audit", sizeof(msg->attr), &msg->attr);
         
-        if (S_ISREG(inode->i_mode) && !IS_AUDIT_OP(msg->attr, AUDIT_FS))
+        if (inode && S_ISREG(inode->i_mode))
                 mds_set_obj_audit(obd, inode, &msg->attr);
         
-        l_dput(dentry);
+        if (dentry)
+                l_dput(dentry);
         
         //pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);