Re: [PATCH 3/3] cifs: Return EBUSY instead of ETXTBSY in cifs_rename_pending_delete()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 6 Mar 2013 18:32:46 -0600
Steve French <smfrench@xxxxxxxxx> wrote:

> Does someone have a good explanation of the difference between text
> file busy and device busy?  almost seems like we should be returning
> EXTBUSY more based on the description
> 

ETXTBSY has a more specific meaning on Linux. Mostly, it's used when
you try to alter a binary that's being executed (though there are other
uses -- see mmap(2) for instance).

EBUSY is more general: "Device or Resource busy". That error seems more
appropriate to me in this case. It's also listed as a well-recognized
error in the unlink(2) manpage and here:

    http://pubs.opengroup.org/onlinepubs/009604599/functions/unlink.html

The latter page also lists ETXTBSY as a valid return code, but it has a
somewhat more obscure meaning there.

> On Wed, Mar 6, 2013 at 6:39 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> > On Tue,  5 Mar 2013 19:25:57 +0000
> > Sachin Prabhu <sprabhu@xxxxxxxxxx> wrote:
> >
> >> Instead of remapping ETXTBSY errors to EBUSY in cifs_unlink, replace all
> >> cases of ETXTBSY in cifs_rename_pending_delete() with EBUSY.
> >>
> >> Signed-off-by: Sachin Prabhu <sprabhu@xxxxxxxxxx>
> >> ---
> >>  fs/cifs/inode.c | 6 ++----
> >>  1 file changed, 2 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
> >> index fee2d40..0ab0328 100644
> >> --- a/fs/cifs/inode.c
> >> +++ b/fs/cifs/inode.c
> >> @@ -1034,7 +1034,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
> >>                                  cifs_sb->mnt_cifs_flags &
> >>                                           CIFS_MOUNT_MAP_SPECIAL_CHR);
> >>       if (rc != 0) {
> >> -             rc = -ETXTBSY;
> >> +             rc = -EBUSY;
> >>               goto undo_setattr;
> >>       }
> >>
> >> @@ -1053,7 +1053,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
> >>               if (rc == -ENOENT)
> >>                       rc = 0;
> >>               else if (rc != 0) {
> >> -                     rc = -ETXTBSY;
> >> +                     rc = -EBUSY;
> >>                       goto undo_rename;
> >>               }
> >>               cifsInode->delete_pending = true;
> >> @@ -1167,8 +1167,6 @@ psx_del_no_retry:
> >>                       if (rc == 0)
> >>                               cifs_drop_nlink(inode);
> >>               }
> >> -             if (rc == -ETXTBSY)
> >> -                     rc = -EBUSY;
> >
> >
> >
> > This doesn't look quite right. If ->rename_pending_delete isn't set,
> > then rc will still stay -ETXTBSY. I think this is a good cleanup, but
> > we need to consider changing the mapping for
> > NT_STATUS_SHARING_VIOLATION to -EBUSY as well, and fix all of the
> > places that look for -ETXTBSY in the cifs code.
> >
> >
> >>       } else if ((rc == -EACCES) && (dosattr == 0) && inode) {
> >>               attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
> >>               if (attrs == NULL) {
> >
> >
> > --
> > Jeff Layton <jlayton@xxxxxxxxxx>
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> 


-- 
Jeff Layton <jlayton@xxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux