xfs
[Top] [All Lists]

Re: DMAPI bug in dm_file_getattr() / dm_set_region

To: Dean Roehrich <roehrich@xxxxxxx>
Subject: Re: DMAPI bug in dm_file_getattr() / dm_set_region
From: "James A Goodwin" <jagoodwi@xxxxxxxxxx>
Date: Thu, 6 Jun 2002 11:58:16 -0500
Cc: "Francis Qu" <francis@xxxxxxxxxxxx>, linux-xfs@xxxxxxxxxxx
Sender: owner-linux-xfs@xxxxxxxxxxx
Dean,

Thanks for the patch.  It gets us past the problem with dm_get_fileattr().

However, later in the same function (called when the write event was
received), my process hangs on dm_set_region() for the same file.  Is this
perhaps a similar problem with a similar fix?

Thanks,

-James Goodwin
Software Engineer
IBM Global Services - Federal
jagoodwi@xxxxxxxxxx
Phone: (281) 336 2578
Fax: (281) 335 4231
T/L 260-2578


                                                                                
                                                       
                      Dean Roehrich                                             
                                                       
                      <roehrich@xxxxxxx        To:       James A 
Goodwin/Houston/IBM@IBMUS, "Francis Qu" <francis@xxxxxxxxxxxx>        
                      >                        cc:       linux-xfs@xxxxxxxxxxx  
                                                       
                                               Subject:  Re: DMAPI bug in 
dm_file_getattr() / dm_set_region                            
                      06/06/2002 10:48                                          
                                                       
                      AM                                                        
                                                       
                                                                                
                                                       
                                                                                
                                                       




>From:  "James A Goodwin" <jagoodwi@xxxxxxxxxx>
>I'm running XFS 1.0.2 on kernel 2.4.14 and am having the following DMAPI
>problem:
>
>dm_get_fileattr() hangs when an append is in progress.
>
>I have a file with a DMAPI region covering whole file (offset & length
both
>set to 0).
>The region has read, write, and truncate events enabled.
>When an append is done and the write event is received, a subsequent call
>to dm_get_fileattr() hangs.
>
>Is this something that has been fixed in a later patch, or is it new?

Francis, you reported seeing this via dm_set_region.  It's all the same.
The
user process had an exclusive lock on the xfs_inode_t, preventing DMAPI
from
doing anything with it.

Here's a patch for it.

Dean

-----------


*** /usr/tmp/TmpDir.2091635-0/linux/fs/xfs/linux/xfs_lrw.c_1.140
Thu Jun  6 10:42:48 2002
--- linux/fs/xfs/linux/xfs_lrw.c           Wed Jun  5 14:55:58 2002
***************
*** 531,543 ****
             if ((DM_EVENT_ENABLED_IO(vp->v_vfsp, io, DM_EVENT_WRITE) &&
                 !(filp->f_mode & FINVIS) && !eventsent)) {

                         error = xfs_dm_send_data_event(DM_EVENT_WRITE,
bdp,
                                                 *offsetp, size,
                                                 FILP_DELAY_FLAG(filp),
&locktype);
                         if (error) {
!                                    xfs_iunlock(xip,
XFS_ILOCK_EXCL|iolock);
                                     return error;
                         }
                         eventsent = 1;

                         /*
--- 531,545 ----
             if ((DM_EVENT_ENABLED_IO(vp->v_vfsp, io, DM_EVENT_WRITE) &&
                 !(filp->f_mode & FINVIS) && !eventsent)) {

+                        xfs_iunlock(xip, XFS_ILOCK_EXCL);
                         error = xfs_dm_send_data_event(DM_EVENT_WRITE,
bdp,
                                                 *offsetp, size,
                                                 FILP_DELAY_FLAG(filp),
&locktype);
                         if (error) {
!                                    xfs_iunlock(xip, iolock);
                                     return error;
                         }
+                        xfs_ilock(xip, XFS_ILOCK_EXCL);
                         eventsent = 1;

                         /*





<Prev in Thread] Current Thread [Next in Thread>