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; }
