Author: asser
Date: 2005-08-26 16:35:18 +0000 (Fri, 26 Aug 2005)
New Revision: 39

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=linux-cifs-client&rev=39

Log:
Changed struct dir_notify_req to use struct file instead of struct dentry.

Fixed handling of responses with status NT_STATUS_CANCELLED

Modified:
   branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsfs.c
   branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsglob.h
   branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsproto.h
   branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifssmb.c
   branches/SOC/linux-2.6bk-dnotify/fs/cifs/fcntl.c
   branches/SOC/linux-2.6bk-dnotify/fs/cifs/misc.c


Changeset:
Modified: branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsfs.c
===================================================================
--- branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsfs.c   2005-08-23 13:13:27 UTC 
(rev 38)
+++ branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsfs.c   2005-08-26 16:35:18 UTC 
(rev 39)
@@ -870,8 +870,8 @@
                                list_del(&dnotify_req->lhead);
                                spin_unlock(&GlobalMid_Lock);
 
-                               inode = dnotify_req->dentry->d_inode;
-                               cFYI(1,("Notifying file %s mask %lx", 
build_path_from_dentry(dnotify_req->dentry), inode->i_dnotify_mask));
+                               inode = dnotify_req->file->f_dentry->d_inode;
+                               cFYI(1,("Notifying file %s mask %lx", 
build_path_from_dentry(dnotify_req->file->f_dentry), inode->i_dnotify_mask));
 
                                /* use the inode's own mask since we don't know 
exactly what happened */
                                inode_dir_notify(inode, inode->i_dnotify_mask);
@@ -884,7 +884,7 @@
                                        /* multishot, re-request notification */
                                        cFYI(1,("Re-requesting notification 
(multishot)"));
                                        rc = CIFSSMBNotify(xid, tcon, 0, 
dnotify_req->netfid,
-                                               dnotify_req->filter, 
cifs_sb->local_nls, dnotify_req->dentry, 1);
+                                               dnotify_req->filter, 
cifs_sb->local_nls, dnotify_req->file, 1 /* multishot */);
                                        if(rc) {
                                                cERROR(1,("CIFSSMBNotify failed 
in cifs_dnotify_thread rc = %d", rc));
                                        }

Modified: branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsglob.h
===================================================================
--- branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsglob.h 2005-08-23 13:13:27 UTC 
(rev 38)
+++ branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsglob.h 2005-08-26 16:35:18 UTC 
(rev 39)
@@ -342,7 +342,7 @@
        __u16 netfid;
        __u32 filter; /* CompletionFilter (for multishot) */
        int multishot; 
-       struct dentry * dentry;
+       struct file *file;
 };
 
 #define   MID_FREE 0

Modified: branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsproto.h
===================================================================
--- branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsproto.h        2005-08-23 
13:13:27 UTC (rev 38)
+++ branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifsproto.h        2005-08-26 
16:35:18 UTC (rev 39)
@@ -266,7 +266,7 @@
 extern int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon, 
                        const int notify_subdirs,const __u16 netfid,
                        __u32 filter, const struct nls_table *nls_codepage,
-                       struct dentry *dentry, int multishot);
+                       struct file *file, int multishot);
 extern int CIFSSMBCancel(const int xid, struct cifsTconInfo *tcon,
                        __u16 Uid, __le16 Pid, __le16 PidHigh,
                        __u16 Tid, __u16 Mid);

Modified: branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifssmb.c
===================================================================
--- branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifssmb.c  2005-08-23 13:13:27 UTC 
(rev 38)
+++ branches/SOC/linux-2.6bk-dnotify/fs/cifs/cifssmb.c  2005-08-26 16:35:18 UTC 
(rev 39)
@@ -3866,7 +3866,7 @@
 int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon, 
                        const int notify_subdirs, const __u16 netfid,
                        __u32 filter, const struct nls_table *nls_codepage,
-                       struct dentry *dentry, int multishot)
+                       struct file *file, int multishot)
 {
        int rc = 0;
        struct smb_com_transaction_change_notify_req * pSMB = NULL;
@@ -3914,11 +3914,13 @@
                dnotify_req->Tid = pSMB->hdr.Tid;
                dnotify_req->Uid = pSMB->hdr.Uid;
                dnotify_req->netfid = netfid;
-               dnotify_req->dentry = dentry;
+               dnotify_req->file = file;
                dnotify_req->filter = filter;
                dnotify_req->multishot = multishot;
+               cFYI(1,("Locking GlobalMid_Lock"));
                spin_lock(&GlobalMid_Lock);
                list_add_tail(&dnotify_req->lhead, &GlobalDnotifyReqList);
+               cFYI(1,("Unlocking GlobalMid_Lock"));
                spin_unlock(&GlobalMid_Lock);
        }
        cifs_buf_release(pSMB);

Modified: branches/SOC/linux-2.6bk-dnotify/fs/cifs/fcntl.c
===================================================================
--- branches/SOC/linux-2.6bk-dnotify/fs/cifs/fcntl.c    2005-08-23 13:13:27 UTC 
(rev 38)
+++ branches/SOC/linux-2.6bk-dnotify/fs/cifs/fcntl.c    2005-08-26 16:35:18 UTC 
(rev 39)
@@ -96,7 +96,7 @@
                        list_for_each_safe(tmp, tmp1, &GlobalDnotifyReqList) {
                                dnotify_req = list_entry(tmp, struct 
dir_notify_req, lhead);
 
-                               if(dnotify_req->dentry == file->f_dentry) {
+                               if(dnotify_req->file == file) {
                                        rc = CIFSSMBCancel(xid, pTcon, 
dnotify_req->Uid, dnotify_req->Pid,
                                                        dnotify_req->PidHigh, 
dnotify_req->Tid, dnotify_req->Mid);
 
@@ -104,7 +104,6 @@
                                        if(rc) {
                                                cFYI(1,("Error in CIFSSMBCancel 
= %d", rc));
                                        }
-                                       list_del(tmp);
                                }
                        }
                        spin_unlock(&GlobalMid_Lock);
@@ -120,7 +119,7 @@
                                filter = convert_to_cifs_notify_flags(arg);
                                if(filter != 0) {
                                        rc = CIFSSMBNotify(xid, pTcon, 0 /* no 
subdirs */, netfid, 
-                                               filter, cifs_sb->local_nls, 
file->f_dentry, arg & DN_MULTISHOT);
+                                               filter, cifs_sb->local_nls, 
file, arg & DN_MULTISHOT);
 
                                } else {
                                        /* ASF TODO: Close the file handle */

Modified: branches/SOC/linux-2.6bk-dnotify/fs/cifs/misc.c
===================================================================
--- branches/SOC/linux-2.6bk-dnotify/fs/cifs/misc.c     2005-08-23 13:13:27 UTC 
(rev 38)
+++ branches/SOC/linux-2.6bk-dnotify/fs/cifs/misc.c     2005-08-26 16:35:18 UTC 
(rev 39)
@@ -403,13 +403,13 @@
                        (struct smb_com_transaction_change_notify_rsp *)buf;
                struct file_notify_information * pnotify;
                __u32 data_offset = 0;
-               cFYI(1,("pSMBr ByteCount:%ld TotalParameterCount:%ld 
ParameterCount:%ld DataCount:%ld", pSMBr->ByteCount, 
pSMBr->TotalParameterCount, pSMBr->ParameterCount, pSMBr->DataCount));
-               cFYI(1,("pSMBr ParameterOffset:%ld DataOffset:%ld", 
pSMBr->ParameterOffset, pSMBr->DataOffset));
+               cFYI(1,("pSMBr ByteCount:%ld TotalParameterCount:%ld 
ParameterCount:%ld DataCount:%ld", (unsigned long)pSMBr->ByteCount, (unsigned 
long)pSMBr->TotalParameterCount, (unsigned long)pSMBr->ParameterCount, 
(unsigned long)pSMBr->DataCount));
+               cFYI(1,("pSMBr ParameterOffset:%ld DataOffset:%ld", (unsigned 
long)pSMBr->ParameterOffset, (unsigned long)pSMBr->DataOffset));
                pnotify = (struct file_notify_information *) 
(&pSMBr->hdr.Protocol) + pSMBr->DataOffset;
-               cFYI(1,("pnotify NextEntryOffset:%lx Action:%lx 
FileNameLength:%ld",pnotify->NextEntryOffset,pnotify->Action,pnotify->FileNameLength));
-               cFYI(1,("notify err 0x%x",pSMBr->hdr.Status.CifsError));
+               cFYI(1,("pnotify NextEntryOffset:%lx Action:%lx 
FileNameLength:%ld",(unsigned long)pnotify->NextEntryOffset,(unsigned 
long)pnotify->Action,(unsigned long)pnotify->FileNameLength));
+               cFYI(1,("notify err 0x%x (cancelled == 
0x%x)",pSMBr->hdr.Status.CifsError,(NT_STATUS_CANCELLED)));
                if((pSMBr->ByteCount > sizeof(struct file_notify_information)) 
||
-                  (pSMBr->hdr.Status.CifsError == STATUS_NOTIFY_ENUM_DIR)) {
+                  (pSMBr->hdr.Status.CifsError)) {
                    /* Find the request on the req list */
                        spin_lock(&GlobalMid_Lock);
                        list_for_each_safe(tmp, tmp1, &GlobalDnotifyReqList) {
@@ -420,8 +420,9 @@
                                   dnotify_req->Pid == pSMBr->hdr.Pid)
                                {
                                        list_del(tmp);
-                                       if(pSMBr->hdr.Status.CifsError == 
NT_STATUS_CANCELLED) {
-                                               cFYI(1,("Request was 
cancelled"));
+                                       if ((NT_STATUS_CANCELLED) == 
+                                          
le32_to_cpu(pSMBr->hdr.Status.CifsError)) {
+                                               cFYI(1,("Request was cancelled 
(err %lx nt_status_cancelled %lx)", 
pSMBr->hdr.Status.CifsError,NT_STATUS_CANCELLED));
                                                kfree(dnotify_req);
                                        } else {
                                                
list_add_tail(&dnotify_req->lhead, &GlobalDnotifyRsp_Q);
@@ -431,7 +432,7 @@
                        spin_unlock(&GlobalMid_Lock);
                        wake_up_process(dnotifyThread);
                        return TRUE;
-               } /* ASF TODO: NT_STATUS_CANCELLED && file_notify_information */
+               } /* ASF TODO: file_notify_information */
        }  
        return FALSE;
 }

Reply via email to